在OCR方面找了很多资料,本来想要找pytorch框架下的算法,无奈很多OCR算法太老,没人更新。感觉这块有点冷门似的,不像其它热门算法一出来就有各个框架版本的复现。

看了paddleOCR真的是相当全面深刻了,还是我们自家的框架接地气。而且百度经常搞直播分享学习什么的,各种训练营还有学习群....

首先github下载:https://github.com/PaddlePaddle/PaddleOCR 并解压

一。试用官方模型

打开这个网址的中文版,下载预训练模型:

https://github.com/PaddlePaddle/PaddleOCR/blob/develop/README_ch.md

先用轻量OCR模型,分别下载检测和识别以及方向分类器。这里关于预训练模型/训练模型/推理模型,官方有说明:

注:更多模型在模型列表中:https://github.com/PaddlePaddle/PaddleOCR/blob/develop/doc/doc_ch/models_list.md

这里我 下载的是infer 推理模型ch_ppocr_mobile_v1.1_xx, 下载完解压到PaddleOCR/inference 下,可以新建inference文件夹:

每个文件夹下有两个文件:model 和params

官方快速开始的教程:https://github.com/PaddlePaddle/PaddleOCR/blob/develop/doc/doc_en/quickstart_en.md

可以使用如下命令等:

python3 tools/infer/predict_system.py --image_dir="./doc/imgs/11.jpg" --det_model_dir="./inference/ch_ppocr_mobile_v1.1_det_infer/"  --rec_model_dir="./inference/ch_ppocr_mobile_v1.1_rec_infer/" --cls_model_dir="./inference/ch_ppocr_mobile_v1.1_cls_infer/" --use_angle_cls=True --use_space_char=True

但我习惯在代码里跑:

参数模块在这 tools/infer/utility.py  需要更改的参数:

图片路径 --image_dir  = ./doc/imgs/3.jpg

检测模型路径--det_model_dir = ./inference/ch_ppocr_mobile_v1.1_det_infer
识别模型--rec_model_dir = ./inference/ch_ppocr_mobile_v1.1_rec_infer
字典--rec_char_dict_path = ./ppocr/utils/ppocr_keys_v1.txt  这个参数很重要,这个字典文字取决与你的模型是识别中文还是英文数字什么的,这个是中文字典,还有一个ic15_dict.txt 是英文和数字
分类模型--cls_model_dir = ./inference/ch_ppocr_mobile_v1.1_cls_infer
draw_ocr_box_txt 函数中 有个字体的路径  font_path= doc/simfang.ttf 
text_visual 函数中的字体路径也是 font_path= doc/simfang.ttf 

ok。 测试图片在doc/imgs下,测试结果输出在 doc/imgs_results  以及 ./inference_results 文件夹下:

二。训练自己的数据

检测部分

官方教程:https://github.com/PaddlePaddle/PaddleOCR/blob/develop/doc/doc_ch/detection.md

主要要注意的是标签的制作,要注意空格。还有每个预训练模型要对应自己的配置文件。

数据准备  训练数据包含以下内容(同一目录下):

train_data/text_localization/

--train_images文件夹下为自己要训练的图片

--test_images 文件夹为测试图片

--train_label.txt 为标签文件,通过官方标签转换工具得到。内容包括:训练图片的路径以及对应的文字内容和坐标信息train_data/gen_label.py

--test_label.txt  同上。标签内容如下:

官方转换方法如下:

python gen_label.py --mode="det" --root_path="icdar_c4_train_imgs/"  \--input_path="ch4_training_localization_transcription_gt" \--output_label="train_icdar2015_label.txt"

其中--input_path="ch4_training_localization_transcription_gt" 文件夹为每一张训练图片的数据标注的内容信息,每一个txt文件名对应一张图片名:

txt文本内容:

其中###号表示的应该是负样本 就是没有文字。(不知道能不能这么说)

关于数据标注:

paddleOCR官方前几天刚开源了文字标注工具PPOCRLabel,相当友好了。还可以自动标注。

PPOCRLabel工具就在paddleOCR项目下:https://github.com/PaddlePaddle/PaddleOCR/tree/develop/PPOCRLabel

标注工具不细说,比较简单。

官方提供了三个backbone预训练模型:

MobileNetV3、ResNet18_vd,ResNet50_vd

解压backbone预训练权重文件后,文件夹下包含众多以网络层命名的权重文件。一开始就很疑问为什么是这么个保存法,因为其它模型都是保存了三个文件,

就这几个检测预训练模型几乎每曾单独保存。后来在群里问题paddle的人应该是保存的api问题。而且这预训练模型也不知道怎么测试效果。。。只是一个backbone

数据和预训练模型都有了就可以训练了,就分这三种模型:

MobileNetV3_large_x0_5_pretrained:

train:

python3 tools/train.py -c configs/det/det_mv3_db_v1.1.yml -o Global.pretrain_weights=./pretrain_models/detect_pretrain_models/MobileNetV3_large_x0_5_pretrained/ 2>&1 | tee train_det.log

infer:

python3  tools/infer_det.py -c configs/det_mv3_db_v1.1.yml -o Global.infer_img="./doc/imgs/3.jpg" Global.checkpoints="./output/My_model_det_mv3_db_v1.1/best_accuracy"

ResNet18_vd_ssld_pretrained:

train:

python3 tools/train.py -c configs/det/det_r18_vd_db_v1.1.yml  -o Global.pretrain_weights=./pretrain_models/detect_pretrain_models/ResNet18_vd_pretrained/  2>&1 | tee train_det.log

infer:

python3  tools/infer_det.py -c configs/det/det_r18_vd_db_v1.1.yml -o Global.infer_img="./doc/imgs/3.jpg" Global.checkpoints="./output/my_det_r_18_vd_db/best_accuracy"

ResNet50_vd_ssld_pretrained:这个我还没训练过,因为模型比较大,电脑配置太烂跑不了。。。。

train:

python3 tools/train.py -c configs/det/det_r50_vd_db.yml  -o Global.pretrain_weights=./pretrain_models/detect_pretrain_models/my_ResNet50_vd/  2>&1 | tee train_det.log

infer:

python3  tools/infer_det.py -c configs/det/det_r50_vd_db..yml -o Global.infer_img="./doc/imgs/3.jpg" Global.checkpoints="./output/my_ResNet50_vd/best_accuracy"

其它的检测模型也可以试试,比如sast 就不介绍了:

python3 tools/infer_det.py -c configs/det/det_r50_vd_sast_icdar15.yml -o Global.infer_img="./doc/imgs_en/img623.jpg" Global.checkpoints="./pretrain_models/sast_r50_vd_icdar2015/best_accuracy

训练的时候,注意一开始是有warm up的,学习率是逐渐上升,之后的学习率在0.01好像:

模型训练好后,转换模型为可部署文件:

python3 tools/export_model.py -c configs/det/det_r18_vd_db_v1.1.yml -o Global.checkpoints="./output/my_det_r_18_vd_db/best_accuracy" Global.save_inference_dir="./output/my_det_r_18_vd_db/expor_model"

save success:
 

得到转换后的两个文件:model , params。 等会结合识别模型一起使用。

识别部分

官方教程:https://www.bookstack.cn/read/PaddleOCR/recognition.md

我用的通用数据,不是lmdb 格式。数据准备 ICDAR2015数据集

下载地址:https://blog.csdn.net/weixin_45779880/article/details/105642393

选择4.3 word recognition

下载下来后有train 和test 两份数据集以及各自的标签文件。

这里使用的是官方的标签文件:

  1. # 训练集标签
  2. wget -P ./train_data/ic15_data https://paddleocr.bj.bcebos.com/dataset/rec_gt_train.txt
  3. # 测试集标签
  4. wget -P ./train_data/ic15_data https://paddleocr.bj.bcebos.com/dataset/rec_gt_test.txt

预训练模型:

  1. cd PaddleOCR/
  2. # 下载MobileNetV3的预训练模型
  3. wget -P ./pretrain_models/ https://paddleocr.bj.bcebos.com/rec_mv3_none_bilstm_ctc.tar
  4. # 解压模型参数
  5. cd pretrain_models
  6. tar -xf rec_mv3_none_bilstm_ctc.tar && rm -rf rec_mv3_none_bilstm_ctc.tar

训练配置:

训练文件tools/train.py

参数文件tools/program.py

--config = ./configs/rec/rec_icdar15_train.yml
rec_icdar15_train.yml 中两个参数比较关键:
reader_yml 数据读取方式。数据集与标签路径
pretrain_weights预训练模型路径

还有image_shape: [3, 32, 100]   这个虽然是可以根据自己数据大小该,但h 必须是32的整数倍。crnn 中cnn会将图像缩放到 32×W×1 大小。

保存文件的路径 save_model_dir: ./output/my_rec_mv3_none_bilstm_ctc

其他参数 最大文本长度,文本类型(中英文),数据增强什么的都可以适当调整

我用的时候经常相对路径不能用,所以很多地方要改为绝对路径,到处找参数。

然后就可以:python train.py 运行程序:

而且我要在cmd中运行才行,pycharm一运行系统就崩了。。。我崩了好几次不知道是什么原因,改了bs还是一样。

模型训练好后如下:

然后进行训练模型的测试:注意测试图片用/doc/imgs_words_en 英文的文字图片,不是没经过裁剪的图片。

图片路径在:rec_icdar15_train.yml 中  infer_img, 也可以直接写上图片路径 。 checkpoints 路径也可以在这里写。

python tools/infer_rec.py  -c configs/rec/rec_mv3_none_bilstm_ctc.yml -o Global.checkpoints=./output/my_rec_mv3_none_bilstm_ctc/best_accuracy Global.infer_img="./doc/imgs/3.jpg"

这个测试我的效果很差,因为我用的是轮胎的数据。还没找原因,先记录:

接下来inference 测试。

inference 之前 要把训练的模型转换为推断模型:

python3 tools/export_model.py -c configs/rec/rec_icdar15_train.yml -o Global.checkpoints="./output/my_rec_mv3_none_bilstm_ctc/best_accuracy"  Global.save_inference_dir="./output/my_rec_mv3_none_bilstm_ctc/export_model"

得到:

最终测试

按一的步骤试用官方模型那样,只要把识别文件夹中的模型换为自己训练的模型即可,角度模型不变,替换自己训练的检测和识别模型即可:

python3 tools/infer/predict_system.py --image_dir="./doc/imgs/11.jpg" \
--det_model_dir="./output/my_det_r_18_vd_db/expor_model/"  \
--rec_model_dir="./output/my_rec_mv3_none_bilstm_ctc/export_model/" \
--cls_model_dir="./inference/ch_ppocr_mobile_v1.1_cls_infer/" \
--use_angle_cls=True \
--use_space_char=True

最后检测和识别的结果保存在PaddleOCR/inference_results 文件夹,我的结果比较差就不展示了 哎!

PaddleOCR 使用以及用自己的数据训练相关推荐

  1. Python计算医疗数据训练集、测试集的对应的临床特征:训练集(测试集)的阴性和阳性的样本个数、连续变量的均值(标准差)以及训练测试集阳性阴性的p值、离散变量的分类统计、比率、训练测试集阳性阴性的p值

    Python使用pandas和scipy计算医疗数据训练集.测试集的对应的临床特征:训练集(测试集)的阴性和阳性的样本个数.连续变量的均值(标准差࿰

  2. 99.99%准确率!AI数据训练工具No.1来自中国

    萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 这年头,真是什么样的数据集都有了. IBM的5亿行代码(bug)数据集.清华&阿里的460万少样本NER数据集.还有假货数据集.&q ...

  3. Faster-RCNN 自己的数据训练

    参考网址:https://blog.csdn.net/l297969586/article/category/7178545(一呆飞仙)Faster-RCNN_TF代码解读, 参考网址:https:/ ...

  4. Caffe下自己的数据训练和测试

    在caffe提供的例程当中,例如mnist与cifar10中,数据集的准备均是通过调用代码自己完成的,而对于ImageNet1000类的数据库,对于高校实验室而言,常常面临电脑内存不足的尴尬境地.而对 ...

  5. DL之DNN优化技术:神经网络算法简介之数据训练优化【mini-batch技术+etc】

    DL之DNN优化技术:神经网络算法简介之数据训练优化[mini-batch技术+etc] 目录 1.mini-batch技术 输出结果 实现代码 1.mini-batch技术 输出结果 实现代码 # ...

  6. 利用Caffe实现mnist的数据训练

    阿里云的参考文档:https://help.aliyun.com/document_detail/49571.html 在文档里提供了caffe的一个案例,利用Caffe实现mnist的数据训练.准备 ...

  7. ICCV 2019 | Adobe 无需大量数据训练,内部学习机制实现更好的视频修补

    点击我爱计算机视觉标星,更快获取CVML新技术 今天跟大家分享一篇 ICCV 2019 的文章An Internal Learning Approach to Video Inpainting,该文在 ...

  8. 【NLP】维基百科中文数据训练word2vec词向量模型——基于gensim库

    前言   本篇主要是基于gensim 库中的 Word2Vec 模型,使用维基百科中文数据训练word2vec 词向量模型,大体步骤如下: 数据预处理 模型的训练 模型的测试 准备条件: Window ...

  9. 使用无标注的数据训练Bert

    文章目录 1.准备用于训练的数据集 2.处理数据集 3.克隆代码 4.运行代码 5.将ckpt模型转为bin模型使其可在pytorch中运用 Bert官方仓库:https://github.com/g ...

最新文章

  1. undefined symbol: ap_log_rerror;apache2.4与weblogic点so文件
  2. OGG 同步报错 - TCP/IP error 111 (Connection refused)
  3. 地址突然就不对了_【装维大课堂】光猫的无线WiFi功能突然无法使用
  4. 数据结构相关C语言代码
  5. .Net高级技术——对象序列化
  6. matlab线性平面映射求通项_代数学发展史: 线性空间
  7. CodeForces - 76E Points
  8. 零基础学编程,如何区分C语言和Java?我们到底如何怎么进行选择!
  9. MAC安装influxdb和grafana
  10. 网友用筋膜枪提升手速抢茅台,平台回应不可靠,用了你也抢不到!
  11. 手机号中间四位星号显示
  12. 使用python下载文件_利用python web框架做文件流下载
  13. bzoj 1677: [Usaco2005 Jan]Sumsets 求和(DP)
  14. [Spring-cloud-eureka]使用 gradle, spring boot,Spring cloud Eureka 搭建服务提供者
  15. python装饰器举例_Python学习笔记:装饰器(Decorator)
  16. 没有apihost什么意思_热文:2021年没有立春什么意思
  17. 新概念二册 Lesson 15 Good news佳音 ( 陈述句直接引语变间接引语)
  18. Linux下二维码生成工具:QRencode
  19. ECCVW 2022 | 第二届城市规模点云语义理解挑战赛
  20. 手机拍照技巧(一:校园拍摄)

热门文章

  1. 解决报错:Mapped Statements collection already contains value for...
  2. python闭包与装饰器----闭包
  3. 利用python scrapy 框架抓取豆瓣小组数据
  4. 玩模拟大都市适合哪种java_我的世界模拟大都市mod下载
  5. 微信小程序源码精选250套
  6. 计算机休眠后无法启动,电脑休眠后硬盘无法启动怎么办【解决方法】
  7. r语言kendall协和系数_R语言之并行计算(kendall相关系数篇)
  8. 计算机丢失msutb.dll,解决方法:如果输入法图标丢失,该怎么办?如果缺少计算机右下角的输入法,该怎么办...
  9. [FATAL] [1612519163.722674]: No corners could be extracted for camera /left! ***
  10. 华瑞IT学校学IT成才就业一步到位!