tags: RARE, OCR, STN, TPS, Attention
前言
RARE实现了对不规则文本的end-to-end的识别,算法包括两部分:
基于STN的不规则文本区域的矫正:与STN不同的是,RARE在Localisation部分预测的并不是仿射变换矩阵,而是K个TPS(Thin Plate Spines)的基准点,其中TPS基于样条(spines)的数据插值和平滑技术,在1.1节中会详细介绍其在RARE中的计算过程。
基于SRN的文字识别:SRN(Sequence Recognition Network)是基于Attention 的序列模型,包括有CNN和LSTM构成的编码(Encoder)模块和基于Attention和GRU的解码(Decoder)模块构成,此部分会在1.2节介绍。
在测试阶段,RARE使用了基于贪心或Beam Search的方法寻找最优输出结果。
RARE的流程如图1。
图1:RARE的算法框架,其中实线表示预测流程,虚线表示反向迭代过程。
1. RARE详解
1.1 Spatial Transformer Network
场景文字检测的难点有很多,仿射变换是其中一种,Jaderberg[2]等人提出的STN通过预测仿射变换矩阵的方式对输入图像进行矫正。但是真实场景的不规则文本要复杂的多,可能包括扭曲,弧形排列等情况(图2),这种方式的变换是传统的STN解决不了的,因此作者提出了基于TPS的STN。TPS非常强大的一点在于其可以近似所有和生物有关的形变。
图2:自然场景中的变换,左侧是输入图像,右侧是矫正后的效果,其中涉及的变换包括:(a) loosely-bounded text; (b) multi-oriented text; (c) perspective text; (d) curved text.
TPS是一种基于样条的数据插值和平滑技术。要详细了解STN的细节和动机,可以自行去看论文,我暂无计划解析这篇1989年提出的和深度学习关系不大的论文。对于TPS可以这么简单理解,给我们一块光滑的薄铁板,我们弯曲这块铁板使其穿过空间中固定的几个点,TPS得到的便是我们弯曲铁板所耗费的最小的功。
TPS也常用于对扭曲图像的矫正,1.1.2节中介绍计算流程,至于为什么能work,我也暂时没有搞懂。
纵观整个矫正算法,RARE的STN也分成3部分:
localization network: 预测TPS矫正所需要的K个基准点(fiducial point);
Grid Generator:基于基准点进行TPS变换,生成输出Feature Map的采样窗格(Grid);
STN的算法流程如图3。
图3:RARE中的STN
1.1.1 localization network
Localization network是一个有卷积层,池化层和全连接构成的卷积网络(图4)。由于一个点由(x,y)定义,所以一个要预测K个基准点的卷积网络需要由2K个输出。为了将基准点的范围控制到[−1,1],输出层使用tanh作为激活函数,在论文的实验部分给出K=20。如图2和图3所示的绿色'+'即为Localization network预测的基准点。
得到网络的输出后,其被reshape成一个2×K的矩阵C,即C=[c1,c2,...,cK]∈R2×K。
图4: Localization network的结构,其中所有卷积的,所有
如图4所示,RARE的输入图片的尺寸是100×32,在RARE的实现中,STN的输出层的Feature Map的尺寸同样使用了100×32的大小。
1.1.2 Grid Generator
当给定了输出Feature Map的时候,我们可以再其顶边和底边分别均匀的生成K个点,如图5,这些点便被叫做基-基准点(base fiducial point),表示为C′=[c′1,c′2,...,c′K]∈R2×K,在RARE的STN中,输出的Feature Map的尺寸是固定的,所以C′为一个常量。
那么,1.1.2节要介绍的Grid Generator的作用就是如何利用C和C′,将图5中的图像I和图5中的图像I′的转换关系T。
图5:TPS中的转换关系
当从localization network得到基准点C和固定基-基准点C′后,转换矩阵T∈R2×(K+3)的值已经可以确定:
T=(ΔC′−1[CT03×2])T 其中ΔC′∈R(K+3)×K+3是一个只由C′计算得到的矩阵:
ΔC′=1K×100C′T00R11×KC′ 其中1K×1是一个K×1的值全是1的行向量,11×K同理。R∈RK×K是一个由ri,j组成的K×K的矩阵。其中
ri,j=di,j2ln(di,j2) di,j=euclidean(ci′,cj′) 上式中euclidean(a,b)表示a,b两点之间的欧式距离。
由此可见,仅仅使用C和C′我们便可以得到转换矩阵T。那么对于STN这个反向插值的算法来说,对于矫正图片中I′={pi′}i=1,2,...,N(N=W×H, 即输出图像的像素点的个数)的任意一点pi′=[xi′,yi′]T,我们怎样才能找到其在原图I中对应的点pi=[xi,yi]T呢?这就需要用到我们上面得到的T了。
ri,k′=di,k2ln(di,k2) p^i′=[1,xi′,yi′,ri,1′,ri,2′,...,ri,3′] pi=Tp^i′ 其中di,k2表示第i个像素点pi′和第k个基准点ck′之间的欧式距离。
1.1.3 Sampler
在1.1.2节中,我们得到了输出Feature Map上一点pi′=[xi′,yi′]T对应的输入Feature Map上像素点的坐标pi=[xi,yi]T的对应关系。在RARE中,使用了双线西插值得到了输出Feature Map在[xi′,yi′]上的值。
RARE中的STN和原始版本的STN都是一个可微分的模型,这也就意味着RARE也是一个可端到端训练的模型。不同点在于RARE将仿射变换矩阵变成了TPS,从而使模型有拥有矫正任何变换的能力,包括但不仅限于仿射变换,图2右侧部分是RARE的STN得到的实验结果。
1.2 Sequence Recognition Network
如图1的后半部分所示,RARE的SRN的输入是1.1节得到的校正后的图片,输出则是识别的字符串。SRN是一个基于Attention的序列到序列(Seq-to-Seq)的模型,包含编码器(Encoder)和解码器(Decoder)两部分,编码器用于将输入图像I′编码成特征向量h,解码器则负责将特征向量h解码成字符串y^。SRN的机构基本遵循Bahdanau在[5]中的结构,RARE的SRN的结构如图6所示。
图6:SRN框架图
1.2.1 编码器(Encoder)
RARE的编码器非常简单由一个7层的CNN和一个两层的双向LSTM组成。g根据论文中给出的结构,以及1.1节确定的STN的输出层的大小(100×32), Encoder的结构如图7所示。
图7:SRN Encoder网络结果即输出Feature Map的尺寸
注意此处论文中有点没有说明,通过和作者的讨论得知,最后两层只对高度进行降采样,因此才有了7中的结构。
在卷积层之后,Encoder设置了两个双向LSTM,每个LSTM的隐层节点的数量都是256,计第t个时间片的输出特征为xt,第t个时间片的正向LSTM的隐层节点为htf,反向LSTM的隐节点为htb,f()表示一个LSTM节点,则正向和反向传播可分别表示为:
htf=f(xt,ht−1f) htb=f(xt,ht+1b) 上式中的h0以及h7可以自己定义或者用默认的0值。
Encoder的输出是正反向两个隐层节点拼接起来,这样每个时间片的特征响亮的个数便是512:
h=[htf;htb] 卷积之后Wconv=6,Encoder的输出特征序列h由所有时间片拼接而成,因此h=(h1,...,hL)∈R512×L,其中L=Wconv=6。
1.2.2 解码器(Decoder)
Decoder是基于单向GRU的序列模型,其在第t个时间片的特征st表示为:
st=GRU(lt−1,gt,st−1) 其中t=[1,2,...,T],T是输出标签的长度。
在训练时,lt−1是第t个时间片的标签,在测试时则是第t个时间片的预测结果。gt是Attention的一个叫做glimpse的参数,从数学上理解是特征h的各个时间片的特征的加权和:
gt=i=1∑Lαtihi αti=∑k=1Texp(tanh(si−1,hk))exp(tanh(si−1,ht)) RARE的输出向量有37个节点,包括26个字母+10个数字+1个终止符,输出层使用softmax做激活函数,每个时间片预测一个值:
y^t=softmax(WTst) 1.3 训练
RARE是一个端到端训练的模型,我们不需要STN专门的标签也可以训练它,所以损失函数仅是一个简单的log极大似然:
L=i=1∑Nlogt=1∏∣I(i)∣p(lt(i)∣I(i);θ) 为了提高STN的收敛速度,作者使用了图8的三种方式和书籍初始化的方式初始化基准点,其中(a)的收敛效果最好:
图8:基准点的几种初始化方式
1.4 基于词典的测试
在测试时一个最简答的策略就是在每个时间片都选择概率最高的作为输出。另外一种方式是根据字典构建一棵先验树来缩小字符的搜索范围。使用字典时有贪心搜索和beam search搜索两个思路,在实验中,作者选择了宽度为7的beam search。
总结
RARE的特点是将STN和TPS结合起来使STN理论上具有矫正任何形变的能力,创新性和技术性上都非常值得参考。但是结合了TPS的STN带来的效果提升并没有设想的那么好,实验结果可以参考论文中给出的几个图,原因可能是问题本身的复杂性。但是稍微的一些纠正效果总比没有强,毕竟STN带来的速度损失还是很小的。