文本检测算法CTPN

Detecting Text in Natural Image with Connectionist Text Proposal Network
OCR的第一步是文本检测,首先要定位文字的位置,即文字检测,CTPN是文本检测领域经典算法。
论文地址:https://arxiv.org/abs/1609.03605

CTPN是在ECCV 2016提出的一种文字检测算法。CTPN结合CNN与LSTM深度网络,能有效的检测出复杂场景的横向分布的文字,效果如图1,是目前比较好的文字检测算法。由于CTPN是从Faster RCNN改进而来,本文默认读者熟悉CNN原理和Faster RCNN网络结构。

主要创新点

  • 文本检测可以当层目标检测来做,Faster RCNN有效果,但是长宽比不好设定,文本长宽变化很大,不好检测,所以将将大的文本框切分为一系列宽度固定的小文本框进行检测,这样在检测过程中只需要对文本的高度进行先验性的设置anchor。
  • 作者认为文本具有时序性,即和阅读习惯一直,从左到右。因此作者加入RNN获取这种语义性。
  • 后处理算法:文本连接算法

标签构造

在这里插入图片描述
如上图所示,给定一个文本的标注框,这里为(x, y, w, h)。作者沿着水平方向进行切分,偏移为16个像素。这样就得到了一系列的文本小片。这里左右标记为红色的小片,作者将他们(落在左右两端50像素以内的小片)作为side refinement时候的标签,用来约束网络对文本起始和终止点的矫正。至于这里取偏移为16的原因,是因为conv5的stride为16,相当于feature map中的一个像素对应标签的16的宽度。当然,这里关于感受野,conv5中的感受野为228x228,因此文本行anchor的高度最大不能超过228,如果超出则网络不能很好的进行预测。

CTPN网络结构

在这里插入图片描述

CTPN与Faster RCNN对比
如上图所示,作图为RPN,右图为CTPN的网络结构。可以看到,CTPN本身就是RPN,唯一不同的是加入了双向LSTM获取时序方向的信息,使得模型可以序列性的预测文本的小片。当然这里的不同之处主要有以下几点

原始CTPN只检测横向排列的文字。CTPN结构与Faster R-CNN基本类似,但是加入了LSTM层。假设输入为B张图片

  • 首先VGG提取特征,获得大小为 BxCxHxW的conv5 feature map。
  • 之后在conv5上做 [公式] 的滑动窗口,即每个点都结合周围3x3区域特征获得一个长度为 [公式] 的特征向量。输出 Bx9CxHxW的feature map,该特征显然只有CNN学习到的空间特征。 注意这一步不是卷积,没有计算过程。
  • 再将这个feature map进行Reshape
    Nx9CxHxW ->(NH)xWx9C
  • 然后以 Batch=NH且最大时间长度 T m a x = W T_{max} = W Tmax=W 的数据流输入双向LSTM,学习每一行的序列特征。双向LSTM输出 [公式] ,再经Reshape恢复形状:
    R e s h a p e : N ∗ 9 C ∗ H ∗ W → ( N H ) ∗ W ∗ 9 C Reshape:N\ast 9C\ast H\ast W\rightarrow (NH)\ast W\ast 9C Reshape:N9CHW(NH)W9C
    该特征既包含空间特征,也包含了LSTM学习到的序列特征。
  • 然后经过“FC”卷积层,变为 [公式] 的特征
  • 最后经过类似Faster R-CNN的RPN网络,获得text proposals,如图2-b。

为何使用双向LSTM?

文本线构造算法

在上一个步骤中,已经获得了图7所示的一串或多串text proposal,接下来就要采用文本线构造办法,把这些text proposal连接成一个文本检测框。
图一三十三岁三十三岁三十三岁

图1
为了说明问题,假设某张图有图1所示的2个text proposal,即蓝色和红色2组Anchor,CTPN采用如下算法构造文本线: * 按照水平 [公式] 坐标排序Anchor * 按照规则依次计算每个Anchor [公式] 的 [公式] ,组成 [公式] * 通过 [公式] 建立一个Connect graph,最终获得文本检测框 * 下面详细解释。假设每个Anchor index如绿色数字,同时每个Anchor Softmax score如黑色数字。 文本线构造算法通过如下方式建立每个Anchor [公式] 的 [公式] : 正向寻找: * 沿水平正方向,寻找和 [公式] 水平距离小于50的候选Anchor * 从候选Anchor中,挑出与 [公式] 竖直方向 [公式] 的Anchor * 挑出符合条件2中Softmax score最大的 [公式]

再反向寻找:

  • 沿水平负方向,寻找和 [公式] 水平距离小于50的候选Anchor
  • 从候选Anchor中,挑出与 [公式] 竖直方向 [公式] 的Anchor
  • 挑出符合条件2中Softmax score最大的 [公式]

最后对比 [公式] 和 [公式] :
如果 [公式] ,则这是一个最长连接,那么设置 [公式]
如果 [公式] ,说明这不是一个最长的连接(即该连接肯定包含在另外一个更长的连接中)。

训练策略

由于作者没有给出CTPN原始训练代码,所以此处仅能根据论文分析。
在这里插入图片描述
明显可以看出,该Loss分为3个部分:

  • Anchor Softmax loss:该Loss用于监督学习每个Anchor中是否包含文本。 [公式] 表示是否是Groud truth。
  • Anchor y coord regression loss:该Loss用于监督学习每个包含为本的Anchor的Bouding box regression y方向offset,类似于Smooth L1 loss。其中 [公式] 是 [公式] 中判定为有文本的Anchor,或者与Groud truth vertical IoU>0.5。
  • Anchor x coord regression loss:该Loss用于监督学习每个包含文本的Anchor的Bouding box regression x方向offset,与y方向同理。前两个Loss存在的必要性很明确,
    说明一下,在Bounding box regression的训练过程中,其实只需要注意被判定成正的Anchor,不需要去关心杂乱的负Anchor。这与Faster R-CNN类似。

总结

  • 由于加入LSTM,所以CTPN对水平文字检测效果超级好。
  • 因为Anchor设定的原因,CTPN只能检测横向分布的文字,小幅改进加入水平Anchor即可检测竖直文字。但是由于框架限定,对不规则倾斜文字检测效果非常一般。
  • CTPN加入了双向LSTM学习文字的序列特征,有利于文字检测。但是引入LSTM后,在训练时很容易梯度爆炸,需要小心处理。

改进思路

CTPN中的双向LSTM过于笨重,因此我们需要思考如何替代它。发现有人使用conv1x7替代双向LSTM,实验可行。
CTPN的算法虽然是2016的算法,但是其针对水平长行的检测现在也是工业级的,算法鲁棒。而这个算法也是文字检测领域对RPN的应用之一。CTPN就讲解这么多,具体还需要阅读论文,阅读代码。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值