训练模型方法参考:https://github.com/PaddlePaddle/PaddleOCR/blob/main/doc/doc_ch/recognition.md
实践:https://aistudio.baidu.com/projectdetail/4482681
SVTR 算法原理
SVTR: Scene Text Recognition with a Single Visual Model Yongkun Du and Zhineng Chen and Caiyan Jia and Xiaoting Yin and Tianlun Zheng and Chenxia Li and Yuning Du and Yu-Gang Jiang IJCAI, 2022
假设我们要识别一张图片上的文本,这个过程可以分为几个阶段:
- 初步分块和特征提取:
○ 首先将图像分成小块,每个小块提取出初步的特征(例如颜色、形状等)。 - 组件级别的混合、合并和组合:
○ 对每个小块的特征进行混合、合并和组合。这一步骤是分层次进行的,每一层次都进一步整合前一层次的特征。
○ 例如,第一层次可能仅处理字符的局部特征(如笔画),而第二层次开始整合整个字符,第三层次则开始整合多个字符之间的关系。 - 全局和局部混合:
○ 全局混合:整合整张图片的特征,理解字符之间的相对位置和关系。
○ 局部混合:细化每个字符内部的细节,确保模型能够识别出单个字符的精确特征。 - 多层次感知:
○ 通过多层次的处理,模型不仅能够识别出每个字符,还能理解字符之间的关系,从而准确地识别出整个文本内容。
下载识别模型
https://github.com/PaddlePaddle/PaddleOCR/blob/main/doc/doc_ch/algorithm_rec_svtrv2.md
下载最新的SVTR2训练模型
https://paddleocr.bj.bcebos.com/openatom/openatom_rec_svtrv2_ch_train.tar
数据
https://github.com/PaddlePaddle/PaddleOCR/blob/main/doc/doc_ch/recognition.md
每张图片只有一行文字
ICDAR2015数据集(全英文)
中文数据集
参考:https://github.com/PaddlePaddle/PaddleOCR/blob/main/doc/doc_ch/dataset/datasets.md
中文文档文字识别
● 数据来源:https://github.com/YCG09/chinese_ocr
● 数据简介:
○ 共约364万张图片,按照99:1划分成训练集和验证集。
○ 数据利用中文语料库(新闻 + 文言文),通过字体、大小、灰度、模糊、透视、拉伸等变化随机生成
○ 包含汉字、英文字母、数字和标点共5990个字符(字符集合:https://github.com/YCG09/chinese_ocr/blob/master/train/char_std_5990.txt )
○ 每个样本固定10个字符,字符随机截取自语料库中的句子
○ 图片分辨率统一为280x32
https://github.com/PaddlePaddle/PaddleOCR/blob/main/doc/datasets/ch_doc1.jpghttps://github.com/PaddlePaddle/PaddleOCR/blob/main/doc/datasets/ch_doc3.jpg
● 下载地址:https://pan.baidu.com/s/1QkI7kjah8SPHwOQ40rS1Pw (密码:lu7m)
图片:
100,000张图片,标签如下:
训练命令
下载Paddle OCR源码 git clone https://github.com/PaddlePaddle/PaddleOCR.git
配置文件参数解释:https://github.com/PaddlePaddle/PaddleOCR/blob/main/doc/doc_ch/config.md
使用下载的识别模型当预训练模型
训练模型命令:python tools/train.py -c configs/rec/SVTRv2/rec_svtrv2_ch.yml
识别模型训练速度较慢
第三轮差不多就达到精度最高98%
评估
python tools/eval.py -c configs/rec/SVTRv2/rec_svtrv2_ch.yml
如果用预训练模型预测,准确度只有68%
通过微调准确率提高了30%
推理命令
将训练得到best模型,转换成inference model
python tools/export_model.py -c configs/rec/SVTRv2/rec_svtrv2_ch.yml -o Global.pretrained_model=output/rec_svtrv2_ch/best_accuracy Global.save_inference_dir=./inference/rec_svtrv2_ch
转换成功后,在目录下有三个文件:
使用自己的识别模型:
python tools/infer/predict_rec.py --image_dir='E:/BaiduNetdiskDownload/DataSet/Chinese_dataset/images/img_0000001.jpg' --rec_model_dir='./inference/rec_svtrv2_ch' --rec_char_dict_path=''
训练后参数分布会变,所以预测的图片与训练的图片分布相似时,准确率会更高。