Bootstrap

内涵:文本识别论文之Aster解读

一、Aster解读—Level1 梳理论文思路

  ASTER是独立于另一篇博文CTC文本识别的另一篇经典识别论文。它的全称是A ttentional S cene Te xt Recognizer with Flexible R ectification。
  首先作者找到了一个值得研究的学术问题:在自然场景下,存在扭曲文字和非常规布局的现象,讲的再数学性一点就是透视变换和曲形文字,单纯的文本识别器对该情形的识别能力有限。
在这里插入图片描述

Fig1 扭曲文字和非常规布局文字示例
  作者的解决思路也较直观,通过增添一个显性的校正模块来缓解这一问题。具体来讲作者使用了TPS(Thin Plate Spines)算法来做图像矫正。该算法在opencv库里面已经被实现,但如果直接调用该算法会有两个问题:
  • 速度慢
  • opencv是在求一个闭式解,无法智能的学习、推理

在这里插入图片描述

Fig2 Aster整体流程图
  作者比较巧妙的将TPS求闭式解的过程转换为一个深度学习问题,并且以STN和pytorch的基本操作来实施TPS算法保证了该校正模块的可导性。在模块可导的基础上,识别的反传梯度就可以end-to-end的传递给校正模块,从而达到无需TPS校正真值的效果。

  识别网络,作者采用了Attentional 识别模型,这算是有别于CTC方案目前介绍的第二文本识别流派。
在这里插入图片描述

Fig3 Attentional 识别方案流程简图
  最终的结果显示,增添完校正模块的识别效果相比未添加校正模块,有相当可观的提升。

在这里插入图片描述

Fig4 增添校正模块前后指标对比

  再来看一看,校正前后的图片效果,效果可能不够完美,但应该讲都还是有朝着好的方向发展。
在这里插入图片描述

Fig5 校正效果示意图

二、Aster解读—Level2 理解论文数学原理

2.1 尝试对TPS的数学原理进行理解

  TPS算法求解通用图像转换的思想是将其转换为一个最优化问题。提出了以下假设:

  • 寻找到的转换方式,尽可能得“拟合”已知的控制点。
  • 寻找到的转换方式,使得原始图像拟合控制点的“扭曲度”尽可能的小。

  这有点类似于一些小学找规律题目。

1----3-----5-----7------(?)
找出其中的规律,并补充括号中的数字

  按照TPS的思想,找到的规律为y=2*x-1, 括号中的答案为9。因为寻找到的规律(尽可能)满足了原始提供的4个控制点(1,3,5,7), 且规律足够的简单(对应扭曲度足够小)。之所以强调规律足够简单,是因为如果较真的话,我们也可以设计出一个复杂的规律,使得其前4个数字也满足{1, 3, 5,7},但注意到此时已经不满足“扭曲度”尽可能小的思想。
  因此TPS最优化的问题可以描述为: ε = ε t + λ ε d \varepsilon=\varepsilon_t + \lambda\varepsilon_{d} ε=εt+λεd。前面一项称之为拟合项,后面一项称之为扭曲度。通过求上述等式的最小值,可以求得tps算法闭式解的形式为:
T ( c ) = m 0 + M ∗ c + ∑ i = 1 K ω i ϕ ( ∣ ∣ c − c i ∣ ∣ ) T(c)= m_{0} + M*c + \sum_{i=1}^{K}\omega_{i}\phi(||c-c_{i}||) T(c)=m0+Mc+i=1Kωiϕ(∣∣cci∣∣)
  这也是Aster这篇论文中transformation矩阵表示形式的由来。
T 2 ∗ ( K + 3 ) = [ a 0 a 1 a 2 u 1 ∗ k b 0 b 1 b 2 v 1 ∗ k ] T_{2*(K+3)}=\left[ \begin{matrix} a_{0} & a_{1} & a_{2} & u_{1*k}\\ b_{0} & b_{1} & b_{2} & v_{1*k} \end{matrix} \right] T2(K+3)=[a0b0a1b1a2b2u1kv1k]
  根据一个控制点,我们可以获得两个等式(因为一个点有x和y两个维度):
p 2 ∗ 1 ′ = T [ 1 p ϕ ( ∣ ∣ p − c 1 ∣ ∣ ) . . . ϕ ( ∣ ∣ p − c K ∣ ∣ ) ] p^{'}_{2*1} = T\left[ \begin{matrix} 1\\ p\\ \phi(||p-c_{1}||)\\ ...\\ \phi(||p-c_{K}||) \end{matrix} \right] p21=T 1pϕ(∣∣pc1∣∣)...ϕ(∣∣pcK∣∣)
  类推我们已知 K K K个控制点,所以我们可以得到 2 ∗ K 2*K 2K个等式:
C 2 ∗ K ′ = T 2 ∗ ( K + 3 ) [ 1 1 . . . 1 c 0 c 1 . . . c K − 1 ϕ ( ∣ ∣ c 0 − c 0 ∣ ∣ ) ϕ ( ∣ ∣ c 1 − c 0 ∣ ∣ ) . . . ϕ ( ∣ ∣ c K − 1 − c 0 ∣ ∣ ) . . . . . . . . . . . . ϕ ( ∣ ∣ c 0 − c K − 1 ∣ ∣ ) ϕ ( ∣ ∣ c 1 − c K − 1 ∣ ∣ ) . . . ϕ ( ∣ ∣ c K − 1 − c K − 1 ∣ ∣ ) ] C^{'}_{2*K}=T_{2*(K+3)}\left[ \begin{matrix} 1 & 1 & ... & 1\\ c_{0} & c_{1} & ... & c_{K-1}\\ \phi(||c_{0}-c_{0}||) & \phi(||c_{1}-c_{0}||) & ... & \phi(||c_{K-1}-c_{0}||)\\ ... & ... & ... & ...\\ \phi(||c_{0}-c_{K-1}||) & \phi(||c_{1}-c_{K-1}||) & ... & \phi(||c_{K-1}-c_{K-1}||) \end{matrix} \right] C2K=T2(K+3) 1c0ϕ(∣∣c0c0∣∣)...ϕ(∣∣c0cK1∣∣)1c1ϕ(∣∣c1c0∣∣)...ϕ(∣∣c1cK1∣∣)...............1cK1ϕ(∣∣cK1c0∣∣)...ϕ(∣∣cK1cK1∣∣)
  但要知道的是 T T T含有 2 ∗ ( K + 3 ) 2*(K+3) 2(K+3)个参数, 但我们目前仅仅有 2 K 2K 2K个等式方程,这是无法求解到的,因此作者人为添加了6个约束:
0 = u ∗ 1 0=u*1 0=u1
0 = v ∗ 1 0=v*1 0=v1
0 = u ∗ c x T 0=u*c^{T}_{x} 0=ucxT
0 = v ∗ c y T 0 = v*c^{T}_{y} 0=vcyT
0 = u ∗ c y T − − A s t e r 论文中没有,我感觉是作者写漏了 0 = u * c^{T}_{y}--Aster论文中没有,我感觉是作者写漏了 0=ucyTAster论文中没有,我感觉是作者写漏了
0 = v ∗ c x T − − A s t e r 论文中没有,我感觉是作者写漏了 0 = v * c^{T}_{x}--Aster论文中没有,我感觉是作者写漏了 0=vcxTAster论文中没有,我感觉是作者写漏了
  有了这6个等式,我们可以"padding"得到如下的 2 ∗ ( K + 3 ) 2*(K+3) 2(K+3)个等式:
C 2 ∗ K ′ , [ 0 0 0 0 0 0 ] = T 2 ∗ ( K + 3 ) [ 1 1 . . . 1 0 0 c 0 c 1 . . . c K − 1 0 0 ϕ ( ∣ ∣ c 0 − c 0 ∣ ∣ ) ϕ ( ∣ ∣ c 1 − c 0 ∣ ∣ ) . . . ϕ ( ∣ ∣ c K − 1 − c 0 ∣ ∣ ) 1 c 0 . . . . . . . . . . . . . . . . . . ϕ ( ∣ ∣ c 0 − c K − 1 ∣ ∣ ) ϕ ( ∣ ∣ c 1 − c K − 1 ∣ ∣ ) . . . ϕ ( ∣ ∣ c K − 1 − c K − 1 ∣ ∣ ) 1 C K − 1 ] C^{'}_{2*K},\left[ \begin{matrix} 0 & 0 & 0\\ 0 & 0 & 0\end{matrix}\right]=T_{2*(K+3)}\left[ \begin{matrix} 1 & 1 & ... & 1 & 0 & 0\\ c_{0} & c_{1} & ... & c_{K-1} & 0 & 0\\ \phi(||c_{0}-c_{0}||) & \phi(||c_{1}-c_{0}||) & ... & \phi(||c_{K-1}-c_{0}||) & 1 & c_{0}\\ ... & ... & ... & ... & ... & ...\\ \phi(||c_{0}-c_{K-1}||) & \phi(||c_{1}-c_{K-1}||) & ... & \phi(||c_{K-1}-c_{K-1}||) & 1 & C_{K-1} \end{matrix} \right] C2K[000000]=T2(K+3) 1c0ϕ(∣∣c0c0∣∣)...ϕ(∣∣c0cK1∣∣)1c1ϕ(∣∣c1c0∣∣)...ϕ(∣∣c1cK1∣∣)...............1cK1ϕ(∣∣cK1c0∣∣)...ϕ(∣∣cK1cK1∣∣)001...100c0...CK1
   这也就是论文中Aster中如下写法的由来:
T ∇ C = [ C ′ 0 2 ∗ 3 ] T\nabla_{C} = \left[ \begin{matrix} C^{'} & 0^{2*3} \end{matrix} \right] TC=[C023]
∇ C = [ 1 1 ∗ K 0 0 C 0 0 C ^ 1 K ∗ 1 C T ] \nabla_{C} = \left[ \begin{matrix} 1^{1*K} & 0 & 0 \\C & 0 & 0\\ \widehat{C} & 1^{K*1} & C^{T} \end{matrix}\right] C= 11KCC 001K100CT
  我们想要求得得转换 T T T, 则可以表示为:
T = [ C ′ 0 2 ∗ 3 ] ∗ ∇ C − 1 T = \left[ \begin{matrix} C^{'} & 0^{2*3} \end{matrix} \right] * \nabla_{C}^{-1} T=[C023]C1
在这里插入图片描述
  作者用上图来模拟了TPS过程, C ′ C_{'} C是STN网络中的localization网络预测得到的控制点。并根据规则确定出了输出控制点 C C C, 规则按照论文上的说法为,细节这边还需要再看一下代码。

at fixed locations along the top and bottom image borders with equal spacings

  有了输出图片上 p p p对应的输入图片上 p ′ p_{'} p之后(这一步对应STN网络的grid_generator),就可以进一步利用STN模块上的Sampler模块,获得校正后的图片。STN也在这篇博文中进行了解读,如果对localization、grid_generator和sampler三子模块不熟悉的可以跳转查看。

三、Aster解读—Level3 通过Attentional 避开CTC loss

  在CTC LOSS这篇文章中介绍了由于图片块中字体大小以及布局之间的关系,具体的,例如说,如果图片中S这个字母特别大,可能会导致出现SSSTATE这样的“结巴现象”, 但通过后处理操作可以将其修正为STATE。通过CTC Loss可以巧妙的计算出所有情形的概率。而Aster这篇论文使用了Attentional的方式就可以避免上述的问题,从而避开CTC Loss。
在这里插入图片描述
  论文中也绘制了基于Attentional的Sequence-to-Sequence模型的简图:
在这里插入图片描述
  如下的计算权重以及加权的公式更加直观明显:
e t , i = w T t a n h ( W s t − 1 + V h i + b ) e_{t,i} = w^Ttanh(W_{s_{t-1}} + Vh_{i} + b) et,i=wTtanh(Wst1+Vhi+b)
α t , i = e x p ( e t , i ) / ∑ i ′ = 1 n e x p ( e t , i ′ ) \alpha_{t,i} = exp(e_{t,i})/ \sum_{i^{'}=1}^{n} exp(e_{t,i^{'}}) αt,i=exp(et,i)/i=1nexp(et,i)
g t = ∑ i = 1 n α t , i h i g_t=\sum_{i=1}^{n}\alpha_{t,i}h_{i} gt=i=1nαt,ihi

四、Aster解读—Level4 思考

  思考:

  • tps+x应该是一种可以推广的方式,端到端的,无需额外标签。
  • tps中有6个等式是默认其等于0来获得2K+6个方程组。是否可以将其设置为等于V, 而V是可学习的,从而获得更优的解。

参考资料

  1. Aster: An Attentional Scene Text Recognizer with Flexible Rectification
;