CTPN算法简单解析

前言

今天讲的是CTPN,Detecting Text in Natural Image with Connectionist Text Proposal Network同样无论别人怎么写,我们讲原理力求简单,用最low的话,讲最复杂的原理(吹个牛,别介意),可能讲的并不是那么好但是一定更倾向于我们这儿样的小白。话不多说,开整。

算法初识

1》算法能干什么?
答:识别文本啊,你看他那个名字,就是场景文本检测呗。

2》算法有什么优缺点?
答:优点:加入了双向LSTM,文本检测效果好,由于使用文本线构造算法,理论上可以识别一些不完全规则的矩形框。缺点:不可以像EAST一样精确检测倾斜文本框(可以不精确,并非不能)。

3》理解这个算法需要了解Faster RCNN吗?
答:原则上CTPN脱胎于Faster RCNN有点基础最好,但是咱说过面对小白要是了解了还叫啥小白。所以无需顾虑,干就完了。

算法框架

在这里插入图片描述
在开讲主体结构之前我们先讲CTPN的两个核心思想:Anchor和文本线构造算法
Anchor:这个概念来源与Faster RCNN,简单地说就是预先选好的文本框,他的思想是预先选出所有可能的文本框(每个像素点都配备一定数量的Anchor,然后筛选出一部分),然后选出和真值框差距最小进行修正。这种思想类似于穷举法,但是CTPN对Anchor做了些许改动,CTPN限制了Anchor的宽度16(为什么是16后面会讲),然后只取他的中心坐标和高度,而Faster RCNN则需要左上和右下角点坐标。
文本线构造算法:前面说了CTPN对Anchor做出了改变为什么呢?这就要说CTPN的另外一个思想了,我喜欢称他为:微分法,如上图中b部分所示,CTPN的思想中并不直接画出文本框而是利用一种类似微分的思想,先画出多个小文本框,然后利用文本线构造法画出大的文本框。
好了介绍完核心思想我们开始介绍完整结构。

a部分

首先我们做个小假设,假设有N张图片,输入网络中,第一步我们就要送入VGG16网络中进行特征提取。输出大小为NxCxHxW。此处我们把获得结果称为conv5 feature map。
然后在conv5 feature map上做3x3滑动窗口,让NxCxHxW变为Nx9CxHxW,其中具体过程如下图,作用是融合附近区域特征,提升鲁棒性。
在这里插入图片描述
然后我们将结果做一下Reshape:Nx9CxHxW变为(NH)xWx9C,然后送入双向LSTM,学习每一行的序列特征。这里停一下我们要说一下为什么要用双向LSTM。对于文本检测我么一般从两种特征:空间特征和序列特征(就是文字的连续性),空间特征cnn就解决了,至于序列特征那就要靠LSTM了,那么为什么用双向LSTM呢?有位前辈做了一个这样的解释:假设有这麽一句话:

我的手机坏了,我打算____一部新手机。

答案是:“买”,如果是单向的LSTM我们就只能看见我的手机坏了,我打算,那么这个填空不好填了,可能性太多,但如果是双向LSTM我们就可以看到整句话,就大大的提高填空的准确性。
然后输出为:(NH)xWx256再Reshape为Nx256xHxW。然后送入“FC”卷积层,变为Nx512xHxW。
下一步我们就要将输出结果送入RPN网络了首先让我们看一下RPN网络结构:
在这里插入图片描述
这里RPN网络有两支:
1》左边分支用于bounding box regression。由于fc feature map每个点配备了10个Anchor,同时只回归中心y坐标与高度2个值,所以rpn_bboxp_red有20个channels

2》右边分支用于Softmax分类Anchor(是否包含文本)
这里我们我们说一下为为什么Anchor的宽度是16,其实很简单,在经过VGG16后我们的特征尺寸缩小16倍,我们这样设置正好每一个像素点代表原像素的16个像素宽的信息。那么说完宽的以后每个像素点配备Anchor的高度:在CTPN中每个像素点(尺寸缩小后的)配备10个上述Anchors,高度为:

在这里插入图片描述
这样在配合文本线构造算法就可以覆盖大多数文本框情况,而且由于宽度和中心坐标已经确定了,就避免了文本框重复的情况,这样就不必要进行NMS筛选了。
然后最后输出三个返回值:分类结果,坐标偏差和输入输出权重(匪夷所思的东西,似乎有无对结果影响不大)。

b部分

文本线构造法:
在这里插入图片描述
文本线构造法就是将微分的Anchor连成一个整体文本框。在构造前我们要做两个准备:1为文本框编号,2获得文本框的分数,3计算文本框竖直方向的overlap。(注意这不是真的重合只是相对的,我们不看x坐标只看y坐标只要在y坐标上重合即认为重合)于是我们得到下图:

在这里插入图片描述
现在我们说一下构造规则:构造分正反两向。
正向寻找:
沿水平正方向,寻找和水平距离小于50的候选Anchor
从候选Anchor中,挑出与竖直方向 overlap>0.7的Anchor
挑出符合条件2中Softmax score最大的 Anchor

再反向寻找:
沿水平负方向,寻找和水平距离小于50的候选Anchor
从候选Anchor中,挑出与竖直方向 overlap>0.7的Anchor
挑出符合条件2中Softmax score最大的Anchor
然后我们就找到了Graph(0,3)和Graph(3,7),我们可以看到他俩的边界是重合的,那么我们把它连接到一起,这样就通过Text proposals确定了文本检测框。同理红色部分也可以这么构成,而且并不是标准的矩形框,所以CTPN可以在一定程度上预测倾斜矩形框。

损失函数

同样我们这块略讲:
在这里插入图片描述
明显可以看出,该Loss分为3个部分:
Anchor Softmax loss:该Loss用于监督学习每个Anchor中是否包含文本。
Anchor y coord regression loss:该Loss用于监督学习每个包含为本的Anchor的Bouding box regression y方向offset,类似于Smooth L1 loss。
Anchor x coord regression loss:该Loss用于监督学习每个包含文本的Anchor的Bouding box regression x方向offset,与y方向同理。前两个Loss存在的必要性很明确,但这个Loss有何作用作者没有解释(从训练和测试的实际效果看,作用不大)

总结

CTPN讲的差不多了,我们关注的是整体原理至于细节我相信大家可以在其他前辈的博客中很好学习,写这个就是为了大家能有个捷径去学习算法,不保证理解深刻但是树立整体框架是个不错选择,在这里向各位前辈致以诚挚敬意。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值