CTPN论文简介 - 自然场景文本检测_自然场景中文本识别的难度有哪些

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

本文亮点

  1. 本文中利用RNN和CNN的无缝结合可以提高检测精度。CNN用来提取深度特征,RNN用来序列的特征识别(2类),二者无缝结合,用在检测上性能更好。

具体的说,作者的基本想法就是去预测文本的竖直方向上的位置,水平方向的位置不预测。因此作者提出了一个vertical anchor的方法。与faster rcnn中的anchor类似,但是不同的是,vertical anchor的宽度都是固定好的了,论文中的大小是16个像素。而高度则从11像素到273像素变化,总共10个anchor.

同时,对于水平的文本行,其中的每一个文本段之间都是有联系的,因此作者采用了CNN+RNN的一种网络结构,检测结果更加鲁棒。RNN和CNN的无缝结合可以提高检测精度。CNN用来提取深度特征,RNN用来序列的特征识别(2类),二者无缝结合,用在检测上性能更好。

  1. 网络结构为RPN,针对文字检测的特点做了一些修改,最重要的有两点
  • 一是改变了判断正负样本的方法,不同于物体检测,文字检测中proposal如果只框住了一行文字中的几个文字其实也算正样本,而用IOU计算的话会被当成负样本,所以判断正负样本只需要计算proposal与ground truth高度的overlap就可以了。
  • 第二点是anchor的选取,既然我们判断正负样本的时候不考虑宽度,自然选anchor的时候也不用选择不同宽度的了,只需要固定宽度然后根据具体任务选择几个合适的高度就可以了。其他地方和RPN基本一样。

检测过程

整个检测分六步:

  • 第一,首先,使用VGG16作为base net提取特征,得到conv5_3的特征作为feature map,大小是W×H×C;
  • 第二,然后在这个feature map上做滑窗,窗口大小是3×3。也就是每个窗口都能得到一个长度为3×3×C的特征向量。这个特征向量将用来预测和10个anchor之间的偏移距离,也就是说每一个窗口中心都会预测出10个text propsoal。
  • 第三,将每一行的所有窗口对应的3 * 3 * C的特征(W * 3 * 3 * C)输入到RNN(BLSTM)中,得到W * 256的输出;
  • 第四,将RNN的W * 256输入到512维的fc层;
  • 第五,fc层特征输入到三个分类或者回归层中。
    第二个2k scores 表示的是k个anchor的类别信息(是字符或不是字符)。第一个2k vertical coordinate和第三个k side-refinement是用来回归k个anchor的位置信息。2k vertical coordinate因为一个anchor用的是中心位置的高(y坐标)和矩形框的高度两个值表示的,所以一个用2k个输出。(注意这里输出的是相对anchor的偏移),k个side-refinement这部分主要是用来精修文本行的两个端点的,表示的是每个proposal的水平平移量。这边注意,只用了3个参数表示回归的bounding box,因为这里默认了每个anchor的width是16,且不再变化(VGG16的conv5的stride是16)。回归出来的box如Fig.1中那些红色的细长矩形,它们的宽度是一定的。这是会得到密集预测的text proposal,所以会使用一个标准的非极大值抑制算法来滤除多余的box。
  • 第六,用简单的文本线构造算法,把分类得到的文字的proposal(图Fig.1(b)中的细长的矩形)合并成文本线。

在这里插入图片描述

方法细节

  1. Detecting Text in Fine-scale proposals
  • k个anchor尺度和长宽比设置:宽度都是16,k = 10,高度从11~273(每次除于0.7)
  • 回归的高度和bounding box的中心的y坐标如下,带*的表示是groundTruth,带a的表示是anchor

v

c

=

(

c

y

c

y

a

)

/

h

a

,

v

h

=

log

(

h

/

h

a

)

v_{c}=\left(c_{y}-c_{y}^{a}\right) / h^{a}, \qquad v_{h}=\log \left(h / h^{a}\right)

vc​=(cy​−cya​)/ha,vh​=log(h/ha)

v

c

=

(

c

y

c

y

a

)

/

h

a

,

v

h

=

log

(

h

/

h

a

)

v_{c}{*}=\left(c_{y}{*}-c_{y}^{a}\right) / h^{a}, \qquad v_{h}^{*}=\log \left(h^{*} / h^{a}\right)

vc∗​=(cy∗​−cya​)/ha,vh∗​=log(h∗/ha)

  • score阈值设置:0.7 (+NMS)
  • 一般的RPN和采用本文的方法检测出的效果对比
    在这里插入图片描述
  1. Recurrent Connectionist Text Proposals
  • RNN类型:BLSTM(双向LSTM),每个LSTM有128个隐含层
  • RNN输入:每个滑动窗口的33C的特征(可以拉成一列),同一行的窗口的特征形成一个序列
  • RNN输出:每个窗口对应256维特征
  • 使用RNN和不适用RNN的效果对比,CTPN是本文的方法(Connectionist Text Proposal Network)
    在这里插入图片描述
  1. Side-refinement
  • 文本线构造算法(多个细长的proposal合并成一条文本线)

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

  • 判断两个proposal,Bi和Bj组成pair的条件:

    • Bj->Bi, 且Bi->Bj。(Bj->Bi表示Bj是Bi的最好邻居)
    • Bj->Bi条件1:Bj是Bi的邻居中距离Bi最近的,且该距离小于50个像素
    • Bj->Bi条件2:Bj和Bi的vertical overlap大于0.7
  • 固定要regression的box的宽度和水平位置会导致predict的box的水平位置不准确,所以作者引入了side-refinement,用于水平位置的regression。

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

sion。

[外链图片转存中…(img-yUOQoRUW-1715738649872)]
[外链图片转存中…(img-yyzSZjDH-1715738649873)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值