RobustScanner: Dynamically Enhancing Positional Clues for Robust Text Recognition —— 论文阅读笔记

Paper : https://arxiv.org/abs/2007.07542v2

基于注意力的编码-解码结构的网络在缺少上下文信息的文本上表现不好(比如随机字符下图)。一个字符序列的解码不仅利用上下文信息也利用位置信息,但是在注意力机制中,严重依赖于上下文信息,随着时间步的增加,位置信息逐渐被淹没,会导致后边的字符出现对齐漂移和误识别。为了解决这个问题,提出了位置增强分支,并将其输出与注意力模块的输出动态融合。位置增强分支包含一个位置感知模块(使编码器编码自己的空间位置以输出自己的位置特征向量)和一个注意力模块。动态融合部分通过逐元素门机制以获得更强大的特征,位置和上下文信息的融合比例可以在每一个时间步根据它们自己的重要性动态自适应的调节。

在这里插入图片描述

RobustScanner

在这里插入图片描述

RobustScanner 包含一个编码器和一个解码器。编码器部分,主干网络使用 31-ResNet 。解码器部分包含一个混合分支,一个位置增强分支,一个动态融合模块和一个预测模块。

混合分支

混合分支包含一个两层的 LSTM和一个注意力模块。同时利用了上下文信息和位置信息。

位置增强分支

包含一个位置嵌入层,一个位置感知模块和一个注意力模块。

位置嵌入层

位置嵌入层对解码时间步长进行编码。它为每个时间步长输入一个One-hot向量,并输出一个特定的嵌入向量,在不同的解码序列中,每个时间步的嵌入向量都是一样的。。

位置感知模块

虽然位置嵌入层将字符索引编码在序列中,但在编码器输出特征图 F 上精确定位第 t 个字符仍然是一个挑战。然而,输入图像的宽度可能超出CNN编码器的感受野大小。 此外,统计图像中字符的索引需要了解文本序列的形状和方向。因此提出了一个位置感知模块捕捉全局和高层信息,使编码器输出的特征图是位置感知的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HUXlJHVY-1609234916269)(./images/位置感知模块.png)]

对特征图 F 的每一行采用128个隐藏状态大小的两层LSTM来捕捉全局上下文,对于所有行,LSTM共享参数,以克服过拟合,减少参数量。然后,使用两个 3x3 的卷积层(ReLU)生成注意力模块所需的 key 向量 F ^ \hat{F} F^
f i , j 1 = LSTM ( f i , j , f i , j − 1 1 ) \mathbf{f_{i,j}^1} = \text{LSTM}(\mathbf{f_{i,j}}, \mathbf{f_{i,j-1}^1}) fi,j1=LSTM(fi,j,fi,j11)

f i , j 2 = LSTM ( f i , j 1 , f i , j − 1 2 ) \mathbf{f_{i,j}^2} = \text{LSTM}(\mathbf{f_{i,j}^1}, \mathbf{f_{i,j-1}^2}) fi,j2=LSTM(fi,j1,fi,j12)

F ^ = f ( F 2 ) \mathbf{\hat{F}} = f(\mathbf{F^2}) F^=f(F2)

其中 f i , j 1 \mathbf{f_{i,j}^1} fi,j1 f i , j 2 \mathbf{f_{i,j}^2} fi,j2 分别是第一个和第二个 LSTM 隐藏层向量, F 2 \mathbf{F^2} F2 f i , j 2 \mathbf{f_{i,j}^2} fi,j2 组成, f ( ⋅ ) f(\cdot) f() 是 3×3 卷积操作、RELU激活函数和3×3卷积操作的叠加。

位置感知模块关注全局上下文,使其能够输出位置感知特征。query 向量在位置增强分支对字符顺序索引(位置)进行显式编码。端到端训练强制要求位置感知模块输出与位置相关的特征图,使分支中的注意力模块在每个解码步骤(位置)都能正确输出特征。否则,文本无法正确解码。

动态融合模块

在这里插入图片描述

融合混合分支和位置增强分支的输出。使用门控机制预测它们拼接后的每一维的注意力权重,用来增强或抑制对应的特征。
w t = sigmoid ( W a [ g t ; g t ′ ] ) \mathbf{w_t} = \text{sigmoid}(\mathbf{W_a[g_t;g_t']}) wt=sigmoid(Wa[gt;gt])

g t f = w t ⊙ ( W p [ g t ; g t ′ ] ) \mathbf{g_t^f} = \mathbf{w_t}\odot(\mathbf{W_p[g_t;g_t']}) gtf=wt(Wp[gt;gt])

其中 W a \mathbf{W_a} Wa W p \mathbf{W_p} Wp 是两个线性层。 ⊙ \odot 表示逐元素相乘操作。 g t f \mathbf{g_t^f} gtf 是动态融合模块的最终输出,再通过预测模块得到最终预测的字符。


仅供自己学习使用,如有侵权请联系删除。


猜你喜欢

转载自blog.csdn.net/m0_38007695/article/details/111933929