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

news2024/11/27 21:00:47

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: SimpleDataSet
    data_dir: ./train_data/det/ # 训练集目录
    label_file_list:
      - ./train_data/det/train.txt # 训练标注文件
    ratio_list: [1.0]

b. 验证集位置

Eval:
  dataset:
    name: SimpleDataSet
    data_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: 960
    limit_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: SimpleDataSet
    data_dir: ./train_data/rec/
    ext_op_transform_idx: 1
    label_file_list:
    - ./train_data/rec/train.txt
    transforms:

b. 验证数据集

Eval:
  dataset:
    name: SimpleDataSet
    data_dir: ./train_data/rec
    label_file_list:
    - ./train_data/rec/val.txt
    transforms:

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.coloradmin.cn/o/1291471.html

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

相关文章

基于ssm人事管理信息系统论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本人事管理信息系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息…

跨境电商危机公关:应对负面舆情的策略优化

随着跨境电商的快速发展,企业在全球市场中面临的竞争与挑战也日益复杂。在这个数字时代,负面舆情一旦爆发,可能对企业形象和经营造成深远影响。 因此,跨境电商企业需要建立有效的危机公关策略,以迅速、果断、有效地应…

Vue + Element 实现按钮指定间隔时间点击

1、业务需求 需要加一个按钮&#xff0c;调用第三方API&#xff0c;按钮十分钟之内只能点击一次&#xff0c;刷新页面也只能点击一次 2、思路 加一个本地缓存的时间戳&#xff0c;通过时间戳计算指定时间内不能点击按钮 3、实现 1&#xff09;vue页面 <template>&l…

angular项目怎么给iframe动态赋值

前段时间在做项目的时候&#xff0c;给项目嵌入了一个第三方的ai链接&#xff0c;之前写成一个死的链接&#xff0c;测试都正常&#xff0c;但是后期迭代的时候将链接后面动态添加了一个参数&#xff0c;发现iframe不出来&#xff0c;并且查看dom结构&#xff0c;直接src对应的…

python中通过print输出信息

直接输出信息 例如&#xff1a; print("hello python")通过逗号将变量分割 例如&#xff1a; age 12 print("age is ", age)输出&#xff1a; 使用%占位符 例如&#xff1a; age 12 print("age is %d" %age)输出&#xff1a; 用f格式…

备战2024前端春招,你准备好了吗?(附10万字答案解析)

1. 前端知识体系 在说前端面试体系之前&#xff0c;先来看一下之前整理的前端知识体系图&#xff08;可能不太完整&#xff0c;毕竟我只是一个刚毕业一个多月的小菜鸡&#xff09;&#xff0c;这只是一个基础版的前端知识体系图&#xff0c;适合刚入门前端的小伙伴参考&#x…

openeuler安装深度桌面dde

安装深度开发的桌面dde sudo dnf makecachesudo dnf install ddesudo systemctl set-default graphical.target重启系统 reboot

JPA与MySQL锁实战

前言&#xff1a;最近使用jpa和mysql时&#xff0c;遇到了死锁问题。在解决后将一些排查过程中新学到和复习到的知识点再总结整理一下。首先对InnoDB中锁相关的概念进行介绍&#xff0c;然后展示如何利用JPA提供的排他锁来实现想要的功能&#xff0c;最后对死锁问题进行讨论。 …

【EI会议征稿】第三届密码学、网络安全和通信技术国际会议(CNSCT 2024)

第三届密码学、网络安全和通信技术国际会议&#xff08;CNSCT 2024&#xff09; 2024 3rd International Conference on Cryptography, Network Security and Communication Technology 随着互联网和网络应用的不断发展&#xff0c;网络安全在计算机科学中的地位越来越重要&…

solidity案例详解(六)服务评价合约

有服务提供商和用户两类实体&#xff0c;其中服务提供商部署合约&#xff0c;默认诚信为true&#xff0c;用户负责使用智能合约接受服务及评价&#xff0c;服务提供商的评价信息存储在一个映射中&#xff0c;可以根据服务提 供商的地址来查找评价信息。用户评价信息&#xff0c…

Linux学习笔记2

web服务器部署&#xff1a; 1.装包&#xff1a; [rootlocalhost ~]# yum -y install httpd 2.配置一个首页&#xff1a; [rootlocalhost ~]# echo i love yy > /var/www/html/index.html 启动服务&#xff1a;[rootlocalhost ~]# systemctl start httpd Ctrl W以空格为界…

定时器的使用及实现

在Java中&#xff0c;定时器&#xff08;Timer&#xff09;是一个用于执行任务的工具类。它可以安排任务在指定的时间点执行&#xff0c;或者按照指定的时间间隔周期性地执行。 1. Timer类 Timer类位于java.util包中&#xff0c;它提供了一种简单而便利的方式来安排以后的任务…

1.4 场景设计精要

一、场景主题确定 设计游戏场景首先明确游戏发生的时间地点等时代背景。通过对玩家动线的设计&#xff0c;功能模型的合理布局构建出场景的基本骨架。利用光影效果和色彩变化烘托场景氛围。 市场上常见的主题场景&#xff1a;剑侠、科幻、废墟、魔幻等 二、场景风格确定 大类分…

深入理解mysql的explain命令

1 基础 全网最全 | MySQL EXPLAIN 完全解读 1.1 MySQL中EXPLAIN命令提供的字段包括&#xff1a; id&#xff1a;查询的标识符。select_type&#xff1a;查询的类型&#xff08;如SIMPLE, PRIMARY, SUBQUERY等&#xff09;。table&#xff1a;查询的是哪个表。partitions&…

Vue学习计划-Vue2--Vue核心(七)生命周期

抛出问题&#xff1a;一进入页面就开启一个定时器&#xff0c;每隔1秒count就加1&#xff0c;如何实现 示例&#xff1a; <body> <div id"app">{{ n }}<button click"add">执行</button> </div><script>let vm new …

西工大计算机学院计算机系统基础实验一(函数编写15~17)

还是那句话&#xff0c;稳住心态&#xff0c;稳住心态&#xff0c;稳住心态。心里别慌&#xff0c;心里别慌&#xff0c;心里别慌。 第15题&#xff0c;howManyBits&#xff0c;返回用二进制补码形式表示x所需的最小二进制位数。比如howManyBits(12) 5&#xff0c;12可以被表…

高级实现Java的七大热门技术框架解析源码特性分析

Java是一门广泛应用的编程语言&#xff0c;拥有众多热门技术框架。本文将通过解析源码和特性分析&#xff0c;带你深入了解Java的七大热门技术框架&#xff0c;并提供相关示例代码。 一、Spring框架 Spring是Java最流行的开发框架之一&#xff0c;提供了依赖注入&#xff08;D…

电商早报 | 12月7日| 阿里巴巴分红179亿,破历史记录

阿里巴巴将派发25亿美元年度股息 12月6日消息&#xff0c;阿里巴巴发布公告&#xff0c;将向截至2023年12月21日香港时间及纽约时间收市时登记在册的普通股持有人和美国存托股持有人&#xff0c;就2023财年首次派发年度股息&#xff0c;金额分别为每股普通股0.125美元或每股美…

mysql知识分享(包含安装卸载)(一)

如果博客有错误&#xff0c;请佬指正。 目录 注意&#xff1a;打开cmd时要有管理员身份打开&#xff0c;重要 为何使用数据库&#xff1f; 数据库的相关概念 关系型数据库 关系型数据库设计规则 表&#xff0c;记录&#xff0c;字段 表的关联关系 一对一关联 一对多关系 …

如何衡量和提高测试覆盖率?

衡量和提高测试覆盖率&#xff0c;对于尽早发现软件缺陷、提高软件质量和用户满意度&#xff0c;都具有重要意义。如果测试覆盖率低&#xff0c;意味着用例未覆盖到产品的所有代码路径和场景&#xff0c;这可能导致未及时发现潜在缺陷&#xff0c;代码中可能存在逻辑错误、边界…