赞
踩
和上一篇基于attention机制的不规则文字识别论文是同一批作者,博客链接: Show, Attend and Read
由于show attend and read是基于LSTM-encoder-decoder结构的翻译翻译模型(以前翻译的主流框架),隔壁翻译组的同事当时看到就说说不定可以用transformer(现在的主流翻译模型)做ocr,结果。。过了两三个月就真出了基于transformer的ocr paper。由于该论文作者没有给模型去特定的名字,姑且叫做 transformer-ocr 模型(标题的英文是自己起的。。)。
本文论文地址:A Simple and Robust Convolutional-Attention Network for Irregular Text Recognition。
Transformer论文地址:Attention is all you need。
总的来说这篇论文复刻的难度小很多,结构清晰直观,效果也有很不错的表现,在transformer的基础上把encoder部分改为ResNet34,将encoder输出从文本模型的三维(batch, seq, dim)转换为图像卷积后feature map的四维输出(batch, h, w, dim),解码器部分的Multi-Head Attention也同样改为 2D-Attention,git clone整个transformer的github源码稍加修改即可。
先给一下attention机制在图像上的可视化效果(对原图进行加权)就不难理解其为何对曲形文字识别有效了:
对比一下Transformer和本论文的网络结构图:
左图:Transformer 右图:Transformer-OCR
网络结构高度一致,除了Encoder部分,几乎没什么变化。下面开始从左往右,自下而上一点一点分析网络结构。
首先是左侧 ResNet34的encoder部分,文中直接使用ResNet34的输出(除了最后一层average-pool层)作为encoder输出,由于网络的输入部分是将一个batch的图片全部resize成 128 x 400 x 3后的输入,所以此输出的尺寸也是固定的(4 x 13 x 512)。作者提到几个细节:
而右侧的decoder部分基本是基于Transformer(可以发现Transformer的encoder部分和decoder部分的设计也是高度相似),除了开始说到的Multi-Head Attention和2D Attention的区别,还有就是可以看到左侧transformer结构中灰色椭圆框边上有个Nx,表示这个部分可以叠加N次(论文中 N=6),而对于右侧的transformer-ocr模型,论文中称实验证明叠加一次的效果和叠加多次的效果并没有明显的差别,因此只需叠加一次即可。
对于decoder部分,从下往上看,训练时首先是将原始图像对应的字符label中的每一个字符从左往右经过embedding编码(即一个线性变换)后和其对应的位置索引(1,2,3,4...)经过位置编码(Positional Encoding)的输出相加作为decoder的一部分输入。其中 Positional Encoding (PE) 的公式如下:
其中的p是当前字符的位置(即是当前字符串的第几个字符),i 是从1到d的维度值,PE变换的维度和embedding输出的维度一致。
此部分输入至decoder后会依次经过以下三部分(sub-layer):
上面说的三个sub-layer,每个都有一个残差连接(图中黑色的连接线),对于每个sub-layer的输出可以表示为:
一般的attention机制有两种,一种是 additive attention,另一种是 dot-product attention (点乘),二者最终的效果相似,但dot-product attention的速度更快,且更节省空间。对于本文的 Masked Self-attention layer 和 2D Attention,其都是继承自 Multi-Head Scaled Dot-Product Attention,其中Multi-Head表示将一组向量拆分为多个部分并行计算,而 Scaled Dot-Product Attention 直接体现了transformer中的attention机制的原理,attention的方程式可以表示为 query(Q) 和一组key-value(K-V)之间的映射,这里的q,k,v都是向量。下图是 Scaled Dot-Product Attention 以及Multi-Head的解释示意图:
关于这三个向量 Q, K, V,一种理解就是对于一个输入X(前面说到的 embedding+PE 向量), 通过3个线性转换把X转换为Q,K,V。上图左侧的输入Q, K 是
其中的
左图: Self-Attention 右图:Masked Self-Attention
总的 Multi-Head Scaled Dot-Production Attention 公式如下:
其中的
终于,回到开始的模型图中,Masked Self-Attention 主要的作用是使得每一个位置的字符可以注意(attend)到在它之前的字符的信息;2D Attention 的 Q 来自 Masked Self-Attention layer 的输出,K-V 来自encoder部分的输出,这使得decoder的每一个位置可以注意到所有输入特征的信息,这是对传统的encoder-decoder attention机制的一种模拟;
最后一个sub-layer是Position-wise Feed-Forward layer,顾名思义,是单独且同样的应用在每一个位置的前馈全连接网络,这层网络包含了两个线性变换,公式如下:
最后通过一个线性变化和softmax得到预测概率,损失函数是交叉熵损失(cross-entropy loss)。
还有一点要补充的就是用于训练的字典中要有几个额外的成员(除了字符外):
start token:‘BOS’,inference时用作预测第一个字符,不然没有前面字符的输入无法开始预测;
end token :‘EOS’,inference是作为预测结束的标志,否则模型会一直往后预测,无法停止;
pad:'PAD',用于填充不同长度的字符串,使其长度统一(等于最长的字符串长度);
unknown:‘UNK’,用于预测没在字典中出现过的字符(可选);
至此,结束。
附一下效果图和榜上结果:
GT: ground truth Pred: prediction Res: original image resolution
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。