OCRSTR生僻字数据训练PaddleOCR的Fine-tune常见问题汇总(3)

OCRSTR⽣僻字数据训练PaddleOCR的Fine-tune常见问题汇
总(3)
1、印章如何识别
使⽤带tps的识别⽹络或abcnet,2.使⽤极坐标变换将图⽚拉平之后使⽤crnn
2、多语⾔的字典⾥是混合了不同的语种,这个是有什么讲究吗?统⼀到⼀个字典⾥会对精度造成多⼤的损失?
统⼀到⼀个字典⾥,会造成最后⼀层FC过⼤,增加模型⼤⼩。如果有特殊需求的话,可以把需要的⼏种语⾔合并字典训练模型,合并字典之后如果引⼊过多的形近字,可能会造成精度损失,字符平衡的问题可能也需要考虑⼀下。在PaddleOCR⾥暂时将语⾔字典分开。
3、如何对检测模型finetune,⽐如冻结前⾯的层或某些层使⽤⼩的学习率学习?
4、使⽤通⽤中⽂模型作为预训练模型,更改了字典⽂件,出现ctc_fc_b not used的错误
修改了字典之后,识别模型的最后⼀层FC纬度发⽣了改变,没有办法加载参数。这⾥是⼀个警告,可以忽略,正常训练即可。
5、如何加⼊⾃⼰的检测算法?
1. 在ppocr/modeling对应⽬录下分别选择backbone,head。如果没有可⽤的可以新建⽂件并添加
2. 在ppocr/data下选择对应的数据处理处理⽅式,如果没有可⽤的可以新建⽂件并添加
3. 在ppocr/losses下新建⽂件并编写loss
4. 在ppocr/postprocess下新建⽂件并编写后处理算法
5. 将上⾯四个步骤⾥新添加的类或函数参照yml⽂件写到配置中
6、基于深度学习的⽂字检测⽅法有哪⼏种?各有什么优缺点?
常⽤的基于深度学习的⽂字检测⽅法⼀般可以分为基于回归的、基于分割的两⼤类,当然还有⼀些将两者进⾏结合的⽅法。
(1)基于回归的⽅法分为box回归和像素值回归。a. 采⽤box回归的⽅法主要有CTPN、Textbox系列和EAST,这类算法对规则形状⽂本检测效果较好,但⽆法准确检测不规则形状⽂本。 b. 像素值回归的⽅法主要有CRAFT和SA-Text,这类算法能够检测弯曲⽂本且对⼩⽂本效果优秀但是实时性能不够。
(2)基于分割的算法,如PSENet,这类算法不受⽂本形状的限制,对各种形状的⽂本都能取得较好的效果,但是往往后处理⽐较复杂,导致耗时严重。⽬前也有⼀些算法专门针对这个问题进⾏改进,如DB,将⼆值化进⾏近似,使其可导,融⼊训练,从⽽获取更准确的边界,⼤⼤降低了后处理的耗时。
7、对于中⽂⾏⽂本识别,CTC和Attention哪种更优?
(1)从效果上来看,通⽤OCR场景CTC的识别效果优于Attention,因为带识别的字典中的字符⽐较多,常⽤中⽂汉字三千字以上,如果训练样本不⾜的情况下,对于这些字符的序列关系挖掘⽐较困难。中⽂场景下Attention模型的优势⽆法体现。⽽且Attention适合短语句识别,对长句⼦识别⽐较差。
(2)从训练和预测速度上,Attention的串⾏解码结构限制了预测速度,⽽CTC⽹络结构更⾼效,预测速度上更有优势。
8、弯曲形变的⽂字识别需要怎么处理?TPS应⽤场景是什么,是否好⽤?
(1)在⼤多数情况下,如果遇到的场景弯曲形变不是太严重,检测4个顶点,然后直接通过仿射变换转正识别就⾜够了。
(2)如果不能满⾜需求,可以尝试使⽤TPS(Thin Plate Spline),即薄板样条插值。TPS是⼀种插值算法,经常⽤于图像变形等,通过少量的控制点就可以驱动图像进⾏变化。⼀般⽤在有弯曲形变的⽂本识别中,当检测到不规则的/弯曲的(如,使⽤基于分割的⽅法检测算法)⽂本区域,往往先使⽤TPS算法对⽂本区域矫正成矩形再进⾏识别,如,STAR-Net、RARE等识别算法中引⼊了TPS模块。发光标识
Warning:TPS看起来美好,在实际应⽤时经常发现并不够鲁棒,并且会增加耗时,需要谨慎使⽤。
9、简单的对于精度要求不⾼的OCR任务,数据集需要准备多少张呢?
(1)训练数据的数量和需要解决问题的复杂度有关系。难度越⼤,精度要求越⾼,则数据集需求越⼤,⽽且⼀般情况实际中的训练数据越多效果越好。
(2)对于精度要求不⾼的场景,检测任务和识别任务需要的数据量是不⼀样的。对于检测任务,500张图像可以保证基本的检测效果。对于识别任务,需要保证识别字典中每个字符出现在不同场景的⾏⽂本图像数⽬需要⼤于200张(举例,如果有字典中有5个字,每个字都需要出现在200张图⽚以上,那么最少要求的图像数量应该在200-1000张之间),这样可以保证基本的识别效果。
10、背景⼲扰的⽂字(如印章盖到落款上,需要识别落款或者印章中的⽂字),如何识别?
调度主机
(1)在⼈眼确认可识别的条件下,对于背景有⼲扰的⽂字,⾸先要保证检测框⾜够准确,如果检测
框不准确,需要考虑是否可以通过过滤颜⾊等⽅式对图像预处理并且增加更多相关的训练数据;在识别的部分,注意在训练数据中加⼊背景⼲扰类的扩增图像。
(2)如果MobileNet模型不能满⾜需求,可以尝试ResNet系列⼤模型来获得更好的效果 。
11、OCR领域常⽤的评估指标是什么?
对于两阶段的可以分开来看,分别是检测和识别阶段
(1)检测阶段:先按照检测框和标注框的IOU评估,IOU⼤于某个阈值判断为检测准确。这⾥检测框和标注框不同于⼀般的通⽤⽬标检测框,是采⽤多边形进⾏表⽰。检测准确率:正确的检测框个数在全部检测框的占⽐,主要是判断检测指标。检测召回率:正确的检测框个数在全部标注框的占⽐,主要是判断漏检的指标。
(2)识别阶段: 字符识别准确率,即正确识别的⽂本⾏占标注的⽂本⾏数量的⽐例,只有整⾏⽂本识别对才算正确识别。
(3)端到端统计: 端对端召回率:准确检测并正确识别⽂本⾏在全部标注⽂本⾏的占⽐; 端到端准确率:准确检测并正确识别⽂本⾏在检测到的⽂本⾏数量 的占⽐; 准确检测的标准是检测框与标注框的IOU⼤于某个阈值,正确识别的的检测框中的⽂本与标注的⽂本相同。
12、单张图上多语种并存识别(如单张图印刷体和⼿写⽂字并存),应该如何处理?
单张图像中存在多种类型⽂本的情况很常见,典型的以学⽣的试卷为代表,⼀张图像同时存在⼿写体和印刷体两种⽂本,这类情况下,可以尝试”1个检测模型+1个N分类模型+N个识别模型”的解决⽅案。 其中不同类型⽂本共⽤同⼀个检测模型,N分类模型指额外训练⼀个分类器,将检测到的⽂本进⾏分类,如⼿写+印刷的情况就是⼆分类,N种语⾔就是N分类,在识别的部分,针对每个类型的⽂本单独训练⼀个识别模型,如⼿写+印刷的场景,就需要训练⼀个⼿写体识别模型,⼀个印刷体识别模型,如果⼀个⽂本框的分类结果是⼿写体,那么就传给⼿写体识别模型进⾏识别,其他情况同理。
13、请问PaddleOCR项⽬中的中⽂超轻量和通⽤模型⽤了哪些数据集?训练多少样本,gpu什么配置,跑了多少个epoch,⼤概跑
了多久?
(1)检测的话,LSVT街景数据集共3W张图像,超轻量模型,150epoch左右,2卡V100 跑了不到2天;通⽤模型:2卡V100
150epoch 不到4天。 (2) 识别的话,520W左右的数据集(真实数据26W+合成数据500W)训练,超轻量模型:4卡V100,总共训练了5天左右。通⽤模型:4卡V100,共训练6天。
超轻量模型训练分为2个阶段: (1)全量数据训练50epoch,耗时3天 (2)合成数据+真实数据按照1:1数据采样,进⾏finetune训练
200epoch,耗时2天
通⽤模型训练: 真实数据+合成数据,动态采样(1:1)训练,200epoch,耗时 6天左右。
14、PaddleOCR模型推理⽅式有⼏种?各⾃的优缺点是什么
⽬前推理⽅式⽀持基于训练引擎推理和基于预测引擎推理。
(1)基于训练引擎推理不需要转换模型,但是需要先组⽹再load参数,语⾔只⽀持python,不适合系统集成。
(2)基于预测引擎的推理需要先转换模型为inference格式,然后可以进⾏不需要组⽹的推理,语⾔⽀持c++和python,适合系统集成。
15、PaddleOCR中,对于模型预测加速,CPU加速的途径有哪些?基于TenorRT加速GPU对输⼊有什么要求?
(1)CPU可以使⽤mkldnn进⾏加速;对于python inference的话,可以把enable_mkldnn改为true,,对于cpp inference的话,在配置⽂件⾥⾯配置use_mkldnn 1即可,
(2)GPU需要注意变长输⼊问题等,TRT6 之后才⽀持变长输⼊
16、CRNN能否识别两⾏的⽂字?还是说必须⼀⾏?
CRNN是⼀种基于1D-CTC的算法,其原理决定⽆法识别2⾏或多⾏的⽂字,只能单⾏识别。
17、怎么判断⾏⽂本图像是否是颠倒的?
有两种⽅案:(1)原始图像和颠倒图像都进⾏识别预测,取得分较⾼的为识别结果。 (2)训练⼀个正常图像和颠倒图像的⽅向分类器进⾏判断。
18、⽬前OCR普遍是⼆阶段,端到端的⽅案在业界落地情况如何?
空调温度控制器端到端在⽂字分布密集的业务场景,效率会⽐较有保证,精度的话看⾃⼰业务数据积累情况,如果⾏级别的识别数据积累⽐较多的话two-stage会⽐较好。百度的落地场景,⽐如⼯业仪表识别、车牌识别都⽤到端到端解决⽅案。
19、多语⾔的字典⾥是混合了不同的语种,这个是有什么讲究吗?统⼀到⼀个字典⾥会对精度造成多⼤的损失?
统⼀到⼀个字典⾥,会造成最后⼀层FC过⼤,增加模型⼤⼩。如果有特殊需求的话,可以把需要的⼏种语⾔合并字典训练模型,合并字典之后如果引⼊过多的形近字,可能会造成精度损失,字符平衡的问题可能也需要考虑⼀下。在PaddleOCR⾥暂时将语⾔字典分开。
20、⽀持空格的模型,标注数据的时候是不是要标注空格?中间⼏个空格都要标注出来么?
如果需要检测和识别模型,就需要在标注的时候把空格标注出来,⽽且在字典中增加空格对应的字符。标注过程中,如果中间⼏个空格标注⼀个就⾏。
21、如果考虑⽀持竖排⽂字识别,相关的数据集如何合成?
竖排⽂字与横排⽂字合成⽅式相同,只是选择了垂直字体。合成⼯具推荐:
22、训练⽂字识别模型,真实数据有30w,合成数据有500w,需要做样本均衡吗?还原炉
需要,⼀般需要保证⼀个batch中真实数据样本和合成数据样本的⽐例是1:1~1:3左右效果⽐较理想。如果合成数据过⼤,会过拟合到合成数据,预测效果往往不佳。还有⼀种启发性的尝试是可以先⽤⼤量合成数据训练⼀个base模型,然后再⽤真实数据微调,在⼀些简单场景效果也是会有提升的。
23、请问⼀下,竖排⽂字识别时候,字的特征已经变了,这种情况在数据集和字典标注是新增⼀个类别还是多个⾓度的字共享⼀个类
别?
可以根据实际场景做不同的尝试,共享⼀个类别是可以收敛,效果也还不错。但是如果分开训练,同类样本之间⼀致性更好,更容易收敛,识别效果会更优。
24、如何更换⽂本检测/识别的backbone?
⽆论是⽂字检测,还是⽂字识别,⾻⼲⽹络的选择是预测效果和预测效率的权衡。⼀般,选择更⼤规模的⾻⼲⽹络,例如
ResNet101_vd,则检测或识别更准确,但预测耗时相应也会增加。⽽选择更⼩规模的⾻⼲⽹络,例如MobileNetV3_small_x0_35,则预测更快,但检测或识别的准确率会⼤打折扣。幸运的是不同⾻⼲⽹络的检测或识别效果与在ImageNet数据集图像1000分类任务效果正相关。汇总了ResNet_vd、Res2Net、HRNet、MobileNetV3、GhostNet等23种系列的分类⽹络结构,在上述图像分类任务的top1识别准确率,GPU(V100和T4)和CPU(骁龙855)的预测耗时以及相应的。
(1)⽂字检测⾻⼲⽹络的替换,主要是确定类似与ResNet的4个stages,以⽅便集成后续的类似FPN
的检测头。此外,对于⽂字检测问题,使⽤ImageNet训练的分类预训练模型,可以加速收敛和效果提升。
(2)⽂字识别的⾻⼲⽹络的替换,需要注意⽹络宽⾼stride的下降位置。由于⽂本识别⼀般宽⾼⽐例很⼤,因此⾼度下降频率少⼀些,宽度下降频率多⼀些。可以参考PaddleOCR中的改动。
25、⽂本识别训练不加LSTM是否可以收敛?
理论上是可以收敛的,加上LSTM模块主要是为了挖掘⽂字之间的序列关系,提升识别效果。对于有明显上下⽂语义的场景效果会⽐较明显。
26、⽂本识别中LSTM和GRU如何选择?
从项⽬实践经验来看,序列模块采⽤LSTM的识别效果优于GRU,但是LSTM的计算量⽐GRU⼤⼀些,可以根据⾃⼰实际情况选择。
27、对于CRNN模型,backbone采⽤DenseNet和ResNet_vd,哪种⽹络结构更好?
Backbone的识别效果在CRNN模型上的效果,与Imagenet 1000 图像分类任务上识别效果和效率⼀致。在图像分类任务上
ResnNet_vd(79%+)的识别精度明显优于DenseNet(77%+),此外对于GPU,Nvidia针对ResNet系列模型做了优化,预测效率更⾼,所以相对⽽⾔,resnet_vd是较好选择。如果是移动端,可以优先考虑MobileNetV3系列。
28、训练识别时,如何选择合适的⽹络输⼊shape?
⼀般⾼度采⽤32,最长宽度的选择,有两种⽅法:
(1)统计训练样本图像的宽⾼⽐分布。最⼤宽⾼⽐的选取考虑满⾜80%的训练样本。
(2)统计训练样本⽂字数⽬。最长字符数⽬的选取考虑满⾜80%的训练样本。然后中⽂字符长宽⽐近似认为是1,英⽂认为3:1,预估⼀个最长宽度。
29、识别⽂字⽐较长的⽂本?
在中⽂识别模型训练时,并不是采⽤直接将训练样本缩放到[3,32,320]进⾏训练,⽽是先等⽐例缩放图像,保证图像⾼度为32,宽度不⾜320的部分补0,宽⾼⽐⼤于10的样本直接丢弃。预测时,如果是单张图像预测,则按上述操作直接对图像缩放,不做宽度320的限制。如果是多张图预测,则采⽤batch⽅式预测,每个batch的宽度动态变换,采⽤这个batch中最长宽度。
30、请问对于图⽚中的密集⽂字,有什么好的处理办法吗?
可以先试⽤预训练模型测试⼀下,例如DB+CRNN,判断下密集⽂字图⽚中是检测还是识别的问题,然后针对性的改善。还有⼀种是如果图象中密集⽂字较⼩,可以尝试增⼤图像分辨率,对图像进⾏⼀定范围内的拉伸,将⽂字稀疏化,提⾼识别效果。
31、对于⼀些在识别时稍微模糊的⽂本,有没有⼀些图像增强的⽅式?
在⼈类⾁眼可以识别的前提下,可以考虑图像处理中的均值滤波、中值滤波或者⾼斯滤波等模糊算⼦尝试。也可以尝试从数据扩增扰动来强化模型鲁棒性,另外新的思路有对抗性训练和超分SR思路,可以尝试借鉴。但⽬前业界尚⽆普遍认可的最优⽅案,建议优先在数据采集阶段增加⼀些限制提升图⽚质量。
32、对于特定⽂字检测,例如⾝份证只检测姓名,检测指定区域⽂字更好,还是检测全部区域再筛选更好?
吊装工具两个⾓度来说明⼀般检测全部区域再筛选更好。
(1)由于特定⽂字和⾮特定⽂字之间的视觉特征并没有很强的区分⾏,只检测指定区域,容易造成特定⽂字漏检。
(2)产品的需求可能是变化的,不排除后续对于模型需求变化的可能性(⽐如⼜需要增加⼀个字段)
,相⽐于训练模型,后处理的逻辑会更容易调整。
33、对于⼩⽩如何快速⼊门中⽂OCR项⽬实践?
建议可以先了解OCR⽅向的基础知识,⼤概了解基础的检测和识别模型算法。然后在Github上可以查看OCR⽅向相关的repo。⽬前来看,从内容的完备性来看,PaddleOCR的中英⽂双语教程⽂档是有明显优势的,在数据集、模型训练、预测部署⽂档详实,可以快速⼊⼿。⽽且还有⽤户答疑,⾮常适合学习实践。项⽬地址:
34、如何识别带空格的英⽂⾏⽂本图像?
空格识别可以考虑以下两种⽅案:
(1)优化⽂本检测算法。检测结果在空格处将⽂本断开。这种⽅案在检测数据标注时,需要将含有空格的⽂本⾏分成好多段。
(2)优化⽂本识别算法。在识别字典⾥⾯引⼊空格字符,然后在识别的训练数据中,如果⽤空⾏,进⾏标注。此外,合成数据时,通过拼接训练数据,⽣成含有空格的⽂本。
红外双鉴35、中英⽂⼀起识别时也可以加空格字符来训练吗
中⽂识别可以加空格当做分隔符训练,具体的效果如何没法给出直接评判,根据实际业务数据训练来判断。
36、低像素⽂字或者字号⽐较⼩的⽂字有什么超分辨率⽅法吗
超分辨率⽅法分为传统⽅法和基于深度学习的⽅法。基于深度学习的⽅法中,⽐较经典的有SRCNN,另外CVPR2020也有⼀篇超分辨率的⼯作可以参考⽂章:Unpaired Image Super-Resolution using Pseudo-Supervision,但是没有充分的实践验证过,需要看实际场景下的效果。
37、表格识别有什么好的模型 或者论⽂推荐么

本文发布于:2024-09-22 01:07:53,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/179484.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:识别   检测   训练   模型   数据
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议