C/C++教程

OCR文本检测-RRPN

本文主要是介绍OCR文本检测-RRPN,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

RRPN,Rotation Region Proposal Networks,旋转区域候选框网络。通过其命名就可以看出,他是为了解决目标检测中的检测区域具有旋转角度的情况而产生的。其论文最初提出的应用场景,是为了解决自然场景下的文本检测问题而提出的,在自然场景中,由于视角的原因,获得图片中的文字常常都是带有旋转角度的,而之前的文字检测方法都是基于水平框的检测,如下图所示,

在这里插入图片描述

       在本文中,我们开发了一个基于旋转的方法和一个端到端的文本检测系统来进行任意方向的文本检测。特别地,方向被合并,以便检测系统能产生任意方向的建议。图1展示了以前的基于水平的方法和我们的方法之间的比较。提出了一种基于文本倾斜角信息的旋转区域建议网络(RRPN)。然后调整角度信息进行边框回归,使建议更准确地适合文本区域。提出了旋转感兴趣区域(RRoI)汇聚层,将任意方向的方案映射到特征图。最后,利用两层网络将区域划分为文本区域和背景区域。本文的主要贡献包括:

  • 与之前的基于分割的框架不同,我们的框架能够使用基于region proposal的方法来预测文本行的方向;因此,该方案能更好地拟合文本区域,并能方便地对文本区域进行校正,更便于文本阅读。新的组件,如RRoI池层和旋转建议,被纳入到基于region proposal的架构[20],这相比于基于分割的文本检测系统,确保了文本检测的计算效率。
  • 我们还提出了改进任意方向region proposal的新策略,以提高任意方向文本检测的性能。
  • 我们将我们的框架应用于三个真实的文本检测数据集,即MSRA-TD500 [21],ICDAR2013[22] 和 ICDAR2015[23],并发现,与以前的方法相比,它更准确,效率显著提高。

       本文的其余部分组织如下。第二部分介绍了场景文本检测的背景及相关工作。第三节简要描述了水平区域建议办法。第四部分详细讨论了我们的框架。在第五部分,我们展示了对三个数据集的定量研究。我们在第六节结束我们的工作。

本文的创新点如下
一级创新点2个:RRPN 框架及旋转建议框 | RROI Pooling层

2 相关工作

粗略看了下,这部分是对文本检测的一个笼统概述,讲的也不是很细致,有点东一榔头西一棒子的感觉,有需要的小伙伴可以自己扒原文看一下~ ~

3 水平区域建议

       我们首先简要回顾一下RPN[20]。如前一节所述,RPN能够进一步加速 proposals 的生成过程。使用VGG-16 [47]的部分作为共享层,水平区域建议通过在最后一层卷积层的 feature map上滑动生成。每个滑动窗口提取的特征被送入两个兄弟层(box-regression (reg)层和box-classification (cls)层,从reg层输出4k(4个坐标/建议)个坐标和从cls层输出2k(2个分数/建议)个分数。k为每个滑动窗口的锚点数。

       为了适应不同大小的物体,RPN使用两个参数来控制锚点的大小和形状,即比例尺和宽高比。比例尺决定锚的大小,而宽高比控制锚点框的宽高比。在[20]中,作者为一个通用对象检测任务设置比例为8、16和32,比例为1:1、1:2和2:1。这种锚选择策略可以覆盖几乎所有自然物体的形状,并保持提案总数较低。然而,在文本检测任务中,尤其是场景图像中,文本往往呈现出不同方向的非自然形状;RPN生成的水平提案对场景文本检测不具有鲁棒性。为了使网络具有更强的文本检测鲁棒性并保持其效率,我们认为有必要建立一个检测框架,将旋转信息与区域建议进行编码。

4 方法

       我们现在详细阐述了基于旋转的框架构建。架构如图2所示。我们在框架的前面使用了VGG-16[47]的卷积层,它由两个兄弟分支共享,即最后一个卷积层的特征映射的克隆和RRPN。RRPN为文本实例生成面向任意性的建议,并进一步对建议边界框进行回归,以更好地适应文本实例。从RRPN分支出来的同级层是RRPN的分类层(cls)和回归层(reg)。这两层的输出是来自cls的分数和来自reg的坐标信息,它们的Loss函数被计算和汇总,形成一个多任务损失函数。然后,通过将来自RRPN的任意方向的文本建议投射到特征图上,RRoI pooling层作为特征汇集层。最后,使用两个全连接层构成的分类器,将具有RRoI特征的区域分为文本和背景

在这里插入图片描述

总结

  1. 旋转边框表示用 (x, y, h, w, θ) 五元组表示;
  2. 旋转锚点框使用角度、比例尺和长宽比参数。角度为-π/6, 0, π/6, π/3, π/2, 2π/3,比例尺为8,16,32,长宽比为1:2、1:5和1:8。feature map上的每个点,生成 54 个 r-anchor;
  3. 在开始训练之前,先定义好正负锚点的标定规则:
    1) 如果锚点对应的reference box与ground truth的IoU值最大,标记为正样本;
    2) 如果锚点对应的reference box与ground truth的IoU>0.7,标记为正样本;
    3) 如果锚点对应的reference box与ground truth的夹角小于π/12,标记为正样本;
    4) IoU小于0.3,标记为负样本;
    5) IoU大于0.7,但是夹角大于π/12,标记为负样本;
    6) 剩下的既不是正也不是负,不用于训练。
  4. 损失函数的计算,比传统的多任务损失函数增加了一个角度的Loss计算;
  5. 倾斜IoU计算:多边形化为多个三角形面积计算;
  6. 倾斜非极大值抑制;
  7. RRoI Pooling层。

A. 旋转边框表示

       在训练阶段,文本区域的ground truth被表示为带有(x, y,h,w, θ)的旋转边框,坐标(x, y)表示边框的几何中心。高度h设置为边框的短边,宽度w设置为长边。θ是从x轴的正方向到与旋转边界框的长边平行的方向的夹角。由于场景文本检测的特殊性,读取的方向及其相反的方向不影响被检测区域。在这里,我们简单地使用方向参数θ,使其覆盖一半的角空间。假设一个旋转框的方向是θ;存在且只有一个整数k确保θ+ kπ在区间[-π/4,3π/4)内,我们将θ+ kπ更新为θ。(x, y, h, w, θ)这样表示有三个好处。首先,很容易计算两个不同旋转框之间的角度差。其次,这是每个旋转边界框的角度回归的rotation-friendly表示。第三,与传统的8点表示(x1;y1;x2;y2;x3;y3;x4)相比,当我们旋转一个训练图像后,这个表示可以很容易地计算出新的ground truth。

这段话有些地方没读懂,思路理不顺,也没明白到底这样五点表示比八点表示好在哪儿…

试着总结一下好处:
1)能够比较容易计算出两个旋转的角度差异;
2)相较于传统上对于边界框使用8个点的表达,使用这样的方式更能很好回归带有旋转的目标检测框情形;
3)使用这样的表达能够高效计算经过旋转之后训练图片的ground truth;

这段加粗字体没太理解所以翻译的不太准,这里贴上原句:

在这里插入图片描述

       假设给定图像的大小为IH x IW,原始文本区域表示为(x,y, h, w, θ),如果我们将图像围绕其中心旋转一个角度α∈[0,2π),锚点的中心可以计算为
在这里插入图片描述

       其中T和R分别为平移矩阵和旋转矩阵,

在这里插入图片描述       旋转包围框的宽度w’和高度h’不变,方向为θ’ =θ+α+kπ (θ’ ∈[-π/4,3π/4))。在训练过程中,我们使用这种图像旋转策略来增加数据。

B. 旋转锚

       传统的锚点使用比例尺和长宽比参数,在in-the-wild文本检测中存在不足。因此,我们设计的旋转锚( r-anchor)通过几个部分调整。首先,方向参数是用于控制 proposals 的方向。使用-π/6, 0, π/6, π/3, π/2, 2π/3 这六种不同的取向。它们是方向覆盖率和计算效率之间的权衡。其次,由于文本区域通常具有特殊的形状,因此将长宽比改为1:2、1:5和1:8,以覆盖广泛的文本行。另外,尺度为8,16,32。在我们的数据表示步骤之后,锚策略总结在图3中,一个 proposal 由带有5个变量(x,y,h,w,θ)的 r-anchor 中生成。对于feature map上的每个点,生成 54 个r-anchor(6个方向,3个纵横比,3个比例尺),在每个滑动位置的reg层生成270个输出(5x54), cls层生成108个score输出(2x54)。然后,我们使用 RRPN 滑动 feature map,为 feature map 生成 HxWx54个锚点,feature map的宽度为W,高度为H

在这里插入图片描述

C. 学习旋转建议(Learning of Rotated Proposal)

       在生成 r-anchor 的过程中,需要一个针对 r-anchor 的抽样策略来执行网络学习。我们首先定义 loU 重叠为 ground truth 和 r-anchor 的斜矩形之间的重叠。正 r-anchor 特征如下: (i) 最高的loU重叠或大于0.7的loU,(ii) 相交角度相对于ground truth小于π/12。负 r-anchor 特征如下: (i) IoU小于0.3,(ii) 大于0.7但夹角大于π/12。未被选为正或负的区域在训练中不使用。

在开始训练之前,先定义好正负锚点的标定规则:

  1. 如果锚点对应的reference box与ground truth的IoU值最大,标记为正样本;
  2. 如果锚点对应的reference box与ground truth的IoU>0.7,标记为正样本;
  1. 如果锚点对应的reference box与ground truth的夹角小于π/12,标记为正样本;
  2. IoU小于0.3,标记为负样本;
  3. IoU大于0.7,但是夹角大于π/12,标记为负样本;
  4. 剩下的既不是正也不是负,不用于训练。

损失函数使用多任务损失函数(multi-task loss),定义如下:

在这里插入图片描述
       如前一节所述,我们给出了 r-anchor 在[-π/4,3π/4)范围内的固定方向,并且6个方向中的每一个方向都能与交角小于 π/12 的 ground truth 相吻合。因此,每个 r-anchor 都有它的拟合范围,我们称之为它的拟合域。当GT框的方向在r-anchor的拟合域中时,这个r-anchor很有可能是GT框的正样本。因此,6个方向的拟合域将角度范围[-π/4,3π/4)分成6等份。因此,任何方向的GT框都可以用匹配拟合域的r-anchor框。图4显示了回归项的效用比较。我们可以观察到,邻近区域的区域方向是相似的。

在这里插入图片描述
       为了验证网络学习文本区域方向的能力,我们将输入图像的中间结果如图5所示,将不同迭代后RRPN训练的特征图可视化。feature map上的短白线表示对文本实例响应最高的r-anchor。短线的方向是这个r-anchor的方向,而短线的长度表示置信度。我们可以观察到 feature map 中较亮的区域集中在文本区域,而其他区域在150000次迭代之后变暗。此外,随着迭代次数的增加,区域的方向更接近文本实例的方向。

D. 精确细化建议

1. 斜IoU计算

       旋转建议可以在任何方向产生。因此,对水平建议的 IoU 计算可能会导致不准确的倾斜交互式建议IoU,并进一步破坏建议提取。在算法1中,我们设计了一个考虑三角剖分的斜IoU计算实现[49]; 图6显示了几何原理。给定一组斜交矩形 R1…Rn,我们的目标是计算每一对(Ri, Rj)的 loU。第一步是生成Ri与Rj的交点 PSet(算法1中的第4-7行)。计算两个矩形的交点和一个矩形在另一个矩形内的顶点,并将其插入PSet。然后计算PSet的交点面积(算法1中的第8-10行),根据PSet中的点在图像中的位置,将其按逆时针方向进行排序,并根据排序后的点生成一个凸多边形。通过三角剖分,我们可以得到图6(b)中的三角形集合(例如,{△AIJ, △AJC, △ACK, △AKL}。多边形的面积是三角形面积的和。最后,计算loU值。

这里看着复杂,其实就是个IoU的计算,因为两个斜的框会产生多边形,把多边形分解为一个个三角形,就能够计算IoU的值了。

在这里插入图片描述

2. 斜非极大值抑制计算(Skew-NMS)

       传统的NMS只考虑IoU因素(例如,IoU阈值为0.7),但这对于带有方向的proposals是不够的。例如,比例为1:8,角度小于为π/12的锚的loU值为0.31,小于0.7;然而,它可以被认为是一个正样本。因此,Skew-NMS包括两个阶段:(i)保持最大IoU大于0.7;(ii)如果所有的proposals IoU 在[0.3,0.7]的范围内,保持proposals与GT框的角度差最小(角度差应小于π/12)。

这里没太懂这个NMS咋整的,查了查相关资料,总结了下,见:
NMS(非极大值抑制)
但感觉还是得看程序…

E. RRoI Pooling Layer

       在Fast-RCNN[48]中,Rol Pooling层从每个proposal 的feature map中提取一个固定长度的特征向量。每个特征向量被输入到全连接层中,最终分支到同级的cls和reg层中,输出是输入图像中对象的预测定位和类。由于图像的特征映射只需要对每幅图像进行一次计算,而不是对每一个生成的建议进行计算,因此加速了目标检测框架。Rol pooling层使用max pooling将任何有效的Rol中的特征转换成一个具有固定空间范围hr×wr的小feature map,其中hr和wr是独立于任何Rol的超参层(layer hyperparameters)
       对于任意方向的文本检测任务,传统的Rol pooling层只能处理水平的建议。因此,我们提出了旋转Rol (RRol) pooling层来调整 rrpn 生成的任意方向的建议。我们首先将RRol层超参数设为Hr和Wr。对于高H、宽w的建议,旋转后的建议区域可以划分为HrxWr大小的子区域(如图7a所示)。每个分区域h/Hr×w/Wr都具有与建议相同的方向。图7(b)显示了一个在feature map上有4个顶点(A, B, C, D)的子区域的例子。这4个顶点使用相似变换(移位、缩放和旋转)来计算,并分组到子区域的边界。然后在每个子区域执行max pooling, max pooling的值保存在每个RRol的矩阵中;与Rol pooling相比,RRol pooling可以将任何具有不同角度、长宽比或尺度的区域汇集到一个固定大小的feature map中。最后,将建议转化为RRols,发送给分类器给出结果,即无论是文本还是背景。

在这里插入图片描述

5 实验

这部分针对MSRA-TD500 [21], ICDAR2015[23] and ICDAR2013 [22]三个文本检测数据集进行了实验,包括P、R、F-measure、FPS指标,且绘制了曲线图。基本都是与Faster R-CNN作对比,也做了对比实验。这里篇幅较多,但与其他文章比大同小异,且个人感觉较显凌乱,说服力不是很足。就没有进行精翻,待之后做程序复现的时候再将重点重新梳理一下。

6 总结

       在本文中,我们介绍了一个基于旋转的文本检测框架。倾斜矩形建议是利用网络中较高卷积层的文本区域方向角信息生成的,从而实现文本的多方向检测。设计了一种新的RRoI pooling层,并将其应用于旋转RoI。在MSRA-TD500、ICDAR2013和ICDAR2015上与目前最先进的方法进行的实验比较表明,我们提出的RRPN和RRoI在文本检测任务上是有效和高效的。

这篇关于OCR文本检测-RRPN的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!