PPOCRv3检测模型和识别模型的训练和推理

PPOCRv3检测模型和识别模型的训练和推理

文章目录

  • PPOCRv3检测模型和识别模型的训练和推理
  • 前言
  • 一、环境安装
    • 1,官方推荐环境:
    • 2,本机GPU环境
  • 二、Conda虚拟环境
    • 1.Win10安装Anaconda3
    • 2.使用conda创建虚拟环境
  • 三、安装PPOCR环境
    • 1,安装paddlepaddle
    • 2,安装paddleOCR
    • 3,测试中英文模型识别
    • 4,可能遇到的错误
  • 四、Win10环境训练提示
  • 五、标注图片
    • 1,安装PPOCRLabel
    • 2,启动运行
    • 3、准备数据集
  • 七、检测模型训练
    • 1. 进入主目录
    • 2. 开始训练
    • 3. 可能出现的错误
    • 4. 断点训练
    • 5. 指标评估(F-score)
    • 6. 单张测试
    • 7. 文件夹测试
    • 8. 模型转换
    • 9. DB模型预测
  • 八、识别模型训练
    • 1. 单卡训练命令如下:
    • 2. 断点训练
    • 3. GPU 评估
    • 4. 预测结果
    • 5. 模型导出
    • 6. 使用中间值测试
  • 九、模型转为nb格式
  • 总结


前言

PPOCR是百度飞桨的开源OCR产品,在OCR领域优势领先。


一、环境安装

1,官方推荐环境:

PaddlePaddle >= 2.1.2
Python 3.7
CUDA10.1 / CUDA10.2
CUDNN 7.6

2,本机GPU环境

本机系统:Win10
显卡型号:GeForce RTX 2060, NVIDIA控制面板
驱动版本: 457.20
cuda:cuda10.2
cudnn:cudnn7.6.5
cuda安装参考:
https://zhuanlan.zhihu.com/p/99880204
https://developer.nvidia.com/cuda-toolkit-archive
cuda版本查看:nvcc -V
cudnn安装参考:
https://developer.nvidia.com/rdp/cudnn-archive

二、Conda虚拟环境

1.Win10安装Anaconda3

2.使用conda创建虚拟环境

conda create --name paddle_env python=3.8
#激活paddle_env环境
conda activate paddle_env
#查看当前python的位置
where python
在这里插入图片描述

三、安装PPOCR环境

1,安装paddlepaddle

需要对应cuda版本的paddlepaddle,参考链接:
https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/install/pip/windows-pip.html
由于项目中使用C++版本paddleInference2.3.2.dll推理,所以使用的安装命令:

conda install paddlepaddle-gpu==2.3.2 cudatoolkit=10.2 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/

官方推荐命令:

conda install paddlepaddle-gpu==2.5.1 cudatoolkit=10.2 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/

或者

python -m pip install paddlepaddle-gpu==2.5.1.post102 -f https://www.paddlepaddle.org.cn/whl/windows/mkl/avx/stable.html

2,安装paddleOCR

pip install "paddleocr>=2.0.1" # 推荐使用2.0.1+版本

命令默认安装最新版本2.7.0.2

3,测试中英文模型识别

paddleocr --image_dir doc/imgs/11.jpg --use_angle_cls false --use_gpu true --ocr_version PP-OCRv3

在这里插入图片描述

4,可能遇到的错误

错误处理1:(OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5 already initialized)

set KMP_DUPLICATE_LIB_OK=True

错误处理2:(AttributeError: module ‘numpy’ has no attribute ‘int’.)

pip install "Numpy==1.23.5"

四、Win10环境训练提示

a. 检测需要的数据相对较少,在PaddleOCR模型的基础上进行Fine-tune,一般需要500张可达到不错的效果。
b. 识别分英文和中文,一般英文场景需要几十万数据可达到不错的效果,中文则需要几百万甚至更多。
c, Windows GPU/CPU 在Windows平台上与Linux平台略有不同: Windows平台只支持单卡的训练与预测,指定GPU进行训练set CUDA_VISIBLE_DEVICES=0
d, 在Windows平台,DataLoader只支持单进程模式,因此需要设置 num_workers 为0;

五、标注图片

1,安装PPOCRLabel

pip install PPOCRLabel -i https://mirror.baidu.com/pypi/simple

或者

pip install PPOCRLabel  # 安装

2,启动运行

选择标签模式来启动

PPOCRLabel --lang ch  # 启动【普通模式】,用于打【检测+识别】场景的标签

可能遇到的问题:删除图片出现No module named ‘win32com’

pip install pypiwin32

3、准备数据集

a. 标注完成后导出识别结果
b. 划分数据集

cd D:\Workspace\PaddleOCR-release-2.7\PPOCRLabel # 将目录切换到PPOCRLabel文件夹下
python gen_ocr_train_val_test.py --trainValTestRatio 6:2:2 --datasetRootPath ../zrd_images

c. 生成检测和识别数据集目录

D:\Workspace\PaddleOCR-release-2.7\train_data

七、检测模型训练

1. 进入主目录

cd D:\Workspace\PaddleOCR-release-2.7

2. 开始训练

官方推荐使用的配置文件和预训练模型如下

python tools/train.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml -o Global.pretrained_model=./pretrain_models/ch_PP-OCRv3_det_distill_train/student

执行此命令前先从官网下载ch_PP-OCRv3_det_distill_train模型,并选择student模型(官方推荐),然后修改yml文件
a. 训练集位置

Train:dataset:name: SimpleDataSetdata_dir: ./train_data/det/ # 训练集目录label_file_list:- ./train_data/det/train.txt # 训练标注文件ratio_list: [1.0]

b. 验证集位置

Eval:dataset:name: SimpleDataSetdata_dir: ./train_data/det/ # 验证集目录label_file_list:- ./train_data/det/val.txt # 验证标注文件transforms:- DecodeImage:

c. 非常重要,这俩参数需要跟推理的参数保持一致,官方默认DetResizeForTest:null, 从代码中其实是(limit_side_len:736 limit_type:min处理)

- DetResizeForTest: limit_side_len: 960limit_type: max

比如本人C++推理参数:

std::string FLAGS_limit_type = "max"; //"limit_type of input image.");
int FLAGS_limit_side_len = 960;// "max_side_len of input image.");

如果这俩参数不一致会导致推理结果跟官方相差较大。

d. 对于Win10

num_workers: 0

e. 如果显卡较弱,适当调小batchsize

batch_size_per_card: 32

3. 可能出现的错误

a. 训练出现错误1:module ‘numpy’ has no attribute ‘bool’,原因是numpy版本不对

pip3 install numpy==1.23.1

b. 训练出现错误2:Out of memory error on GPU,显卡内存小,调整batchsize大小

batch_size_per_card: 32

4. 断点训练

python tools/train.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml -o Global.checkpoints=./output/ch_PP-OCR_v3_det/latest

5. 指标评估(F-score)

python tools/eval.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml  -o Global.checkpoints=./output/ch_PP-OCR_v3_det/best_accuracy

6. 单张测试

python tools/infer_det.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml -o Global.infer_img=./train_data/det/test/0a1a8ba8c6374088a2d13cbba443b526.jpg Global.pretrained_model=./output/ch_PP-OCR_v3_det/best_accuracy

7. 文件夹测试

python tools/infer_det.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml -o Global.infer_img=./train_data/det/test/ Global.pretrained_model=./output/ch_PP-OCR_v3_det/best_accuracy

8. 模型转换

加载配置文件ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml,从output/det_db目录下加载best_accuracy模型,inference模型保存在./output/det_db_inference目录下

python tools/export_model.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml -o Global.pretrained_model=./output/ch_PP-OCR_v3_det/best_accuracy Global.save_inference_dir=./output/det_db_inference/

导出有三个文件夹 student student2 teacher,选student和student2中效果好的使用

9. DB模型预测

python tools/infer/predict_det.py --det_algorithm="DB" --det_model_dir="./output/det_db_inference/" --image_dir="D:\Workspace\ZrdQRCode\ZrdDecoderServer2.13\images\test\2022-09-26-04-16-03-229.jpg" --use_gpu=True

八、识别模型训练

1. 单卡训练命令如下:

python tools/train.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml -o Global.pretrained_model=./pretrain_models/ch_PP-OCRv3_rec_train/best_accuracy

执行命令前下载预训练模型ch_PP-OCRv3_rec_train,然后修改ch_PP-OCRv3_rec_distillation.yml文件

a. 训练数据集

Train:dataset:name: SimpleDataSetdata_dir: ./train_data/rec/ext_op_transform_idx: 1label_file_list:- ./train_data/rec/train.txttransforms:

b. 验证数据集

Eval:dataset:name: SimpleDataSetdata_dir: ./train_data/reclabel_file_list:- ./train_data/rec/val.txttransforms:

c. 对于Windows

num_workers: 0

d. 如果显卡较弱

batch_size_per_card: 32

e. 错误处理

错误处理1:No module named ‘yaml’

pip install pyyaml

2. 断点训练

python tools/train.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml -o Global.checkpoints=./output/rec_ppocr_v3_distillation/latest

3. GPU 评估

python -m paddle.distributed.launch --gpus 0 tools/eval.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml -o Global.checkpoints=./output/rec_ppocr_v3_distillation/best_accuracy

Global.checkpoints 为待测权重

4. 预测结果

python tools/infer_rec.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml -o Global.pretrained_model=./output/rec_ppocr_v3_distillation/best_accuracy  Global.infer_img=doc/imgs_words/ch/word_7.jpg

5. 模型导出

python tools/export_model.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml -o Global.pretrained_model=./output/rec_ppocr_v3_distillation/best_accuracy  Global.save_inference_dir=./output/rec_db_inference/

-c 后面设置训练算法的yml配置文件
-o 配置可选参数
Global.pretrained_model 参数设置待转换的训练模型地址,不用添加文件后缀 .pdmodel,.pdopt或.pdparams
Global.save_inference_dir参数设置转换的模型将保存的地址。

6. 使用中间值测试

python tools/export_model.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml -o Global.pretrained_model=./output/rec_ppocr_v3_distillation/iter_epoch_3  Global.save_inference_dir=./output/iter_epoch_3/

由于训练中间值都保存着,可以选中间值测试一下,执行效果和速度


九、模型转为nb格式

待补充

总结

作为学习的记录,仅供参考

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/204103.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据可视化免费化的双面影响探析

近年来数据可视化的免费化也越来越明显,今天就以我作为可视化设计师的经验来和大家分析一下,数据可视化工具免费化所带来的利与弊。 先从好处入手,最明显的就是免费化可以让数据可视化工具得到更广泛的使用。 免费数据可视化工具使得更多人可…

生命在于折腾——使用PD打开OVA格式虚拟机

一、前言 下载了一个封装的工具箱虚拟机,格式是OVA的,PD无法直接打开,之前成功转换后打开过,但那时候没有记录,今天记录一下。 二、过程 有两种方法 1、去vmware官网下载工具VMware OVF Tool 地址:htt…

代码随想录算法训练营第四十二天 _ 动态规划_01背包问题、416.分割等和子集。

学习目标: 动态规划五部曲: ① 确定dp[i]的含义 ② 求递推公式 ③ dp数组如何初始化 ④ 确定遍历顺序 ⑤ 打印递归数组 ---- 调试 引用自代码随想录! 60天训练营打卡计划! 学习内容: 二维数组处理01背包问题 听起来…

大屏图表汇总echarts圆环

圆环效果示例 代码如下 storageStaChart() {let color [#009976,#15E6B5]let charts echarts.init(document.getElementById(storageStaChart));let option this.getPieOption(color);charts.setOption(option, true);}, getPieOption(color) {let data [];data.push({val…

Java高级技术-单元测试

单元测试 Junit单元测试框架 Junit单元测试-快速入门 方法类 测试类 Junit框架的基本注解

[Geek Challenge 2023] web题解

文章目录 EzHttpunsignn00b_Uploadeasy_phpEzRceezpythonezrfi EzHttp 按照提示POST传参 发现密码错误 F12找到hint,提示./robots.txt 访问一下,得到密码 然后就是http请求的基础知识 抓包修改 最后就是 我们直接添加请求头O2TAKUXX: GiveMeFlag 得到…

FPGA高端项目:UltraScale GTH + SDI 视频编解码,SDI无缓存回环输出,提供2套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐我这里已有的 GT 高速接口解决方案我目前已有的SDI编解码方案 3、详细设计方案设计框图3G-SDI摄像头LMH0384均衡EQUltraScale GTH 的SDI模式应用UltraScale GTH 基本结构参考时钟的选择和分配UltraScale GTH 发送和接收处理流程UltraScale…

kali linux使用Proxmark3

其实kali linux下已经集成了Proxmark3命令,但是由于Proxmark3是开源设备,有时候系统默认安装的版本并不能很好的使用,因此需要手动编译最新的版本。 step 1 准备Proxmark3编译环境,因为kali linux比较激进,很多老旧的…

这书看着贼得劲儿

作者呕心沥血2年,再出力作~~~ 给大家推荐一本好玩的书 神经网络与TensorFlow 本来以为出版了第一本书,应该对于漫长的审核有免疫力了,结果又被这本书折磨了2年。于是作者痛定思痛,决定第三本书写一本纯科普的书籍。 墙裂推荐 这…

电力智慧运维系统

电力智慧运维系统是以提高用户侧电力运行安全,降低运维成本为目标;采用智能化运维管理工具—“电易云”,帮助企业建立电力运维体系全方位的信息化、数字化平台,实现设备运行的数字化在线监控与线下维护处理的有机融合,…

没错,数据库确实应该放入 K8s 里!

昨天冯老板发了一篇文章探讨了为什么将数据库放入 K8S 中不是一个明智的选择。 如果是四年前有人质疑容器化数据库我觉得还可以 battle 一下,都 2023 年了还有人不能认清这个大势,我就有必要来谈谈我的看法了。 我从 K8s 0.9 版本时就开始做这件事&…

离线环境下安装微软Visual Studio 2022 生成工具

1. 前言 最近,在学习cython的时候,需要安装windows下的C/C编译、链接工具。开始觉得传统的msvc太大了,想要尝试Mingw,但是都是编译错误。无奈之下,还是要安装msvc。 微软提供了Visual Studio 2022 Build Tools &…

多线程基础

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 多线程向来是面试的重灾…

小中大女童穿搭 I 时尚百搭保暖性超赞

杜邦三防面料+超足充绒量 金属拉链+金属按扣+松紧下摆 可以说是将细节做到实处 防风保暖潮nice 经典宽松版型对身材包容性很强 后背和口袋两侧都做了 可调节抽绳,不会显得臃肿 很简单大方,搭配卫裤牛仔裤都好看…

推荐几款转换视频格式的好用转换工具,小白也能上手

视频格式转换工具是一种专门转换视频的软件,可让你将一种视频格式转换为另一种视频格式(例如,MOV 到 MP4),通常可以节省空间。 本文将介绍一些用于转换视频格式的好用转换工具,并且详细描述了它们的主要功…

快速安装Axure RP Extension for Chrome插件

打开原型文件的html,会跳转到这个页面,怎么破? 我们点开产品设计的原型图如果没有下载Axure插件是打不开,而我们国内网通常又不能再google商店搜索对应插件,下面教大家如何快速安装 1、打开原型文件->resources-&g…

SQL Server 数据库,创建触发器避免数据被更改

5.4触发器 触发器是一种特殊类型的存储过程,当表中的数据发生更新时将自动调用,以响应INSERT、 UPDATE 或DELETE 语句。 5.4.1什么是触发器 1.触发器的概念 触发器是在对表进行插入、更新或删除操作时自动执行的存储过程,触发器通常用于强…

软件系统应用开发安全指南

2.1.应用系统架构安全设计要求 2.2.应用系统软件功能安全设计要求 2.3.应用系统存储安全设计要求 2.4.应用系统通讯安全设计要求 2.5.应用系统数据库安全设计要求 2.6.应用系统数据安全设计要求 全资料获取进主页。

微信小程序 -订阅发布模式

图形展示: 代码展示: 1. 安装模块 pubsub-js npm i pubsub-js --save 2. 导入模块(在需要订阅发布的 js 页面内进行导入) import PubSub from pubsub-js 注:在微信小程序中无法直接npm 下载 导入 的(安…

会声会影2024编辑过程很卡怎么解决

会声会影是一款常用的视频剪辑软件,在使用过程中,可能会遇到视频卡顿的情况。造成这种情况的原因有很多,下面我就给大家讲解一下用会声会影做视频会卡的原因,会声会影剪辑时卡顿怎么设置的方法。 会声会影 2022 安装包:https://so…