SRN: Towards Accurate Scene Text Recognition with Semantic Reasoning Networks ---论文阅读笔记

Paper : https://arxiv.org/abs/2003.12294

在这里插入图片描述

Pipeline

Semantic Reasoning Networks ( SRN) : Backbone Network + Parallel Visual Attention Module ( PVAM ) + Global Semantic Reasoning ( GSRM ) + Visual-Semantic Fusion Decoder ( VSFD )

Backbone network : 主干网络,使用 ResNet50 + FPN 提取视觉特征,使用 transformer encoder 增强视觉特征

PVAM : 视觉编码 ( Visual Encoder ),使用 self attention 机制提取每个时间步的视觉特征

GSRM : 语义编码 ( Semantic Encoder ),使用 transformer encoder 编码全局信息

VSFD : 视觉语义解码 (Visual-Semantic Fusion Decoder),融合视觉信息和语义信息,获得最终结果

  1. 使用主干网络提取图像特征 V V V
  2. 使用 PVAM 生成 N N N 个对齐的 1-D 特征 G G G ,每一个特征对应于一个字符;并且捕获对齐的视觉特征
  3. 使用 GSRM 捕获全局语义信息 S S S
  4. 使用 VSFD 融合视觉特征 G G G 和语义信息 S S S ,预测 N 个字符。

Backbone Network

使用 FPN 从 ResNet50 的 stage-3, stage-4 和 stage-5 聚合特征图,ResNet50+FPN 的特征图大小为输入图像的 1/8 ,通道数是 512 。还使用了 transformer unit ( 位置编码,多头注意力,前馈网络 ) 捕获全局空间依赖。将特征图输入到 2 个 transformer units 中 ( 多头注意力头为 8 ),提取出增强的视觉特征 表示为 V , v i j ∈ R d , d = 512 V, v_{ij} \in \Bbb{R}^d, d = 512 V,vijRd,d=512

Parallel Visual Attention Module ( PVAM )

与普通的 attention 机制不同,文中使用 parallel visual attention 来提高效率,其实就是 self-attention

key-value 为输入的 2D 视觉特征 ( v i j , v i j ) (v_{ij}, v_{ij}) (vij,vij) ,普通的 attention 使用上一时刻的隐藏状态生成当前时刻的特征,为了并行计算,文中使用阅读顺序 ( reading order ) 作为 query 代替上一时刻的隐藏状态,比如第一个字符为 0,第二个字符为 1 等等。如下公式:
{ e t , i j = W e T t a n h ( W o f o ( O t ) + W v v i j ) α t , i j = exp ⁡ ( e t , i j ) ∑ ∀ i , j exp ⁡ ( e t , i j ) (1) \begin{cases} e_{t,ij} = W_e^T tanh(W_o f_o (O_t) + W_v v_{ij}) \\ \alpha_{t,ij} = \frac{\exp(e_{t,ij})}{\sum_{\forall i,j}\exp(e_{t,ij})} \end{cases} \tag{1} { et,ij=WeTtanh(Wofo(Ot)+Wvvij)αt,ij=i,jexp(et,ij)exp(et,ij)(1)
其中 W ∗ W_{*} W 是训练参数, O t O_t Ot 是字符的阅读顺序 [ 0 , 1 , . . . , N − 1 ] [0, 1, ..., N-1] [0,1,...,N1] f o f_o fo 是 embedding 函数。

生成全部的视觉特征,第 t 时间步的对齐视觉特征表示为:
g t = ∑ ∀ i , j α t , i j v t , i j (2) g_t = \sum_{\forall i,j} \alpha_{t,ij} v_{t, ij} \tag{2} gt=i,jαt,ijvt,ij(2)
因为计算方法与时间无关,所以 PVAM 可以并行输出全部时间的对齐视觉特征 ( G , g t ∈ R d G, g_t \in \Bbb{R}^{d} G,gtRd)

所获得的 attention map 可以正确注意相应字符的视觉区域,很好地验证了 PVAM 的有效性

在这里插入图片描述

Global Semantic Reasoning Module ( GSRM )

单向串行传输 ( 类 RNN 结构 ) : 首先它只可以感知到局部信息,甚至在解码第一步没有使用语义信息;其次,当在较早的时间步上产生错误的解码时,它可能会传递错误的语义信息并导致错误累积,很大可能造成之后的解码产生错误的结果。

提出 GSRM 克服以上问题,以一种新颖的多路并行传输方式来考虑全局语义上下文,多路并行传输可以同时感知全部字符的语义信息,此外,单个字符的错误语义内容只能对其他步骤造成非常有限的负面影响。其实也是 self-attention

在这里插入图片描述

此模块分为两部分 visual-to-semantic embedding blocksemantic reasoning block

在这里插入图片描述

Visual-to-semantic embedding block

作用:生成 semantic reasoning block 模块的输入

把 PVAM 的输出 G G G 输入到全连接层中,经过 softmax,然后通过 argmax 运算和嵌入层,基于 g t g_t gt 的最可能的输出字符计算嵌入向量 e t ′ e'_t et 作为 semantic reasoning block 的输入。

经过 softmax 的输出使用 GT 字符监督,使用交叉熵损失:
L e = − 1 N ∑ t = 1 N log ⁡ p ( y t ∣ g t ) (3) L_e = - \frac{1}{N} \sum_{t=1}^{N} \log p(y_t|g_t) \tag{3} Le=N1t=1Nlogp(ytgt)(3)

Semantic reasoning block

作用:生成每一个视觉特征对应的语义信息

以上一步的输出为 transformer units 的输入 ( 4 个多头注意力,每个多头注意力的头为 8 ) ,得到每一步的语义特征 S , s t ∈ R d , d = 512 S, s_t \in \Bbb{R}^{d}, d=512 S,stRd,d=512

在每一个 s s s 上使用理解损失 L r L_r Lr :
L r = − 1 N ∑ t = 1 N log ⁡ p ( y t ∣ s t ) (4) L_r = - \frac{1}{N} \sum_{t=1}^{N} \log p(y_t|s_t) \tag{4} Lr=N1t=1Nlogp(ytst)(4)

Visual-Semantic Fusion Decoder

视觉信息和语义信息在最终的结果中所占的比重应该是不同的,文中使用了门控单元平衡特征的贡献:
{ z t = σ ( W z ⋅ [ g t , s t ] ) f t = z t ∗ g t + ( 1 − z t ) ∗ s t (5) \begin{cases} z_t = \sigma(\mathbf{W_z} \cdot [g_t, s_t]) \\ f_t = z_t * g_t + (1- z_t) * s_t \end{cases} \tag{5} { zt=σ(Wz[gt,st])ft=ztgt+(1zt)st(5)
其中 W z \mathbf{W_z} Wz 是训练权重, f t f_t ft 是第 t 个融合向量 t ∈ [ 1 , N ] t \in [1, N] t[1,N] 。全部的融合特征可以表示为 F , f t ∈ R d F, f_t \in \Bbb{R}^d F,ftRd ,用来预测最终的字符,目标函数:
L f = − 1 N ∑ t = 1 N log ⁡ p ( y t ∣ f t ) (6) L_f =- \frac{1}{N} \sum_{t=1}^{N} \log p(y_t|f_t) \tag{6} Lf=N1t=1Nlogp(ytft)(6)

结合 GRSM 和 VSFD 的损失函数,最终的损失可以写成:
L o s s = α e L e + α r L r + α f L f (7) Loss = \alpha_e L_e + \alpha_r L_r + \alpha_f L_f \tag{7} Loss=αeLe+αrLr+αfLf(7)
α e , α r , α f \alpha_e, \alpha_r, \alpha_f αe,αr,αf 设置为 1.0 , 0.15 , 2.0 1.0,0.15, 2.0 1.0,0.15,2.0

总结

  1. 觉得本文的方法有些复杂,在 Backbone network 中加入了 transformer encoder 去增强视觉特征,学习到的视觉特征又再一次通过 self-attention 学习得到对齐的视觉特征,为什么不在 CNN 得到的视觉特征之后直接加入位置编码输入到 transformer encoder 中,这样也可以学习到对齐的视觉特征,也不需要两次对视觉特征处理了。
  2. 由于要达到并行的作用,文中提到的字符数量 N N N 是提前固定好的,可以设置为比较大的数字,类似与 DETR 中提前设置好目标的数量一样。但是对于文本,提前设置好字符的数量是否有些不妥。

猜你喜欢

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