CTPN的网络结构(图1 )
fig.1:(a )体系结构连接网络(ctpn ) ) )。 wedenselyslidea 33 spatialwindowthroughthelastconvolutionalmaps (con V5 ) ofthevgg 16模型(27 ) )。 thesequentialwindowsineachrowarerecurrentlyconnectedbyabi-directionallstm [7], wheretheconvolutionalfeature (33c ) ofeachwindowisusedasinputofthe 256 dblstm (including two 128 dl stms ) ) ) ) y-connectedlayer,followed by the output layer, whichjointlypredictstext/non-text scores y-axiscoordinatesandside-refinementoffsetsofkanchors.(b ) thectpnoutputssequentialfixed-width fine-scaletextproposals.colorofeachboxindicatesthetext/non-text score.onlytheboxthed
整个检查分为六个步骤:首先,用VGG16的前五个conv stage (最多至con V5 )来获得feature map )3*3*C )。 第二,在conv5的feature map的各个位置上取得3*3*C的窗口特征。 这些特征被输入到用于预测其位置的第三方,RNN ) blstm中对应于各行中所有窗口的3*3*C特征(W*3*3*C ),以获得W*256输出第四,来获得RNN的W*256 第二个2k scores表示k个anchor的类别信息(是字符还是非字符)。 前2k vertical coordinate和第三个k side-refinement是恢复到k个anchor的位置信息。 2k vertical coordinate表示bounding box的高度和中心的y轴坐标,可以确定上下边界。 k个side-refinement表示边界盒的水平平移量。 请注意,我们只用三个参数表示回归的bounding box。 因为在这里,每个anchor的width为16,默认设置为不再变化。 (VGG16的conv5的stride为16 )。 返回的box,像Fig.1的红色细长矩形一样,宽度是一定的。 第六,使用简单的文本线构造算法,将分类后的文字的proposal (图Fig.1(b )中的细长矩形)合并到文本线上对全卷积FC进行理解)理解为什么将全连接层变换为卷积层变换为全卷积的两个二是向前传播更有效率。
问题(1这个方格成为一个,5个方格成为一个(竖着的那个绿) )
要理解三个问题()应该有更多的理解吗? ) )
由于time-step=W,hidden_units=128,bilstm,所以最后得到了256d。
首先,CTPN为什么要使用LSTM? CNN感受野内空间信息,LSTM学习序列特征。 显然,文本序列检测既需要CNN抽象空间的特征,也需要序列的特征。
双向LSTM不仅能取得现在的状态、以前的信息,还能取得之后发生的信息。
如何从“FC”卷积层的输出中生成图1-b中的文本属性?
CTPN通过CNN和BiLSTM学习了一系列“空间序列”特征后,在“FC”卷积层(全卷积)后接入RPN网络。 这里的RPN类似于Faster R-CNN,位于(回归+分类)
左边的分支用于bounding box regression。 fc feature map在每个点配备10个Anchor,同时只回归中心的y坐标和高度这2个值,所以rpn_bboxp_red有20个channels;右分支,Softmax分类Anchor 具体的RPN网络与Faster R-CNN完全相同,不做介绍,只分析不同之处。
竖直Anchor定位文字位置
由于CTPN以并排的文字检测为对象,为了确定文字的位置,采用了一组(10个)等宽的Anchors。 Anchor宽度的高度如下。
p> 同时fc与conv5 width和height都相等!!!如图所示,CTPN为fc feature map每一个点都配备10个上述Anchors。
这样设置Anchors是为了:
保证在 方向上,Anchor覆盖原图每个点且不相互重叠。(w:160)不同文本在 方向上高度差距很大,所以设置Anchors高度为11-283,用于覆盖不同高度的文本目标。获得Anchor后,与Faster R-CNN类似,CTPN会做如下处理:
Softmax判断Anchor中是否包含文本,即选出Softmax score大的正AnchorBounding box regression修正包含文本的Anchor的中心y坐标与高度。注意,与Faster R-CNN不同的是,这里Bounding box regression不修正Anchor中心x坐标和宽度。具体回归方式如下:
Anchor经过上述Softmax和 方向bounding box regeression处理后,会获得图Text proposal所示的一组竖直条状text proposal。后续只需要将这些text proposal用文本线构造算法连接在一起即可获得文本位置。
Text proposal
在论文中,作者也给出了直接使用Faster R-CNN RPN生成普通proposal与CTPN LSTM+竖直Anchor生成text proposal的对比,如图,明显可以看到CTPN这种方法更适合文字检测。
文本线构造算法?在上一个步骤中,已经获得了图Text proposal所示的一串或多串text proposal,接下来就要采用文本线构造办法,把这些text proposal连接成一个文本检测框。
为了说明问题,假设某张图有上图所示的2个text proposal,即蓝色和红色2组Anchor,CTPN采用如下算法构造文本线:
下面详细解释。假设每个Anchor index如绿色数字,同时每个Anchor Softmax score如黑色数字。
举例?构造文本线(重要!)举例说明,如图10,Anchor已经按照 顺序排列好,并具有图中的Softmax score(这里的score是随便给出的,只用于说明文本线构造算法):
这样就通过Text proposals确定了文本检测框。
训练 总结 由于加入LSTM,所以CTPN对水平文字检测效果超级好。因为Anchor设定的原因,CTPN只能检测横向分布的文字,小幅改进加入水平Anchor即可检测竖直文字。但是由于框架限定,对不规则倾斜文字检测效果非常一般。CTPN加入了双向LSTM学习文字的序列特征,有利于文字检测。但是引入LSTM后,在训练时很容易梯度爆炸,需要小心处理。嘻嘻下周上班就要实际场景应用了,希望顺利吧~!
参数含义:Anchor合并机制:
ctpn需要将每一个anchor回归的框进行合并,从而生成最终的文本框。
合并的主要原则,
(1)水平的最大连接距离为MAX_HORIZONTAL_GAP=50个像素
(2)垂直方向的一维IOU是否满足大于MIN_V_OVERLAPS=0.7比例(垂直方向)
(3)两个相邻的anchor的高度是否满足小于MIN_SIZE_SIM=0.7比例(水平方向)
然后基于上述的原则,首先从左往右扫描一遍,将满足条件的anchor合并,然后从右往左扫描一遍,将满足条件的anchor合并。
与真值IoU大于0.7的anchor作为正样本,与真值IoU最大的那个anchor也定义为正样本,这个时候不考虑IoU大小有没有到0.7,这样做有助于检测出小文本。(默认的anchor有很多,但是只要挑选出一定数量的正anchor,与gt的IoU重叠>0.7的anchor被称为正anchor)与真值IoU小于0.5的anchor定义为负样本。只保留score大于0.7的proposal,score阈值设置:0.7 (+NMS)使用了双向的LSTM,每个LSTM有128个隐层训练图片都将短边放缩到600像素# text_connector/text_connect_cfg.pyclass Config: MAX_HORIZONTAL_GAP = 50 TEXT_PROPOSALS_MIN_SCORE = 0.7 TEXT_PROPOSALS_NMS_THRESH = 0.2 MIN_V_OVERLAPS = 0.7 MIN_SIZE_SIM = 0.7 MIN_RATIO = 0.5 LINE_MIN_SCORE = 0.9 TEXT_PROPOSALS_WIDTH = 16 MIN_NUM_PROPOSALS = 2
参考:
场景文字检测—CTPN原理与实现 - 白裳的文章
论文阅读(Weilin Huang——【ECCV2016】Detecting Text in Natural Image with Connectionist Text Proposal Network)
后序:
CTPN项目部分代码学习
文本检测之CTPN
http://www.neurta.com/index.php/node/414
https://zhuanlan.zhihu.com/p/49588885?utm_source=wechat_session&utm_medium=social&utm_oi=604350244616540160
inception block 是为检测长文本提供更好的卷积感受野( inception block of three-scale convolutional kernels to give flexible receptive field better covering long text)。【from @RRD】
这里我记得有个1*2,2*1的卷积用来代替xxx,也是为了增大感受野吗?
主要修改:为代码添加依据验证集loss保存模型
Faster rcnn代码理解(1)
Faster rcnn代码理解(2)
Faster rcnn代码理解(3)
Faster rcnn代码理解(4)
场景文字检测技巧总结