【计算机视觉】CTPN算法

CTPN的网络结构(图1):

【计算机视觉】CTPN算法

  • 问题

(1这一个格子变成了一条,5这个格子变成了一条(竖着的那个绿))

【计算机视觉】CTPN算法

【计算机视觉】CTPN算法

要明白三个问题(我应该还有更多要明白的????)

首先,CTPN中为何使用LSTM?

CNN学习的是感受野内的空间信息,LSTM学习的是序列特征。对于文本序列检测,显然既需要CNN抽象空间特征,也需要序列特征(毕竟文字是连续的)。

双向LSTM,当前状态,不仅可以获取之前的信息,也可以获取之后所发生的信息。

如何通过"FC"卷积层输出产生图1-b中的Text proposals?

【计算机视觉】CTPN算法

CTPN通过CNN和BiLSTM学到一组“空间 + 序列”特征后,在"FC"卷积层(全卷积)后接入RPN网络。这里的RPN与Faster R-CNN类似,分为两个分支:(回归+分类)

  1. 左边分支用于bounding box regression。由于fc feature map每个点配备了10个Anchor,同时只回归中心y坐标与高度2个值,所以rpn_bboxp_red有20个channels;
  2. 右边分支用于Softmax分类Anchor;

具体RPN网络与Faster R-CNN完全一样,所以不再介绍,只分析不同之处。

竖直Anchor定位文字位置

由于CTPN针对的是横向排列的文字检测,所以其采用了一组(10个)等宽度的Anchors,用于定位文字位置。Anchor宽高为:

【计算机视觉】CTPN算法

同时fc与conv5 width和height都相等。

如图所示,CTPN为fc feature map每一个点都配备10个上述Anchors。

【计算机视觉】CTPN算法

这样设置Anchors是为了:

  1. 保证在 【计算机视觉】CTPN算法 方向上,Anchor覆盖原图每个点且不相互重叠。(w:160)
  2. 不同文本在 【计算机视觉】CTPN算法 方向上高度差距很大,所以设置Anchors高度为11-283,用于覆盖不同高度的文本目标。

获得Anchor后,与Faster R-CNN类似,CTPN会做如下处理:

  1. Softmax判断Anchor中是否包含文本,即选出Softmax score大的正Anchor
  2. Bounding box regression修正包含文本的Anchor的中心y坐标高度

注意,与Faster R-CNN不同的是,这里Bounding box regression不修正Anchor中心x坐标和宽度。具体回归方式如下:

【计算机视觉】CTPN算法

【计算机视觉】CTPN算法

Anchor经过上述Softmax和 【计算机视觉】CTPN算法 方向bounding box regeression处理后,会获得图Text proposal所示的一组竖直条状text proposal。后续只需要将这些text proposal用文本线构造算法连接在一起即可获得文本位置。

【计算机视觉】CTPN算法

               Text proposal

在论文中,作者也给出了直接使用Faster R-CNN RPN生成普通proposal与CTPN LSTM+竖直Anchor生成text proposal的对比,如图,明显可以看到CTPN这种方法更适合文字检测。

【计算机视觉】CTPN算法

文本线构造算法????

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

【计算机视觉】CTPN算法

为了说明问题,假设某张图有上图所示的2个text proposal,即蓝色和红色2组Anchor,CTPN采用如下算法构造文本线:

【计算机视觉】CTPN算法

下面详细解释。假设每个Anchor index如绿色数字,同时每个Anchor Softmax score如黑色数字。

【计算机视觉】CTPN算法

举例????构造文本线(重要!)

【计算机视觉】CTPN算法

举例说明,如图10,Anchor已经按照 【计算机视觉】CTPN算法 顺序排列好,并具有图中的Softmax score(这里的score是随便给出的,只用于说明文本线构造算法):

【计算机视觉】CTPN算法

这样就通过Text proposals确定了文本检测框。

训练

【计算机视觉】CTPN算法

总结

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

嘻嘻下周上班就要实际场景应用了,希望顺利吧~!


参考:

场景文字检测—CTPN原理与实现 - 白裳的文章  

后序:

CTPN项目部分代码学习

文本检测之CTPN