本文所述的OCR模型分为字符定位(即文本定位)和字符识别两种,根据“模型优化方法---VM算法平台篇”所介绍的:字符识别错误,大概率是由于字符定位不准导致。极少情况是由于识别的字符形态特殊,如激光焊字符,需要重点训练字符识别模型。
在做项目时,可能会遇到这种情况,即使通过“模型优化方法”系列介绍的方法:1.增加样本。2.调整标注。3.增加迭代...等等,发现字符仍无法稳定识别,定位框有较大歪斜,且loss曲线难以收敛,如下图:
那么首先要了解字符定位的功能。
从标注上来看,字符定位是通过矩形框进行标注,类似目标检测,只不过需要两边空出半个字符。
也就是说字符识别与目标检测一样,只是一种将box框传输给字符识别模块的方式,而字符识别只是对box框内的内容做预测:
通过查阅深度学习训练说明文档的内容,可知算法最低可检出占比1.31%的目标,那么字符定位应该差距不大,可以暂用2.63%来计算。
回到VM,通过自建ROI来查看字符大小,这里我习惯用像高计算:字符像高/max(样本水平分辨率,样本垂直分辨率)>2.63%。【注:当然这个数值只是一个测试参考,具体数值应当与算法规定的patch大小有关。】
计算所得为2.27%,那么这张图需要提前做裁剪(1936*1216->1350*720),以提高字符占比,然后再做相应训练,测试效果后会发现模型性能已有大幅提升。
这里最好使用VM的最新版本,目前VM4.2的字符定位模块,同时开放了置信度和平均分数,在调试的时候更方便。