深度学习
  • 前言
  • 第一章:经典网络
    • ImageNet Classification with Deep Convolutional Neural Network
    • Very Deep Convolutional Networks for Large-Scale Image Recognition
    • Going Deeper with Convolutions
    • Deep Residual Learning for Image Recognition
    • PolyNet: A Pursuit of Structural Diversity in Very Deep Networks
    • Squeeze-and-Excitation Networks
    • Densely Connected Convolutional Networks
    • SQUEEZENET: ALEXNET-LEVEL ACCURACY WITH 50X FEWER PARAMETERS AND <0.5MB MODEL SIZE
    • MobileNet v1 and MobileNet v2
    • Xception: Deep Learning with Depthwise Separable Convolutions
    • Aggregated Residual Transformations for Deep Neural Networks
    • ShuffleNet v1 and ShuffleNet v2
    • CondenseNet: An Efficient DenseNet using Learned Group Convolution
    • Neural Architecture Search with Reinforecement Learning
    • Learning Transferable Architectures for Scalable Image Recognition
    • Progressive Neural Architecture Search
    • Regularized Evolution for Image Classifier Architecture Search
    • 实例解析:12306验证码破解
  • 第二章:自然语言处理
    • Recurrent Neural Network based Language Model
    • Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation
    • Neural Machine Translation by Jointly Learning to Align and Translate
    • Hierarchical Attention Networks for Document Classification
    • Connectionist Temporal Classification : Labelling Unsegmented Sequence Data with Recurrent Neural Ne
    • About Long Short Term Memory
    • Attention Is All you Need
    • BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
  • 第三章:语音识别
    • Speech Recognition with Deep Recurrent Neural Network
  • 第四章:物体检测
    • Rich feature hierarchies for accurate object detection and semantic segmentation
    • Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
    • Fast R-CNN
    • Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
    • R-FCN: Object Detection via Region-based Fully Convolutuional Networks
    • Mask R-CNN
    • You Only Look Once: Unified, Real-Time Object Detection
    • SSD: Single Shot MultiBox Detector
    • YOLO9000: Better, Faster, Stronger
    • Focal Loss for Dense Object Detection
    • YOLOv3: An Incremental Improvement
    • Learning to Segment Every Thing
    • SNIPER: Efficient Multi-Scale Training
  • 第五章:光学字符识别
    • 场景文字检测
      • DeepText: A Unified Framework for Text Proposal Generation and Text Detection in Natural Images
      • Detecting Text in Natural Image with Connectionist Text Proposal Network
      • Scene Text Detection via Holistic, Multi-Channel Prediction
      • Arbitrary-Oriented Scene Text Detection via Rotation Proposals
      • PixelLink: Detecting Scene Text via Instance Segmentation
    • 文字识别
      • Spatial Transform Networks
      • Robust Scene Text Recognition with Automatic Rectification
      • Bidirectional Scene Text Recognition with a Single Decoder
      • multi-task learning for text recognition with joint CTC-attention
    • 端到端文字检测与识别
      • Reading Text in the Wild with Convolutional Neural Networks
      • Deep TextSpotter: An End-to-End Trainable Scene Text Localization and Recognition Framework
    • 实例解析:字符验证码破解
    • 二维信息识别
      • 基于Seq2Seq的公式识别引擎
      • Show and Tell: A Neural Image Caption Generator
      • Show, Attend and Tell: Neural Image Caption Generation with Visual Attention
  • 第六章:语义分割
    • U-Net: Convolutional Networks for Biomedical Image Segmentation
  • 第七章:人脸识别
    • 人脸检测
      • DenseBox: Unifying Landmark Localization with End to End Object Detection
      • UnitBox: An Advanced Object Detection Network
  • 第八章:网络优化
    • Batch Normalization
    • Layer Normalization
    • Weight Normalization
    • Instance Normalization
    • Group Normalization
    • Switchable Normalization
  • 第九章:生成对抗网络
    • Generative Adversarial Nets
  • 其它应用
    • Holistically-Nested Edge Detection
    • Image Style Transfer Using Convolutional Nerual Networks
    • Background Matting: The World is Your Green Screen
  • Tags
  • References
由 GitBook 提供支持
在本页
  • 前言
  • 1. RARE详解
  • 1.1 Spatial Transformer Network
  • 1.1.2 Grid Generator
  • 1.1.3 Sampler
  • 1.2 Sequence Recognition Network
  • 1.2.1 编码器(Encoder)
  • 1.2.2 解码器(Decoder)
  • 1.3 训练
  • 1.4 基于词典的测试
  • 总结

这有帮助吗?

  1. 第五章:光学字符识别
  2. 文字识别

Robust Scene Text Recognition with Automatic Rectification

上一页Spatial Transform Networks下一页Bidirectional Scene Text Recognition with a Single Decoder

最后更新于4年前

这有帮助吗?

tags: RARE, OCR, STN, TPS, Attention

前言

RARE实现了对不规则文本的end-to-end的识别,算法包括两部分:

  1. 基于的不规则文本区域的矫正:与STN不同的是,RARE在Localisation部分预测的并不是仿射变换矩阵,而是K个TPS(Thin Plate Spines)的基准点,其中TPS基于样条(spines)的数据插值和平滑技术,在1.1节中会详细介绍其在RARE中的计算过程。

  2. 基于SRN的文字识别:SRN(Sequence Recognition Network)是基于 的序列模型,包括有CNN和构成的编码(Encoder)模块和基于Attention和的解码(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部分:

  1. Grid Generator:基于基准点进行TPS变换,生成输出Feature Map的采样窗格(Grid);

  2. Sampler:每个Grid执行双线性插值。

STN的算法流程如图3。

图3:RARE中的STN

1.1.1 localization network

图4: Localization network的结构,其中所有卷积的,所有

1.1.2 Grid Generator

图5:TPS中的转换关系

1.1.3 Sampler

RARE中的STN和原始版本的STN都是一个可微分的模型,这也就意味着RARE也是一个可端到端训练的模型。不同点在于RARE将仿射变换矩阵变成了TPS,从而使模型有拥有矫正任何变换的能力,包括但不仅限于仿射变换,图2右侧部分是RARE的STN得到的实验结果。

1.2 Sequence Recognition Network

图6:SRN框架图

1.2.1 编码器(Encoder)

图7:SRN Encoder网络结果即输出Feature Map的尺寸

注意此处论文中有点没有说明,通过和作者的讨论得知,最后两层只对高度进行降采样,因此才有了7中的结构。

1.2.2 解码器(Decoder)

RARE的输出向量有37个节点,包括26个字母+10个数字+1个终止符,输出层使用softmax做激活函数,每个时间片预测一个值:

1.3 训练

RARE是一个端到端训练的模型,我们不需要STN专门的标签也可以训练它,所以损失函数仅是一个简单的log极大似然:

为了提高STN的收敛速度,作者使用了图8的三种方式和书籍初始化的方式初始化基准点,其中(a)的收敛效果最好:

图8:基准点的几种初始化方式

1.4 基于词典的测试

总结

RARE的特点是将STN和TPS结合起来使STN理论上具有矫正任何形变的能力,创新性和技术性上都非常值得参考。但是结合了TPS的STN带来的效果提升并没有设想的那么好,实验结果可以参考论文中给出的几个图,原因可能是问题本身的复杂性。但是稍微的一些纠正效果总比没有强,毕竟STN带来的速度损失还是很小的。

localization network: 预测TPS矫正所需要的KKK个基准点(fiducial point);

Localization network是一个有卷积层,池化层和全连接构成的卷积网络(图4)。由于一个点由(x,y)(x,y)(x,y)定义,所以一个要预测KKK个基准点的卷积网络需要由2K2K2K个输出。为了将基准点的范围控制到[−1,1][-1,1][−1,1],输出层使用tanhtanhtanh作为激活函数,在论文的实验部分给出K=20K=20K=20。如图2和图3所示的绿色'+'即为Localization network预测的基准点。

得到网络的输出后,其被reshape成一个2×K2\times K2×K的矩阵C\mathbf{C}C,即C=[c1,c2,...,cK]∈R2×K\mathbf{C} = [\mathbf{c}_1, \mathbf{c}_2, ..., \mathbf{c}_K] \in \mathfrak{R}^{2\times K}C=[c1​,c2​,...,cK​]∈R2×K。

如图4所示,RARE的输入图片的尺寸是100×32100\times32100×32,在RARE的实现中,STN的输出层的Feature Map的尺寸同样使用了100×32100\times32100×32的大小。

当给定了输出Feature Map的时候,我们可以再其顶边和底边分别均匀的生成KKK个点,如图5,这些点便被叫做基-基准点(base fiducial point),表示为C′=[c′1,c′2,...,c′K]∈R2×K\mathbf{C'} = [\mathbf{c'}_1, \mathbf{c'}_2, ..., \mathbf{c'}_K] \in \mathfrak{R}^{2\times K}C′=[c′1​,c′2​,...,c′K​]∈R2×K,在RARE的STN中,输出的Feature Map的尺寸是固定的,所以C′\mathbf{C'}C′为一个常量。

那么,1.1.2节要介绍的Grid Generator的作用就是如何利用CCC和C′C'C′,将图5中的图像III和图5中的图像I′I'I′的转换关系TTT。

当从localization network得到基准点C\mathbf{C}C和固定基-基准点C′\mathbf{C}'C′后,转换矩阵T∈R2×(K+3)T\in\mathfrak{R}^{2\times(K+3)}T∈R2×(K+3)的值已经可以确定:

T=(ΔC′−1[CT03×2])T\mathbf{T} = \left(\Delta^{-1}_{\mathbf{C}'} \left[ \begin{matrix} \mathbf{C}^T \\ \mathbf{0}^{3\times2} \end{matrix} \right] \right)^TT=(ΔC′−1​[CT03×2​])T

其中ΔC′∈R(K+3)×K+3\Delta_{\mathbf{C}'} \in \mathfrak{R}^{(K+3)\times{K+3}}ΔC′​∈R(K+3)×K+3是一个只由C′\mathbf{C}'C′计算得到的矩阵:

ΔC′=[1K×1C′TR0011×K00C′]\Delta_{C'} = \left[ \begin{matrix} \mathbf{1}^{K\times1} & \mathbf{C'}^{T} & \mathbf{R} \\ \mathbf{0} & \mathbf{0} & \mathbf{1}^{1\times K} \\ \mathbf{0} & \mathbf{0} & \mathbf{C}' \end{matrix} \right]ΔC′​=​1K×100​C′T00​R11×KC′​​

其中1K×1\mathbf{1}^{K\times1}1K×1是一个K×1K\times1K×1的值全是111的行向量,11×K\mathbf{1}^{1\times K}11×K同理。R∈RK×K\mathbf{R}\in \mathfrak{R}^{K\times K}R∈RK×K是一个由ri,jr_{i,j}ri,j​组成的K×KK\times KK×K的矩阵。其中

ri,j=di,j2ln(di,j2)r_{i,j} = d^2_{i,j}ln(d^2_{i,j})ri,j​=di,j2​ln(di,j2​)
di,j=euclidean(ci′,cj′)d_{i,j} = euclidean(c'_i, c'_j)di,j​=euclidean(ci′​,cj′​)

上式中euclidean(a,b)euclidean(a,b)euclidean(a,b)表示a,ba,ba,b两点之间的欧式距离。

由此可见,仅仅使用CCC和C′C'C′我们便可以得到转换矩阵T\mathbf{T}T。那么对于STN这个反向插值的算法来说,对于矫正图片中I′={pi′}i=1,2,...,NI' = \{\mathbf{p'_i}\}_{i=1,2,...,N}I′={pi′​}i=1,2,...,N​(N=W×HN = W\times HN=W×H, 即输出图像的像素点的个数)的任意一点pi′=[xi′,yi′]T\mathbf{p}'_i = [x'_i, y'_i]^Tpi′​=[xi′​,yi′​]T,我们怎样才能找到其在原图III中对应的点pi=[xi,yi]T\mathbf{p}_i = [x_i, y_i]^Tpi​=[xi​,yi​]T呢?这就需要用到我们上面得到的T\mathbf{T}T了。

ri,k′=di,k2ln(di,k2)r'_{i,k} = d^2_{i,k} ln(d^2_{i,k})ri,k′​=di,k2​ln(di,k2​)
p^i′=[1,xi′,yi′,ri,1′,ri,2′,...,ri,3′]\hat{\mathbf{p}}'_i = [1, x'_i, y'_i, r'_{i,1}, r'_{i,2}, ..., r'_{i,3}]p^​i′​=[1,xi′​,yi′​,ri,1′​,ri,2′​,...,ri,3′​]
pi=Tp^i′\mathbf{p}_i = \mathbf{T}\hat{\mathbf{p}}'_ipi​=Tp^​i′​

其中di,k2d^2_{i,k}di,k2​表示第iii个像素点pi′\mathbf{p}'_ipi′​和第kkk个基准点ck′c'_kck′​之间的欧式距离。

在1.1.2节中,我们得到了输出Feature Map上一点pi′=[xi′,yi′]T\mathbf{p}'_i = [x'_i, y'_i]^Tpi′​=[xi′​,yi′​]T对应的输入Feature Map上像素点的坐标pi=[xi,yi]T\mathbf{p}_i = [x_i, y_i]^Tpi​=[xi​,yi​]T的对应关系。在RARE中,使用了双线西插值得到了输出Feature Map在[xi′,yi′][x'_i, y'_i][xi′​,yi′​]上的值。

如图1的后半部分所示,RARE的SRN的输入是1.1节得到的校正后的图片,输出则是识别的字符串。SRN是一个基于Attention的序列到序列(Seq-to-Seq)的模型,包含编码器(Encoder)和解码器(Decoder)两部分,编码器用于将输入图像I′I'I′编码成特征向量h\mathbf{h}h,解码器则负责将特征向量h\mathbf{h}h解码成字符串y^\hat{\mathbf{y}}y^​。SRN的机构基本遵循Bahdanau在[5]中的结构,RARE的SRN的结构如图6所示。

RARE的编码器非常简单由一个7层的CNN和一个两层的双向LSTM组成。g根据论文中给出的结构,以及1.1节确定的STN的输出层的大小(100×32100\times32100×32), Encoder的结构如图7所示。

在卷积层之后,Encoder设置了两个双向LSTM,每个LSTM的隐层节点的数量都是256256256,计第ttt个时间片的输出特征为xt\mathbf{x}_txt​,第ttt个时间片的正向LSTM的隐层节点为htf\mathbf{h}^f_thtf​,反向LSTM的隐节点为htb\mathbf{h}^b_thtb​,f()f()f()表示一个LSTM节点,则正向和反向传播可分别表示为:

htf=f(xt,ht−1f)\mathbf{h}^f_t = f(\mathbf{x}_t, \mathbf{h}^f_{t-1})htf​=f(xt​,ht−1f​)
htb=f(xt,ht+1b)\mathbf{h}^b_t = f(\mathbf{x}_t, \mathbf{h}^b_{t+1})htb​=f(xt​,ht+1b​)

上式中的h0h_0h0​以及h7h_7h7​可以自己定义或者用默认的0值。 Encoder的输出是正反向两个隐层节点拼接起来,这样每个时间片的特征响亮的个数便是512:

h=[htf;htb]\mathbf{h} = [\mathbf{h}^f_t; \mathbf{h}^b_t]h=[htf​;htb​]

卷积之后Wconv=6W_{conv}=6Wconv​=6,Encoder的输出特征序列h\mathbf{h}h由所有时间片拼接而成,因此h=(h1,...,hL)∈R512×L\mathbf{h} = (\mathbf{h}_1, ..., \mathbf{h}_L) \in \mathfrak{R}^{512\times L}h=(h1​,...,hL​)∈R512×L,其中L=Wconv=6L=W_{conv}=6L=Wconv​=6。

Decoder是基于单向GRU的序列模型,其在第ttt个时间片的特征st\mathbf{s}_tst​表示为:

st=GRU(lt−1,gt,st−1)\mathbf{s}_t = \text{GRU}(l_{t-1}, \mathbf{g}_t, s_{t-1})st​=GRU(lt−1​,gt​,st−1​)

其中t=[1,2,...,T]t=[1,2,...,T]t=[1,2,...,T],TTT是输出标签的长度。

在训练时,lt−1l_{t-1}lt−1​是第ttt个时间片的标签,在测试时则是第ttt个时间片的预测结果。gt\mathbf{g}_tgt​是Attention的一个叫做glimpse的参数,从数学上理解是特征h\mathbf{h}h的各个时间片的特征的加权和:

gt=∑i=1Lαtihig_t = \sum_{i=1}^L \alpha_{ti}\mathbf{h}_igt​=i=1∑L​αti​hi​
αti=exp(tanh(si−1,ht))∑k=1Texp(tanh(si−1,hk))\alpha_{ti} = \frac{exp(tanh(s_{i-1}, \mathbf{h}_t))}{\sum_{k=1}^T exp(tanh(s_{i-1}, \mathbf{h}_k))}αti​=∑k=1T​exp(tanh(si−1​,hk​))exp(tanh(si−1​,ht​))​
y^t=softmax(WTst)\hat{\mathbf{y}}_t = \text{softmax}(\mathbf{W}^Ts_t)y^​t​=softmax(WTst​)
L=∑i=1Nlog∏t=1∣I(i)∣p(lt(i)∣I(i);θ)\mathcal{L} = \sum_{i=1}^N log \prod_{t=1}^{|\mathbf{I}^{(i)}|} p(l_t^{(i)}|I^{(i)};\mathbf{\theta})L=i=1∑N​logt=1∏∣I(i)∣​p(lt(i)​∣I(i);θ)

在测试时一个最简答的策略就是在每个时间片都选择概率最高的作为输出。另外一种方式是根据字典构建一棵先验树来缩小字符的搜索范围。使用字典时有贪心搜索和beam search搜索两个思路,在实验中,作者选择了宽度为777的beam search。

STN
Attention
LSTM
GRU