RK3568笔记三十:PP-ORCv3自训练部署

news2024/10/5 16:22:04

若该文为原创文章,转载请注明原文出处。

一、介绍

PP-OCR 是百度公布并开源的OCR领域算法,一个轻量级的OCR系统,在实现前沿算法的基础上,考虑精度与速度的平衡, 进行模型瘦身和深度优化,使其尽可能满足产业落地需求。

PP-OCR是一个两阶段的OCR系统,其中文本检测算法选用DB,文本识别算法选用CRNN,并在检测和识别模块之间添加文本方向分类器,以应对不同方向的文本识别。

原本想测试PP-ORCv4,但在训练数据时,显卡内存一直报错,原因未知,修改参数无效,所以本章记录的是PP-ORCv3训练及部署,PP-ORCv4理论方法一样,可以自行测试,如有成功往告知。

二、 平台介绍

1、训练平台: Autodl 

2、开发板: ATK-DLRK3568

3、系统: buildroot

可以使用自己的电脑训练或平台租服务器,必须要有GPU.

三、环境搭建

1、创建虚拟环境

conda create -n paddle_env python=3.8

2、激活

conda activate paddle_env

3、下载PaddleOCR

https://github.com/PaddlePaddle/PaddleOCR/tree/release/2.7

使用git克隆或直接下在到虚拟机解压。

4、安装轮子

cd PaddleOCR-release-2.7
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

5、安装paddle

开始使用_飞桨-源于产业实践的开源深度学习平台 (paddlepaddle.org.cn)

根据CUDA版本自行安装配套版本,租的是2080 CUDA 10.1,下面命令安装:

python -m pip install paddlepaddle-gpu==2.3.2.post101 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html

6、paddle验证

使用 python 进入 python 解释器

# 输入
import paddle 
# 再输入
paddle.utils.run_check()

如果出现PaddlePaddle is installed successfully!,说明您已成功安装。

卸载

python -m pip uninstall paddlepaddle

四、标注工具使用

使用的数据集不是自己标注的,用的是一个车牌识别的数据集。

但标注工具了解一下

1、安装标注工具

cd PaddleOCR/PPOCRLabel

python setup.py bdist_wheel 

pip install .\dist\PPOCRLabel-2.1.3-py2.py3-none-any.whl -i https://pypi.tuna.tsinghua.edu.cn/simple

PPOCRLabel --lang ch

2、打开PPOCRLabel

PPOCRLabel --lang ch

3、PPOCRLabel使用说明

PPOCRLabel使用自行了解

五、测试

测试训练等都需要模型,所以先下载模型

1、下载模型

PaddlePaddle/PaddleOCR: Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80+ languages recognition, provide data annotation and synthesis tools, support training and deployment among server, mobile, embedded and IoT devices) (github.com)

分别下载PP-OCRv3的检测和识别的推理模型和训练模型

模型分别放在inference_model和pretrain_models目录下,没有自行新创建

inference_model存放推理模型

2、下载测试数据

https://paddleocr.bj.bcebos.com/dygraph_v2.1/ppocr_img.zip

下载后解压

3、测试

命令是推理测试,根据自己的路径需要image和model

python tools/infer/predict_system.py  --image_dir="../ppocr_img/imgs/11.jpg" --det_model_dir="./inference_model/ch_PP-OCRv3_det_infer/" --rec_model_dir="./inference_model/ch_PP-OCRv3_rec_infer/"

六、文本检测模型训练

自行准备数据集(或是用官方提供的,但测试官方的数据集有问题没测试通过)

1、修改配置文件

修改config/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml配置文件,主要修改train和test路徑

# 1、训练数据集路径
Train:
  dataset:
    name: SimpleDataSet
    data_dir: ./train_data/images_det/train/
    label_file_list:
      - ./train_data/images_det/det_label_train.txt
    ratio_list: [1.0]

# 2、测试数据集路径
Eval:
  dataset:
    name: SimpleDataSet
    data_dir: ./train_data/images_det/test/
    label_file_list:
      - ./train_data/images_det/det_label_test.txt

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/best_accuracy.pdparams

等待,训练500轮大概3-4小时

输出模型保存在./output/ch_PP-OCR_V3_det目录下。

3、测试

python tools/infer_det.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml -o Global.infer_img="./doc/imgs/car.jpg" Global.pretrained_model="./output/ch_PP-OCR_V3_det/best_accuracy"

4、inference 模型导出

训练过程中保存的模型是checkpoints模型,保存的只有模型的参数,多用于恢复训练等。 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_PP-OCRv3_inference/"

七、文字识别模型训练

1、修改配置文件

修改配置文件configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml

这里需要注意的是显存问题,默认的配置使用8卡,如果训练出错需要修改下面两个参数:

batch_size_per_card: 64
num_workers: 2

修改的内容

# 1、训练路径
Train:
  dataset:
    name: SimpleDataSet
    data_dir: ./train_data/images_rec/train/
    ext_op_transform_idx: 1
    label_file_list:
    - ./train_data/images_rec/rec_label_train.txt

# 2、batch_size
loader:
    shuffle: true
    batch_size_per_card: 64
    drop_last: true
    num_workers: 2

# 3、测试路径
Eval:
  dataset:
    name: SimpleDataSet
    data_dir: ./train_data/images_rec/test/
    label_file_list:
    - ./train_data/images_rec/rec_label_test.txt

# 4、batch_size
 loader:
    shuffle: false
    drop_last: false
    batch_size_per_card: 16
    num_workers: 1

2、训练

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

3、inference 模型导出

python tools/export_model.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml -o Global.pretrained_model="./output/rec_ppocr_v3/best_accuracy" Global.save_inference_dir="./output/rec_PP-OCRv3_inference/"

八、导出ONNX模型

1、安装paddle2onnx

python -m pip install paddle2onnx -i https://pypi.tuna.tsinghua.edu.cn/simple
python -m pip install onnxruntime==1.9.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

2、导出det模型

paddle2onnx --model_dir ./output/det_PP-OCRv3_inference --model_filename inference.pdmodel --params_filename inference.pdiparams --save_file ./output/det_PP-OCRv3_inference/car_ocrv3_det.onnx --opset_version 12

# Seting fix input shape

python -m paddle2onnx.optimize --input_model ./output/det_PP-OCRv3_inference/car_ocrv3_det.onnx --output_model output/det_PP-OCRv3_inference/ppocrv3_det.onnx --input_shape_dict "{'x':[1,3,480,480]}"

3、导出rec模型

paddle2onnx --model_dir ./output/rec_PP-OCRv3_inference --model_filename inference.pdmodel --params_filename inference.pdiparams --save_file ./output/rec_PP-OCRv3_inference/car_ocrv3_rec.onnx --opset_version 12 

Seting fix input shape和det的不一样

python -m paddle2onnx.optimize --input_model ./output/rec_PP-OCRv3_inference/car_ocrv3_rec.onnx --output_model output/rec_PP-OCRv3_inference/ppocrv3_rec.onnx --input_shape_dict "{'x':[1,3,48,320]}"

至此,模型训练完成。

九、ONNX模型测试

测试使用的是airockchip/rknn_model_zoo (github.com)测试,安装环境可以查看正点原子的教程安装。

1、测试ppocrv3_det.onnx

把上面转换后的ONNX模型复制到rknn_model_zoo-main\examples\PPOCR\PPOCR-Det\model目录下,在进入目录 rknn_model_zoo-main\examples\PPOCR\PPOCR-Det\python目录 

执行下面命令测试

python ppocr_det.py --model_path ../model/ppocrv3_det.onnx

2、测试ppocrv3_rec.onnx

把上面转换后的ONNX模型复制到rknn_model_zoo-main\examples\PPOCR\PPOCR-Rec\model目录下,在进入目录 rknn_model_zoo-main\examples\PPOCR\PPOCR-Rec\python目录 

执行下面命令测试

python ppocr_rec.py --model_path ../model/ppocrv3_rec.onnx

测试检测输出正常,由于训练的轮数不够,所以识别率有点低。

转成RKNN模型及部署到开发板上参考前面文章。

至此训练部署正常。

遗憾PP-ORCv4训练没有跑通。

如有侵权,或需要完整代码,请及时联系博主。

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

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

相关文章

Django request.POST获取提交的表单数据

在Django中,request.POST 是一个特殊的属性,它是一个类似于字典的对象,用于访问通过POST方法提交的表单数据。如果你在视图中使用 print(request.POST.get(username)),这通常意味着你正在尝试从一个HTML表单中获取一个名为 userna…

映宇宙:多基础设施下,如何进行数据库选型升级|OceanBase 《DB大咖说》(五)

随着多基础设施成为行业发展的主流趋势,数据库选型时需要考虑哪些关键因素?对于云数据库的升级策略,又该如何制定?OceanBase《DB 大咖说》第五期特别邀请了映宇宙(原映客)的数据库负责人赵智博先生&#xf…

DENet:融合全局与局部,多模块策略,超越传统分割方法,提升青光眼筛查精度

DENet:融合全局与局部,多模块策略,超越传统分割方法,提升青光眼筛查精度 提出背景精细拆解A. 全局视网膜图像层面B. 视盘区域层面 提出背景 论文:https://arxiv.org/pdf/1805.07549 代码:https://github.…

使用mysqldump迁移MySQL数据

将Windows系统中MySQL数据导出到其他系统中MySQL数据库中 1.导出数据 进入MySQL安装目录的bin目录下,打开dos窗口执行以下命令 --single-transaction 参数表示不锁表 1.1 指定部分表导出 mysqldump -u用户名 -p密码 数据库名 表1 表2 表3 --single-transact…

Nvidia/算能 +FPGA+AI大算力边缘计算盒子:测控巡检智能机器人

是集研发、生产、制造、销售为一体的高新技术企业,是国内"皮带机智能巡检"领域的技术引领者。公司先后获得国家级高新技术企业、太原市市级企业技术中心、太原市技术创新示范企业、山西省民营科技企业、山西省专精特新中小企业、山西省四新中小企业、太原…

【经验分享】搭建电商项目过程中关于淘宝APP商品数据采集的要点

淘宝APP商品采集的注意事项和应用可以归纳为以下几点: 注意事项: 遵守平台规则: 在进行淘宝商品采集时,务必遵守淘宝平台的相关规则,不得采集敏感信息,如用户隐私、商家敏感数据等。尊重商家权益&#xf…

PMP考试技巧和PMP考试大纲

今日分享PMP考试技巧,文末附上PMP考试大纲,你会喜欢的! PMP考试大纲:人员试题占比42% ,流程试题占比50%,商业环境试题占比8%。 PMP解题策略 PMP考试默认条件 精准审题 E(Eye):找到题眼; K(Key):找到考…

ui自动化中,selenium进行元素定位,以及CSS,xpath定位总结

几种定位方式 简单代码 from selenium import webdriver import time# 创建浏览器驱动对象 from selenium.webdriver.common.by import Bydriver webdriver.Chrome() # 参数写浏览器驱动文件的路径,若配置到环境变量就不用写了 # 访问网址 driver.get…

视频大模型 Vidu 支持音视频合成;字节跳动推出语音生成模型 Seed-TTS 丨 RTE 开发者日报 Vol.221

开发者朋友们大家好: 这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「…

618什么数码好物值得入手?优质数码清单分享,错过等明年!

在到来的618年中大促,各种数码好物竞相亮相,正是您更新装备、升级体验的黄金时刻,在这个购物的狂欢节里,我们特别为大家准备了一份精选的优质数码清单,帮助大家从海量的选择中筛选出真正值得入手的宝贝,这些…

问题:与十六进制数AB等值的二进制数是()。 #其他#经验分享

问题:与十六进制数AB等值的二进制数是()。 A.10101011 B.10011010 C.10101010 D.11011100 参考答案如图所示

CSS实现3个圆点加载动画

加载动画主要使用了css的animation和transform属性&#xff0c;animation用来实现动画效果&#xff0c;transform实现过渡&#xff0c;让动画看起来更真实 一、html <div class"loadding-box"><div class"dot1"></div><div class&qu…

根据AgentLego 搭建多工具智能体

操作目的和工具介绍 操作目的&#xff1a; 本操作文档旨在指导用户如何使用 AgentLego 进行智能体构建。AgentLego 是一个开源的智能体算法库&#xff0c;它提供了一系列工具和接口&#xff0c;使开发者能够轻松地构建和部署智能体。 工具介绍&#xff1a; AgentLego 支持直接…

【ARM Cache 系列文章 1.2 -- Data Cache 和 Unified Cache 的详细介绍】

请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】 及【嵌入式开发学习必备专栏】 文章目录 Data Cache and Unified Cache数据缓存 (Data Cache)统一缓存 (Unified Cache)数据缓存与统一缓存的比较总结 Data Cache and Unified Cache 在 ARM架构中&#xff0c;缓存&#xff08…

让编程变得更加直观与高效 “JAVA图形化编程”官网上线!

公测预约开启 我们历经了长达三年的时光&#xff0c;执着地坚守并潜心地进行探索&#xff0c;始终怀着一颗敬畏的心&#xff0c;最终极为谨慎地推出了这款图形化编程桌面。它能够使得业务与程序清晰明了地呈现&#xff0c;而且还能与传统的低零代码平台实现紧密…

SpringBoot+Vue在线文档管理系统(前后端分离)

技术栈 JavaSpringBootMavenMySQLMyBatisVueShiroElement-UI 系统角色对应功能 员工管理员 系统功能截图

基于Python+django购物商城系统设计和实现(源码+LW+部署文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝1W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;还…

Linux 性能优化基础

文章目录 常见指标分类&#xff08;USE法&#xff09;常见性能工具CPU性能工具内存性能工具文件系统和磁盘I/O性能工具网络性能工具 根据指标找工具CPU性能内存性能文件系统和磁盘I/O网络性能 根据工具找指标CPU性能内存性能文件系统和磁盘I/O网络性能 CPU性能分析一般步骤内存…

OceanMind海睿思受邀参加 “走进海陵药业”研习交流,探索药企运营孪生新思路

近日&#xff0c;OceanMind海睿思受邀参加由江苏省企业信息化协会&#xff08;以下简称“苏信会”&#xff09;主办的“走进扬子江药业集团南京海陵药业有限公司”研习交流活动。 海睿思与金陵药业、精华制药、江苏爱朋医疗、江苏艾津、南京威尔药业、药大制药、中国中药控股、…

鸢尾花分类和手写数字识别(K近邻)

鸢尾花分类 from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split import pandas as pd import mglearn# 加载鸢尾花数据集 iris load_iris() X_train, X_test, y_train, y_test train_test_split(iris.data,iris.target,test_siz…