文本识别论文之Aster解读
一、Aster解读—Level1 梳理论文思路
ASTER是独立于另一篇博文CTC文本识别的另一篇经典识别论文。它的全称是A ttentional S cene Te xt Recognizer with Flexible R ectification。
首先作者找到了一个值得研究的学术问题:在自然场景下,存在扭曲文字和非常规布局的现象,讲的再数学性一点就是透视变换和曲形文字,单纯的文本识别器对该情形的识别能力有限。
- 速度慢
- opencv是在求一个闭式解,无法智能的学习、推理
识别网络,作者采用了Attentional 识别模型,这算是有别于CTC方案目前介绍的第二文本识别流派。
再来看一看,校正前后的图片效果,效果可能不够完美,但应该讲都还是有朝着好的方向发展。
二、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+M∗c+∑i=1Kωiϕ(∣∣c−ci∣∣)。
这也是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)=[a0b0a1b1a2b2u1∗kv1∗k]
根据一个控制点,我们可以获得两个等式(因为一个点有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]
p2∗1′=T
1pϕ(∣∣p−c1∣∣)...ϕ(∣∣p−cK∣∣)
类推我们已知
K
K
K个控制点,所以我们可以得到
2
∗
K
2*K
2∗K个等式:
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]
C2∗K′=T2∗(K+3)
1c0ϕ(∣∣c0−c0∣∣)...ϕ(∣∣c0−cK−1∣∣)1c1ϕ(∣∣c1−c0∣∣)...ϕ(∣∣c1−cK−1∣∣)...............1cK−1ϕ(∣∣cK−1−c0∣∣)...ϕ(∣∣cK−1−cK−1∣∣)
但要知道的是
T
T
T含有
2
∗
(
K
+
3
)
2*(K+3)
2∗(K+3)个参数, 但我们目前仅仅有
2
K
2K
2K个等式方程,这是无法求解到的,因此作者人为添加了6个约束:
0
=
u
∗
1
0=u*1
0=u∗1
0
=
v
∗
1
0=v*1
0=v∗1
0
=
u
∗
c
x
T
0=u*c^{T}_{x}
0=u∗cxT
0
=
v
∗
c
y
T
0 = v*c^{T}_{y}
0=v∗cyT
0
=
u
∗
c
y
T
−
−
A
s
t
e
r
论文中没有,我感觉是作者写漏了
0 = u * c^{T}_{y}--Aster论文中没有,我感觉是作者写漏了
0=u∗cyT−−Aster论文中没有,我感觉是作者写漏了
0
=
v
∗
c
x
T
−
−
A
s
t
e
r
论文中没有,我感觉是作者写漏了
0 = v * c^{T}_{x}--Aster论文中没有,我感觉是作者写漏了
0=v∗cxT−−Aster论文中没有,我感觉是作者写漏了
有了这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]
C2∗K′,[000000]=T2∗(K+3)
1c0ϕ(∣∣c0−c0∣∣)...ϕ(∣∣c0−cK−1∣∣)1c1ϕ(∣∣c1−c0∣∣)...ϕ(∣∣c1−cK−1∣∣)...............1cK−1ϕ(∣∣cK−1−c0∣∣)...ϕ(∣∣cK−1−cK−1∣∣)001...100c0...CK−1
这也就是论文中Aster中如下写法的由来:
T
∇
C
=
[
C
′
0
2
∗
3
]
T\nabla_{C} = \left[ \begin{matrix} C^{'} & 0^{2*3} \end{matrix} \right]
T∇C=[C′02∗3]
∇
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=
11∗KCC
001K∗100CT
我们想要求得得转换
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=[C′02∗3]∗∇C−1
作者用上图来模拟了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(Wst−1+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是可学习的,从而获得更优的解。