文本检测模型之CTPN

文本检测模型之CTPN

思路
  1. 将文本定位框拆分成一个个等宽(论文中为16)的小文本框,然后只需在y方向上做回归。这里仍然使用了rpn(可看faster rcnn),唯一不同的是这里得到的候选区域(region proposal )是一个等宽不等高的。这种小文本框也规避了网络感受野不足的问题。
  2. 使用了cnn+rnn的组合,这里加入rnn使得宽度方向上或者说水平方向上形成一种联系(长短时记忆),所以即使文字间距较大,也能将文本连起来。(对长文本尤其是字符间距过大的文本效果友好)
  3. 通过网络及一系列处理后得到等宽的小文本框,然后将小文本框根据一定规则合并成大文本框
  4. 由于设置成等宽小文本框,如果不对x方向进行回归,那么合并后的文本框边缘可能是不太精细的,所以论文中又提出了边界精修(Side-refinement),文中提到这里的x回归只用两侧的锚框来做,来修正边缘。回归方式与回归y一毛一样。
优缺点

优点:

  1. 对水平文本效果很好,比较鲁棒,通过改变后处理的锚框合并方式也可处理10度以内的倾斜文本
  2. 对长文本尤其是字距过大的长文本效果好。

缺陷:

  1. 对于角度较大的的文本,效果一字谓之曰:“炸”,尤其对于密集型倾斜文本。
  2. 有时侯会出现水平方向粘连问题,将两个你想分开的文本连在一起。
实现过程

论文中basenet用的是vgg16,整体的流程如图:
在这里插入图片描述
首先图片假设resize成了长1200,宽608,即 1200 ∗ 608 1200*608 1200608,经过vgg16卷积后,由于有4个stride为2 的pooling,那么在conv5后输出的map大小为 ( 1200 / 16 ) ∗ ( 608 / 16 ) = 75 ∗ 38 (1200/16)*(608/16)= 75*38 1200/16608/16=7538,然后接一个 3 ∗ 3 3*3 33的卷积,map大小依旧不变仍为 75 ∗ 38 75*38 7538,然后在进入rnn后在输出结果上用三个 1 ∗ 1 1*1 11的卷积分别输出2K个y方向的回归结果,2K个文本非文本的分类结果,K个的x方向上的回归结果,其中K为一个预测点上设置的anchor的个数,由于是在 75 ∗ 38 75*38 7538个点上回归,那么一共就有 75 ∗ 38 ∗ K 75*38*K 7538K个anchor,论文中K为10,那么就有 75 ∗ 38 ∗ 10 = 28500 75*38*10=28500 753810=28500个anchor,得到这些anchor后,就需要对这些anchor打上标签(文本与非文本即1和0)。

如何标定正负样本
标定正样本:

方式一:与gt(事先将标注好的框处理成定宽的小文本框,假设一个64*12的框可以得到4个 16 ∗ 12 16*12 1612的小文本框,这些小文本框就是gt)的交叠面积大于0.7的标记为正样本
方式二:与每个gt交叠最大的一个anchor标记为正样本(为啥还要用方式二,因为只用方式一,生成的anchor与gt的交叠面积万一很少有达到0.7的,导致正样本稀少,难以训练)

标定负样本:

与gt交叠面积小于0.3 的标记为负样本。

Loss函数

在这里插入图片描述
共分成三个,第一个监督文本与非文本分类,第二个回归y方向上的坐标,第三个回归x方向上的坐标用来修正边缘,其中带星为gt参数, λ 1 = 1 , λ 2 = 2 λ_1=1,λ_2=2 λ1=1,λ2=2

文本线构造算法

主要思想:每两个相近的proposal组成一个pair,合并不同的pair直到无法再合并为止(没有公共元素)
判断两个proposal,Bi和Bj组成pair的条件:

  1. Bj->Bi, 且Bi->Bj。(Bj->Bi表示Bj是Bi的最好邻居)
  2. Bj->Bi条件1:Bj是Bi的邻居中距离Bi最近的,且该距离小于50个像素
  3. Bj->Bi条件2:Bj和Bi的vertical overlap大于0.7
一些小细节
  1. k个anchor的设置如下:宽度都是16像素,高度从11~273像素变化(每次乘以1.4)
  2. 这里只回归y方向上的坐标,说是坐标其实是一组比较参数,计算方式:
    在这里插入图片描述

其中有星号的代表gt计算的参数,带a的代表anchor的参数
3. Side-refinement用来回归修正边缘的精确度,计算方式:
在这里插入图片描述

论文和代码

论文:https://arxiv.org/pdf/1609.03605.pdf
代码:tf版本,tf版本的ctpn
我根据这个tf版本改的pytorch版本,对pytorch感兴趣的可以看看,效果不错:我的pytorch_ctpn
部分结果如下:
@没加siderefinement加了siderefinement

在这里插入图片描述
在这里插入图片描述
上图中,第一幅图没加side refinement,第二幅图加了side refinement,加了之后文本框会收的更紧一些。

目前有个新思路,之后会有个ctpn的改进版本。

  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值