前言
最简单的Lenet网络使用的是多层卷积+softmax,存在不足:输入图像是分割好的单个字符,更理想的形式是将分割与识别组合为端到端的网络。且使用softmax的机制意味着分割后子图的数量决定了输出字符串的长度。
当前OCR的问题在于对倾斜文本、弯曲文本、二维文本的识别效果不佳,且在ASTER方法中,预测时会出现某个字识别错误后后面全错的问题。
CTC
CNN+RNN+CTC(CRNN+CTC)
CTC:联结主义时间分类
简单来说,CNN获取特征图,对特征图按列切分,输入BLSTM网路提取文字序列特征,BLSTM网路的输出尺寸为识别的最长字符串长度,使用空白字符blank机制(增加空字符‘-’)、β变换(去冗余)及CTC损失,实现不定长文本的识别。
同一目标输出,可由多条不同路径经β变换获得
CTC的训练目的为输入图像x,输出目标字符串的概率最大p(l |x)
CTC借用了HMM的“向前—向后”(forward-backward)算法来计算 p(l |x),涉及前向递推概率和、反向递推概率和。目标输出CAT,某一条正确的路径,t时刻为A,则t-1时刻只能为C、A或-,t+1时刻只能为A、T、-,式中求积代表某条子路径的概率,求和代表多条子路径的概率和。
CTC损失为负的最大似然,预测结果正确率越高,损失越小。
前向推断时,可采取前缀搜索算法解码(输出序列的每一步中选择最可能的单词)或约束解码算法(束搜索:在每一步中,每个候选序列都被扩展为所有可能的后续步骤。每个候选步骤的分数通过概率相乘得到。选择具有最大概率的k个序列,并删去其他候选项,然后重复该过程直到序列结束。)
参考文献:
Attention
CNN+Seq2Seq+Attention
“在Seq2Seq结构中,编码器Encoder把所有的输入序列都编码成一个统一的语义向量Context,然后再由解码器Decoder解码。在解码器Decoder解码的过程中,不断地将前一个时刻的输出作为后一个时刻的输入,循环解码,直到输出停止符为止。”
复用编码器前几个隐藏层状态(类似残差网络的思想),提高信息利用率,当输出较长时更为明显,解决语义向量Context长度限制问题。由于w不同,形成了一种对编码器不同输入对应的注意力机制(权重越大注意力越强)。与前一个状态拼接在一起形成一个新的向量输入到隐藏层计算结果。
缺陷:前一时刻作为会作为后一个时刻的输入,因此,前一时刻的输出错误会导致下一时刻的输出错误,影响训练,为了解决这个问题,提出了Scheduled Sampling(即在训练中xt按照一定概率选择输入y(t-1)或t-1时刻对应的真实值,即标签.,既能加快训练速度,也能提高训练精度。
参考文献:
完全解析RNN, Seq2Seq, Attention注意力机制 - 知乎
ASTER
将字符区域矫正后识别,ASTER = 矫正网络 + Attention
Localization Network:检测控制点
Grid Generator:生成映射关系,传统方法,非DL
Sampler V:在原图中采样,生成矫正后图像
缺陷:矫正网络能力有限,若矫正不佳,影响图像质量,更不利于识别。
参考文献:
ACE
将图像分割为多个子区域后(子区域数量与特征图尺寸有关),识别子区域的字符。
ACE用了近似计算的思想,如标签为CATCAT,按照CTC的思想,输出目标为第一个字符为C,第二个为A。。。,按照CTC的思路,目标物2个C,2个A,2个T。
缺陷:特征图的尺寸限制了所能预测的字符串的长度。最长目标字符串长度越长,输入网络的图像需要越大,而对于中英文及标点而言,宽度不同,这个网络对于真实的文本,需要的输入非常大。
参考文献:
序列识别问题的聚合交叉熵损失函数(ACE损失函数)_CHEN666CONG的博客-CSDN博客
MASKTEXTSPOTTER
在整张图像上检测单个字符,并拼接起来
RPN:候选区域网络,生成候选文本区域
ROI Align: 提取候选区域特征
Fast R-CNN : 生成更准确的回归框
Mask branch:全局文本分割 +字符分割
缺陷:
1)标注量剧增
2)对于英文和数字来说,类别只有26*2+10,如果用来提取中文,类别暴增,每个字符训练一个通道不太现实
3)CTW和totaltext数据集的图像旋转不会太厉害,对旋转角度超过90的估计不好处理
参考文献:
文本检测+识别之Mask TextSpotter_watersink的博客-CSDN博客_mask text
ABCNet 2020
文本行上下两条曲线的检测,每条曲线使用一个三阶贝塞尔曲线拟合。提出特征对齐层—BezierAlign—来精确计算弯曲形状文本实例的卷积特征。BezierAlign可以将曲线文本转为直线,b站有个视频讲解。
PGNet 百度
把文字检测和识别归为四个任务:文本中心线检测、文本边框偏移、文本方向偏移、文本字符分类map。和Mask-TextSpotter一样存在中文场景字符多的问题。
TrOCR 2021
基于Transformer 编解码结构,ViT 初始化编码器提取图像特征(实验验证了Beit比Deit效果好),RoBERTa初始化解码器生成wordpiece序列(注意这里的输出不是字符级)。Transformer 解码器替代了 CTC 解码器。
beit>deit>vit
Vit:需要大型数据来进行训练
deit:在vit中class token基础上增加了一个distillation token进行蒸馏损失学习,用cnn作为teacher,用蒸馏学习的训练技巧训练deit
beit(Bidirectional Encoder representation from Image Transformers):基于MLM图像重建的预训练方法。图像有2种token,包括图像块patch及离散的视觉token(数字),对图像进行mask,编码器学习tokenize,基于词汇表获得mask处的token数字(即其视觉token表达)
来也科技 印章文本识别
这篇文章比较了beam search 和greedy贪婪模式的区别,greedy模式快性能下降0.4%但速度快。采用yolov5+ TrOCR 准确率在68%左右,做的是2dOCR。考虑了两种阅读情况,从上到下阅读顺序,从右至左阅读顺序。设置了两种不同的特殊符号“$$”和“**”代表两种不同阅读顺序的换行符。