paddle ocr v4 微调训练文字识别模型实践

识别步骤参考:https://github.com/PaddlePaddle/PaddleOCR/blob/main/doc/doc_ch/recognition.md

微调步骤参考:https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7.1/doc/doc_ch/finetune.md

训练必要性


原始模型标点符号和括号容易识别不到

数据准备

通用数据 用于训练以文本文件存储的数据集(SimpleDataSet);

一张图片 一行文本

格式类似:

注意:图像文件名写xxx.jpg即可,文件夹名可以在配置文件中指定

数据源:垂直领域的pdf,经过剪裁生成了10万张图片(文本内容没有去重,为了保证一些词出现的频率不变)

开始训练

训练v4的模型,所以选择配置文件:ch_PP-OCRv4_rec.yml ,需要做如下更改
更改学习率为[1e-4, 2e-5]左右

更改图片文件夹路径

更改batch_size大小(训练报错时,适当调节大小,)

下载pretrain model,使用v4预训练模型
https://paddleocr.bj.bcebos.com/PP-OCRv4/chinese/ch_PP-OCRv4_rec_train.tar

注意:v4预训练模型没有best,只有student

正常启动训练

复制代码
python3 tools/train.py -c configs/rec/PP-OCRv4/ch_PP-OCRv4_rec.yml -o Global.pretrained_model=./pretrain_models/ch_PP-OCRv4_rec_train/student Global.save_model_dir=./output/rec_ppocr_v4

注意使用ch_PP-OCRv4_rec_distill.yml配置文件训练,报错KeyError: 'NRTRLabelDecode',官方暂时没有解决。

bash 复制代码
python3 tools/train.py -c configs/rec/PP-OCRv4/ch_PP-OCRv4_rec_distill.yml -o Global.pretrained_model=./pretrain_models/ch_PP-OCRv4_rec_train/student

导出模型

复制代码
python3 tools/export_model.py -c configs/rec/PP-OCRv4/ch_PP-OCRv4_rec_jilin.yml  -o Global.pretrained_model=./output/rec_ppocr_v4/best_accuracy  Global.save_inference_dir=./inference/PP-OCRv4_rec_jilin/

python3 tools/infer/predict_rec.py --rec_model_dir="./inference/PP-OCRv4_rec/"  --image_dir="./train_data/rec/jilin_001_0_27_5.jpg"

推理

复制代码
python3 tools/infer_rec.py -c configs/rec/PP-OCRv4/ch_PP-OCRv4_rec.yml -o Global.pretrained_model=./output/rec_ppocr_v4/best_accuracy Global.infer_img=./train_data/rec/jilin_001_0_27_5.jpg

实践:

参考:https://blog.csdn.net/qq_52852432/article/details/131817619

一共训练了20轮,第五轮训练测试集达到最大精度,85%,之后精度逐渐下降

预测

图片:


训练的模型:

('2218白城师范学院(吉林省白城市,10206)', 0.9582517743110657)

('2225吉林警察学院(长春市,11441)', 0.9862592816352844)

原始v4模型:

(2218白城师范学院(吉林省白城市,10206)', 0.9726919531822205)

('2225吉林警察学院(长春市,11441)', 0.9829413294792175)

总结

可以看到,训练后模型识别括号基本统一成英文了。其实光是识别,起始v4效果已经很好了,原来检测的效果不太行,会拉低识别正确率

改进:微调文字检测模型,待完成后补充

其他需要注意的

实践时,使用了预训练模型,但一开始模型准确率acc一直为0,因为数据准备错误了,图片包含了多行文字,后来修正了图片,acc飞速提高。

其他版本

由于我数据集存在很多文本,我想更改max_length,从25改到50,并且image.shape的宽从320改成1280

结果时是拟合

训练模型可能有的疑问

文本识别训练时宽高比大于 10 或者文本长度大于 25 的图像会直接丢弃吗?会

参考:https://github.com/PaddlePaddle/PaddleOCR/issues/5017

如果训练数据较少的话,配置越高越容易过拟合。

英文长度是按照字母计算的,需要将空格计算在内。
我印象中,定义的max_text_length需要比实际的长度至少多两位数。
比如要想识别身份证号,实际中身份证号是18位,那在config文件中定义的max_text_length至少要为20,否则会报错。

尽量让字典里的每个字的出现频率在200以上(最好均匀),可以用text_renderer-master合成试试效果

相关推荐
weixin_408099671 分钟前
OCR自动提取商品标题:电商SEO优化实战(批量生成标题,提升曝光)
ocr·api接口·电商运营·电商搬运项目·自动化上架·商品信息提取·电商seo
weixin_408099671 小时前
OCR + 自动翻译:跨境电商批量铺货方案(支持多语言自动识别)
python·ocr·机器翻译·api接口·跨境电商·ocr识别·电商自动化
AI人工智能+19 小时前
文档抽取系统结合OCR技术与大语言模型,有效解决档案数字化与知识化利用之间的矛盾
人工智能·计算机视觉·ocr·文档抽取
王者鳜錸1 天前
企业解决方案四-通用OCR适配多种类型票据解决方案
ocr·视觉理解大模型·企业ocr通用方案·ocr方案自定义
Fleshy数模1 天前
解决 PaddleOCR 库冲突:PyCharm 虚拟环境搭建 + 完整 OCR 实战教程
ide·pycharm·ocr
石榴树下的七彩鱼1 天前
电商订单 OCR 识别实战:如何自动提取订单信息并实现发货自动化(附 Python / Java 示例)
人工智能·python·自动化·ocr·电商·电商自动化·api 接入
weixin_408099671 天前
【电商实战】如何用OCR批量提取商品SKU与参数?自动识别+批量处理完整方案(附代码)
ocr·api·图像识别·api接口·跨境电商·电商自动化·sku识别
深圳市快瞳科技有限公司2 天前
医保OCR与医保审核系统融合:智能校验规则设计与实现
nlp·ocr
软件富二代3 天前
发票统计软件:批量OCR识别的神器
ocr·电脑·软件需求·软件
石榴树下的七彩鱼4 天前
OCR 识别不准确怎么办?模糊 / 倾斜 / 反光图片优化实战(附完整解决方案 + 代码示例)
图像处理·人工智能·后端·ocr·api·文字识别·图片识别