Deep TextSpotter

论文提出一个 end2end 的场景文字定位和识别网络,主要使用 YOLOv2 + RPN 检测文字区域,再使用 bilinear sampling 将文字区域变为高度一致的变长特征序列,最后利用 CNN + CTC 进行文字识别。

Architecture



Figure 1. Model overview


如 figure 1 所示,整个网络的处理流程分为四步:

  • Fully Convolutional Network:使用去掉全连接层的 YOLOv2 网络提取图片特征,大小为 $\frac{W}{32} \times \frac{H}{32} \times 1024$;
  • Region Proposals :和 RPN 网络类似,通过聚类选择 16 个不同大小和长宽比的 anchors,每个 anchor 需要额外预测旋转角度,产生 $\frac{W}{32} \times \frac{H}{32} \times 6k$ 个 boxes,后处理 NMS 则放在文字识别阶段,因为相近的分数 box 产生的文字可能不一样;
  • Bilinear Sampling:将 RoI 映射成高度一致的变长特征;
  • Text Recognition:将特征序列送入带 recurrent 卷积的 FCN 中,再接 CTC 识别字符串。

Bilinear Sampling

为什么不使用 Faster RCNN 中的 RoI pooling ?

  • RoI Pooling 的结果为固定长,不论 RoI 多大,最后都被固定成 $7 \times 7$ 的网格,而实际中文本框是变长的,固定网格可能导致文本被压缩或伸长,造成大的形变;
  • RoI Pooling 不能处理旋转或形变情况。

bilinear sampling 是一个以bilinear interpolation kernel为核的Spatial Transformer[2]。Spatial Transformer 是用来做特征变换的,包括扭曲、旋转、平移、尺度变换,它的特点是这个变换的参数不是固定的,而是根据每个样本学出来的。

Bilinear Sampling 映射公式如下:
$$
V^c_{x’,y’}= \sum^{w}_{x=1} \sum^{h}_{y=1} U^c_{x,y} k(x- \tau_x(x’)) k(y- \tau_y(y’))
$$
其中 $k(v)=\max(0,1-|v|)$ 是 bilinear sampling kernel, $\tau$ 学出来的坐标变换网络。

Personal Thoughts

文字识别阶段没有选择使用 LSTM, 而是选择 Recurrent 卷积,那么是不是用 TCN 网络进行改进呢?

Bilinear Sampling 和 Mask RCNN 中的 RoI Align 类似。

文章没有写清楚损失函数如何计算,旋转角度是如何利用的。

References

  • [1] [2017-ICCV] Deep TextSpotter: An End-to-End Trainable Scene Text Localization and Recognition Framework papercode
  • [2] Spatial Transformer Networks. paper
请作者吃酒!