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

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

一、介绍

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训练没有跑通。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

九家大模型“决战”高考!AI作文哪家强?阅卷名师点评来了!

2024.06.07 本文字数:12474,阅读时长大约21分钟 导读:语文老师对AI作文的评价是,“中规中矩,没有‘血肉’,缺一点情感和灵气。” 作者 | 第一财经 刘晓洁 冯小芯 马一凡 吕倩 又到一年高考季,…

单元测试覆盖率

什么是单元测试覆盖率 关于其定义,先来看一下维基百科上的一段描述: 代码覆盖(Code coverage)是软件测试中的一种度量,描述程序中源代码被测试的比例和程度,所得比例称为代码覆盖率。 简单来理解&#xff…

问题:11单位内部人员对行政机关作出的行政处分不服,可申请行政复议. #其他#微信

问题:11单位内部人员对行政机关作出的行政处分不服,可申请行政复议. 参考答案如图所示

阅读笔记——《AFLNET: A Greybox Fuzzer for Network Protocols》

【参考文献】Pham V T, Bhme M, Roychoudhury A. Aflnet: a greybox fuzzer for network protocols[C]//2020 IEEE 13th International Conference on Software Testing, Validation and Verification (ICST). IEEE, 2020: 460-465.【注】本文仅为作者个人学习笔记,…

JavaSE——抽象类和接口

目录 一 .抽象类 1.抽象类概念 2.抽象类语法 3.抽象类特性 4.抽象类的作用 二. 接口 1.接口的概念 2.语法规则 3.接口的使用 4.接口特性 5.实现多个接口 6.接口间的继承 三.抽象类和接口的区别 一 .抽象类 1.抽象类概念 在面向对象的概念中,所有的对…

【Unity】Kafka、Mqtt、Wesocket通信

1 前言 最近研究了下kafka、mqtt、webocket插件在Unity网络通信中的应用,做下小总结吧。(不想写笔记,但不写又会忘,痛苦) 2 Kafka 先说结果:Kafka实现失败。 我会使用的方法是在VS里安装了Confluent.Kafka…

python -- series和 DataFrame增删改数据

学习目标 知道df添加新列的操作 知道insert函数插入列数据 知道drop函数删除df的行或列数据 知道drop_duplicates函数对df或series进行数据去重 知道unique函数对series进行数据去重 知道apply函数的使用方法 1 DataFrame添加列 注意:本文用到的数据集在文章顶部 1.1 直…

Java采取擦除式泛型到底兼容了什么场景?

在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「 Java的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!!Java擦除式泛型是一个妥协,…

数据+AI 打造企业的“金山银山”

今日之世界,数据是生产资料,而人工智能(AI)是生产工具,它们的结合,带来的是业务的增长、新质生产力的提升,就是金山银山。 创新是源动力 凡是到过浙江省安吉县余村的人,应该都会被它…

2024年AI大模型训练数据白皮书作用

2024年AI大模型训练数据白皮书 在人工智能迅猛发展的今天,AI大模型的训练数据质量和管理成为影响其性能和应用效果的关键因素。《2024年AI大模型训练数据白皮书》为业内人士提供了一份详尽的指南,揭示了当前AI大模型训练数据的最新趋势、最佳实践以及未…

Steam游戏如何选择适合的服务器

在Steam平台上,玩家可以享受到来自世界各地开发者的游戏作品。然而,要获得最佳的游戏体验,选择合适的服务器至关重要。本文将从网络延迟、服务器位置、游戏类型和个人偏好等多个方面,为玩家提供选择Steam游戏服务器的实用指南。 如…

【核心动画-转场动画-CATransition Objective-C语言】

一、转场动画,CATransition, 1.接下来,我们来说这个转场动画啊,效果呢,会做这么一个小例子, 感觉有一个3D的一个样式一样, 转场动画呢,就是说,你在同一个View,比如说,imageView,去切换图片的时候,你可以去用这个,转场动画, 实际上,包括,控制器之间的切换,也…

【Flask开发实战】首页模板

一、前言 前面我们已经完成登录页面的设定,登录后临时调转到“hello flask”的界面。现在我们根据实际首页的设计需要,来完成首页相关内容的开发。一般系统首页会放一些分析数据,多以图表的方式展示,方便使用者了解信息。以防火墙…

【Vscode配置java环境并配置stringboot】

1.VSCODE配置JAVA环境 参考这篇文章配置JAVA环境:连接 java版本,我是win11系统,我下载的JAVA安装版本是下面,是最新版的: 配置环境:步骤很简单,就是向系统环境变量中添加路径,参考上面文章中的…

类和对象(二)(C++)

初始化列表 class Date{public:Date(int year, int month, int day){_year year;_month month;_day day;}private:int _year;int _month;int _day;}; 虽然上述构造函数调用之后,对象中已经有了一个初始值,但是不能将其称为对对象中成员变量的初始化…

PCL 生成空间椭圆点云

目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 设椭圆在 X O Y XOY XOY平面上,参数方程为:

Python 机器学习 基础 之 【实战案例】轮船人员获救预测实战

Python 机器学习 基础 之 【实战案例】轮船人员获救预测实战 目录 Python 机器学习 基础 之 【实战案例】轮船人员获救预测实战 一、简单介绍 二、轮船人员获救预测实战 三、数据处理 1、导入数据 2、对缺失数据的列进行填充 3、属性转换,把某些列的字符串值…

炫技来了!使用SDR设备成功抓到蓝牙air packet, 并且wireshark实时解析, 没错就是蓝牙空口抓包器

本文章主要介绍是用ZYNQ7020AD9361Gnu radio是搭建一个蓝牙抓包器的文章。 由于之前一直做蓝牙Host,对controller觉得是一个比较虚无缥缈的东西,得不到的总是在骚动,所以最近用我用吃灰了2年的SDR(Software Defined Radio)设备研…

警务反诈RPA:利用机器人流程自动化技术打击诈骗行为

信息时代,网络技术快速发展,在丰富生活的同时,也带来了持续高发的电信网络诈骗问题,对社会造成了严重威胁。面对海量的数据信息,传统数据融合技术的瓶颈不断显现,无法满足风险防控、打击诈骗的效率要求&…

【刷题篇】分治-归并排序

文章目录 1、排序数组2、交易逆序对的总数3、计算右侧小于当前元素的个数4、翻转对 1、排序数组 给你一个整数数组 nums&#xff0c;请你将该数组升序排列。 class Solution { public:vector<int> tmp;void mergeSort(vector<int>& nums,int left,int right){…