天天看点

文本检测算法:CTPN1. 简单介绍2. CTPN4. 实验结果5. 结论

多种文本检测算法性能对比及算法介绍

(https://blog.csdn.net/qq_39707285/article/details/108754444)

Detecting Text in Natural Image with Connectionist Text Proposal Network

  • 1. 简单介绍
    • 1.1 关键点
    • 1.1 性能表现
  • 2. CTPN
    • 2.1 Detecting Text in Fine-scale Proposals
    • 3.2 文本候选框连接RNN
    • 3.3 精修边界
    • 3.4 损失函数
    • 3.5 训练细节
  • 4. 实验结果
    • 4.1 在Faster-RCNN中加入fine-scale
  • 5. 结论

CTPN于2016年发表于ECCV,该论文是文本检测算法中很经典的一个,是一种基于回归的算法,提出了固定定宽的anchor机制,使用CNN+RNN,能够准确的定位水平文本。

1. 简单介绍

1.1 关键点

  1. 把定位不同比例的文本简化成定位固定宽度的文本,提出垂直anchor机制
  2. 候选框后无缝连接RNN,端到端可训练

1.1 性能表现

  1. 区别于之前的bottom-up的算法,不需要多个后处理过滤层,能够检测多尺度、多语言的文本
  2. 在ICDAR-2013和ICDAR-2015上分别取得0.88和0.61的F-measure分数,当时表现最优

2. CTPN

这一部分,详细的讲解CTPN的设计细节,主要包括三个关键部分:

  1. 在fine-scale的候选框中检测文本
  2. 文本候选框加入循环神经网络
  3. 精修边界

2.1 Detecting Text in Fine-scale Proposals

先简单回顾一下目标检测,较早的目标检测算法通过使用滑动窗口,一个窗口只能对应一种尺度的目标,所以就需要使用不同尺度的滑动窗口来检测不同尺度的目标。在Faster-RCNN中提出了RPN网络,使用单尺度的窗口去识别不同尺度的目标,关键思路是,通过使用anchor机制,一个单一的anchor可以预测范围很广的尺度和宽高比的目标。

但是该方法直接用于文本检测却会出现很多问题,因为文本与一般目标检测相比有着本质上的区别,后者通常有一个定义良好的封闭边界和中心,甚至可以从它的一部分推断出整个对象,文本是一个没有明显封闭边界的序列,它可以包括笔划、字符、单词、文本行和文本区域等多个层次的组件,这些组件之间没有明显的区别。

文本检测是在单词或文本行级别定义的,因此,通过将其定义为单个对象,很容易进行错误的检测,所以直接预测文本行或者单词是困难的,也不现实,很难得到一个较好的准确率,就像图2中例子,简单实用RPN去检测文本,效果很差。

文本检测算法:CTPN1. 简单介绍2. CTPN4. 实验结果5. 结论

通过观察发现了文本的一个独特属性,改属性可以推广到任意的文本上。RPN很难准确的检测谁水平单词,是因为单词中的每个字符都是孤立的或分开的,很难找到一个词的开始和结束位置,显然,文本行是一个序列,它是文本和泛型对象之间的主要区别。将文本行视为一系列精细的文本提案,其中每个提案通常代表文本行的一小部分,例如16像素宽的文本片段,每个提议可以包括一个或多个笔画、一个字符的一部分、一个或多个字符等,通过确定、水平位置,仅预测每个提案的垂直位置会更准确,这与RPN预测4个目标坐标相比,CTPN只需要预测一个是否是文本的score和一个y轴方向的定位就可以了。

CTPN使用一个全卷积神经网络,输入图片尺寸可以任意大小,使用VGG16作为backbone。CTPN检测文本行通过在提取的特征图中滑动anchor,输出一系列固定规模的候选框(例如,固定16像素宽度)的文本候选框,如图1(b)所示。

文本检测算法:CTPN1. 简单介绍2. CTPN4. 实验结果5. 结论

CTPN中定义固定宽度为16像素(原始图片中的16像素)的文本提议框,在conv5上使用3×3卷积核,步长16像素,在conv5上就是1,然后设计k个垂直anchors,用来预测每个提议框的y坐标,这k个anchors,水平坐标相同,宽度都是16,有k个不同的高度。在以下的实验中,k设置为10,高度从11到273个像素(每次除以0.7),计算垂直坐标的公式如下:

文本检测算法:CTPN1. 简单介绍2. CTPN4. 实验结果5. 结论

v = { v c , v h } v=\{v_c,v_h\} v={vc​,vh​}表示预测的坐标, v ∗ = { v c ∗ , v h ∗ } v^*=\{v^*_c,v^*_h\} v∗={vc∗​,vh∗​}表示GT, c y a c^a_y cya​表示anchor的中心坐标, h a h^a ha表示anchor的高度。每一个预测文本候选框size为 h×16,如图1(b)中。

整体的检测处理流程总结如下:

  1. 给定一张图片,通过VGG16,得到conv5,特征图尺寸为 W × H × C W×H×C W×H×C
  2. 使用3×3的窗口在conv5上滑动,每个窗口通过 3 × 3 × C 3×3×C 3×3×C的卷积操作得到预测值。对于每一个预测,水平的位置和k个anchors的位置是固定的,它可以通过将conv5中的空间窗口位置映射到输入图像来预先计算。
  3. 输出的是text/non-text score和k个anchors的y轴坐标(v)
  4. 预测score大于0.7的候选框再通过NMS处理后输出

3.2 文本候选框连接RNN

为了提高定位准确率,把完整的行文本划分成立一连串固定宽度的小框,这样对整个网络预测来说是不鲁棒的,而且对于像文本的如 窗户,砖块,树叶等等,很容易导致假阳,一些检测例子如图3(top)所示。

文本检测算法:CTPN1. 简单介绍2. CTPN4. 实验结果5. 结论

文本具有很强的序列特征,其中有序的上下文信息是做出可靠决策的关键,所以利用文本的上下文信息很重要。为了能够使用到文本的上下文信息,并且可以无缝的连接CNN,于是RNN提供了一种自然而然的选择,可以使用其隐藏层对这些信息进行循环编码。为此,在conv5上设计一个RNN层,它以每个窗口的演化特征为顺序输入,在隐藏层Ht中循环更新其内部状态,其公式如下:

文本检测算法:CTPN1. 简单介绍2. CTPN4. 实验结果5. 结论

X t ⊆ R 3 × 3 × C X_t \subseteq R^{3×3×C} Xt​⊆R3×3×C是conv5特征图上第t个滑动窗口(共3×3个),滑动窗口从左至右以此滑过,每行产生 t = 1 , 2 , . . . , W t=1,2,...,W t=1,2,...,W的序列特征, W W W是conv5层的宽度, H t H_t Ht​是一种循环的内部状态,它由当前输入 ( X t ) (X_t) (Xt​)和 H t − 1 H_{t-1} Ht−1​中编码的先前状态共同计算得出。使用非线性函数ψ计算递归,该函数定义了递归模型的精确形式。

LSTM是专门为解决消失梯度问题而提出的,通过引入三个附加的乘法门:输入门、遗忘门和输出门。Bi-LSTM能够在两个方向上对循环上下文进行编码,从而接收字段能够覆盖整个图像宽度,所以最后使用双向LSTM。因此,RNN隐藏层的内部状态通过循环连接访问所有先前窗口扫描的顺序上下文信息。

H t H_t Ht​中的内部状态映射到下面的FC层和输出层,用于计算第t个建议的预测,这样就完美的在CNN后无缝加入了RNN,达到了端到端可训练的效果,而且没有额外的资源消耗,结果如图3所示,很明显,它大大减少了错误检测,同时检测出了许多包含非常弱文本信息的缺失文本建议。

3.3 精修边界

通过以上处理之后,再对输出的结果进行合并,合并流程如下:

  1. 对于每个候选框 B i B_i Bi​,定义一个邻居 B j B_j Bj​,写作 B j − > B i B_j->B_i Bj​−>Bi​,当满足:

    (1) B j B_j Bj​是 B i B_i Bi​水平方向距离最近的邻居;

    (2)它们之间的距离小于50个像素;

    (3)它们的垂直相交超过0.7

  2. 两个候选框组合成一对,即 B j − > B i B_j->B_i Bj​−>Bi​且 B i − > B j B_i->B_j Bi​−>Bj​

    然后通过顺序连接具有相同候选对来构造文本行。

通过固定宽度的检测方法连接RNN,在垂直方向的定位非常准确,但在水平方向上可能会出现一些问题,例如,当水平两侧的文本建议没有被GT文本线区域完全覆盖,或者一些侧边候选框被丢弃(例如,具有低文本分数),如图4所示,这些情况在通用目标检测中可能不太重要,但在文本检测中影响很大。

为了解决这个问题,提出了side-refinement的方法,能够准确的算出每个anchor/proposal在水平两侧的偏移量,类似于预测y方向坐标,定义偏移量如下:

文本检测算法:CTPN1. 简单介绍2. CTPN4. 实验结果5. 结论

x s i d e x_{side} xside​是当前anchor最近水平侧的预测x坐标(例如左侧或右侧), x s i d e ∗ x^*_{side} xside∗​是GT,根据GT bounding box和anchor的位置可以计算出来, c x a c^a_x cxa​是anchor的水平方向中心, w x a w^a_x wxa​是anchor的宽度,是固定的,等于16。当将一系列检测到的精细文本建议连接到一条文本行中时,两侧候选框被定义为开始和结束候选,只使用两侧的候选框,使用side-refinement后的提升效果如图4所示,该方法大概提升2%左右的性能。

3.4 损失函数

CTPN共三个输出:

  1. text/non-text scores
  2. 垂直坐标 v = { v c , v h } v=\{v_c,v_h\} v={vc​,vh​}
  3. side-refinement偏移量 o o o

分别用 L s c l L^{cl}_s Lscl​、 L v r e L^{re}_v Lvre​、 L o r e L^{re}_o Lore​代表各自的loss,合在一起计算方式如下:

文本检测算法:CTPN1. 简单介绍2. CTPN4. 实验结果5. 结论

每个anchor都是一个训练样本, i i i是mini-batch中anchor的索引, s i s_i si​是第i个anchor预测为文本的概率, s i ∗ = { 0 , 1 } s^*_i=\{0,1\} si∗​={0,1}代表GT, j j j代表有效的anchor索引,有效anchor指的是为: s j ∗ = 1 s^*_j=1 sj∗​=1或者与GT的IoU>0.5。

v j v_j vj​和 v j ∗ v^*_j vj∗​分别指的是y方向上预测的坐标和GT。

k k k是side-anchor的索引,side-anchor指的是距GT边界框的左侧或右侧的水平距离(例如,32像素)内的一组anchors。 o k o_k ok​和 o k ∗ o^*_k ok∗​分别指的是与第k个anchor相关的x轴上的预测和GT偏移量。

L s c l L^{cl}_s Lscl​使用softmax loss去区分text/non-text, L v r e L^{re}_v Lvre​和 L o r e L^{re}_o Lore​回归loss使用smooth L1去计算。

λ 1 \lambda_1 λ1​和 λ 2 \lambda_2 λ2​用来平衡loss,设置为1.0和2.0。 N s N_s Ns​、 N v N_v Nv​和 N o N_o No​是标准化参数,分别代表 L s c l L^{cl}_s Lscl​、 L v r e L^{re}_v Lvre​和 L o r e L^{re}_o Lore​中使用的anchors总数量。

3.5 训练细节

pass

4. 实验结果

4.1 在Faster-RCNN中加入fine-scale

文本检测算法:CTPN1. 简单介绍2. CTPN4. 实验结果5. 结论
文本检测算法:CTPN1. 简单介绍2. CTPN4. 实验结果5. 结论

5. 结论

CTPN直接在卷积图中检测到一系列精细文本建议中的文本行。设计了垂直anchor机制,联合预测每个提案的精确位置和文本/非文本分数,这是实现文本精确定位的关键。提出了一个网络RNN层,它完美地连接了连续的文本建议,允许它探索有意义的上下文信息。在这些技术上不太强大的检测能力,具有很强的检测能力。CTPN通过在五个基准上实现最先进的性能,每张图像0.14s的运行时间。

继续阅读