当前位置: 代码迷 >> 综合 >> OCR技术(CTPN,SegLink,EAST文本检测)
  详细解决方案

OCR技术(CTPN,SegLink,EAST文本检测)

热度:76   发布时间:2023-10-18 07:39:30.0

文字识别分为两个具体步骤:文字的检测和文字的识别,两者缺一不可,尤其是文字检测,是识别的前提条件,若文字都找不到,那何谈文字识别。今天我们首先来谈一下当今流行的文字检测技术有哪些。

文本检测不是一件简单的任务,尤其是复杂场景下的文本检测,非常具有挑战性。自然场景下的文本检测有如下几个难点:

  1. 文本存在多种分布,文本排布形式多样;
  2. 文本存在多个方向;
  3. 多种语言混合。
    OCR技术(CTPN,SegLink,EAST文本检测)我们先从直观上理解文本检测任务。给定一张图片,我们需要找出这张图里文字出现的所有位置位置,那这个任务其实跟目标检测任务差别不大,即找出每个物体在图片中的位置,并标出该包围框里的物体的类别。

而文本检测就是,找出每个文本在图片中出现的位置,因为我们的类别只有2个(有文字和没文字),看起来就像一个简单的单类别目标检测的任务,自然而然我们就会想到用经典的目标检测网络来进行文本检测,比如经典的Faster R-CNN。

Faster RCNN

Faster RCNN来做文本检测从任务上分析是可行的,毕竟文本说到底还是一个Object。我们回顾一下Faster RCNN做目标检测的关键步骤有哪些:

  1. 基础网络做特征提取;
  2. 特征送入RPN做候选框提取;
  3. 分类层对候选框内物体进行分类,回归层对候选框的(x,y,w,h)进行精细调整。

Faster RCNN做文本检测感觉问题不大,但是从效果来看,仅套用Faster RCNN来做文本检测效果并不好,原因在于,文本有自己独有的特点,这种通用检测框架并不能很好地解决文本的这些特点。那文本有什么特点呢?我总结如下:

  1. 文本大多数以长矩形形式存在,即长宽比一般较大或较小,这与普通的目标检测中的物体不一样(这些长宽比较接近1)
  2. 普通物体(比如猫)存在明显的闭合边缘轮廓,而文本没有
  3. 文本中包含多个文字,而文字之间是有间隔的,如果检测做得不好,我们就会把每个字都当成文本行给框出来而非整行作为文本框,这与我们的期望不一样。

基于以上文本检测的特点,我们必须对Faster RCNN这类通用网络进行改进,设计出适合文本检测的全新网络架构。

CTPN(2016)

2016年出了一篇很有名的文本检测的论文:《Detecting Text in Natural Image with Connectionist Text Proposal Network》,这个深度神经网络叫做CTPN,直到今天这个网络框架一直是OCR系统中做文本检测的一个常用网络,极大地影响了后面文本检测算法的方向。

这个算法很有创新,我打算一步一步介绍其闪光点。我们回顾一下Faster RCNN做目标检测的一个缺点就是,没有考虑带文本自身的特点。文本行一般以水平长矩形的形式存在,而且文本行中每个字都有间隔。针对这个特点,CTPN剔除一个新奇的想法,我们可以把文本检测的任务拆分,第一步我们检测文本框中的一部分,判断它是不是一个文本的一部分,当对一幅图里所有小文本框都检测之后,我们就将属于同一个文本框的小文本框合并,合并之后就可以得到一个完整的、大的文本框了,也就完成了文本的检测任务。这个想法真的很有创造性,有点像“分治法”,先检测大物体的一小部分,等所有小部分都检测出来,大物体也就可以检测出来了。
OCR技术(CTPN,SegLink,EAST文本检测)如图所示,左边的图是直接使用Faster RCNN中的RPN来进行候选框提取,可以看出,这种候选框太粗糙了,效果并不好。而右图是利用许多小候选框来合并成一个大文本预测框,可以看出这个算法的效果非常不错,需要说明的是,红色框表示这个小候选框的置信度比较高,而其他颜色的候选框的置信度比较低,我们可以看到,一个大文本的边界都是比较难预测的,那怎么解决这个边界预测不准的问题呢?后面会提到。

刚提到CTPN的其中一个闪光点,即检测小框代替直接检测大文本框。除了这个新意,CTPN还提出了在文本检测中应加入RNN来进一步提升效果。为什么要用RNN来提升检测效果?文本具有很强的连续字符,其中连续的上下文信息对于做出可靠决策来说很重要。我们知道RNN常用于序列模型,比如事件序列,语言序列等等,那我们CTPN算法中,把一个完整的文本框拆分成多个小文本框集合,其实这也是一个序列模型,可以利用过去或未来的信息来学习和预测,所以同样可以使用RNN模型。而且,在CTPN中,用的还是BiLSTM(双向LSTM),因为一个小文本框,对于它的预测,我们不仅与其左边的小文本框有关系,而且还与其右边的小文本框有关系!这个解释就很有说服力了,如果我们仅仅根据一个文本框的信息区预测该框内含不含有文字其实是很草率的,我们应该多参考这个框的左边和右边的小框的信息后(尤其是与其紧挨着的框)再做预测准确率会大大提升。
OCR技术(CTPN,SegLink,EAST文本检测)如上图所示,如果我们单纯依靠1号框内的信息来直接预测1号框中否存在文字(或者说是不是文本的一部分),其实难度相当大,因为1号框只包含文字的很小一部分。但是如果我们把2号框和3号框的信息都用上,来预测1号框是否存在文字,那么我们就会有比较大的把握来预测1号框确实有文字。我们还可以看看为什么边缘的文本框的置信度会较中间的低呢?个人认为很大一部分原因就在于因为这些框都位于总文本的边缘,没有办法充分利用左右相邻序列的信息做预测(比如位于最左的文本框丢失了其右边的信息)。这就是双向LSTM的作用,把左右两个方向的序列信息都加入到学习的过程中去。
OCR技术(CTPN,SegLink,EAST文本检测)我们已经对CTPN这个算法的总体思路有了一点理解,那关键问题来了,我们怎么把这些小文本框准确地检测出来呢?
CTPN借助了Faster RCNN中anchor回归机制,使得RPN能有效地用单一尺寸的滑动窗口来检测多尺寸的物体。当然CTPN根据文本检测的特点做了比较多的创新。比如RPN中anchor机制是直接回归预测物体的四个参数(x,y,w,h),但是CTPN采取之回归两个参数(y,h),即anchor的纵向偏移以及该anchor的文本框的高度,因为每个候选框的宽度w已经规定为16个像素,不需要再学习,而x坐标直接使用anchor的x坐标,也不用学习,所以CTPN的思路就是只学习y和h这两个参数来完成小候选框的检测!跟RPN相类似,CTPN中对于每个候选框都使用了K个不同的anchors(k在这里默认是10),但是与RPN不同的是,这里的anchors的width是固定的16个像素,而height的高度范围为11~273(每次对输入图像的height除以0.7,一共K个高度)。当然CTPN中还是保留了RPN大多数的思路,比如还是需要预测候选框的分数score(该候选框有文本和无文本的得分)。

这么多小尺度候选框怎么才能串联成一个完整的文本行呢?
文本行构建很简单,通过将那些text/no-text score > 0.7的连续的text proposals相连接即可。文本行的构建如下。首先,为一个proposal Bi定义一个邻居(Bj):Bj?>Bi,其中:

  1. Bj在水平距离上离Bi最近
  2. 该距离小于50 pixels
  3. 它们的垂直重叠(vertical overlap) > 0.7

另外,如果同时满足Bj?>Bi和Bi?>Bj,会将两个proposals被聚集成一个pair。接着,一个文本行会通过连续将具有相同proposal的pairs来进行连接来构建。

接下来我们就较为细节地学习一下这个CTPN经典网络。
OCR技术(CTPN,SegLink,EAST文本检测)整个检测分六步:

  1. 用VGG16的前5个Conv stage(到conv5)得到feature map(WHC)
  2. 在Conv5的feature map的每个位置上取33C的窗口的特征,这些特征将用于预测该位置k个anchor(anchor的定义和Faster RCNN类似)对应的类别信息,位置信息。
  3. 将每一行的所有窗口对应的33C的特征(W33C)输入到RNN(BLSTM)中,得到W256的输出
  4. 将RNN的W*256输入到512维的fc层
  5. fc层特征输入到三个分类或者回归层中。第二个2k scores 表示的是k个anchor的类别信息(是字符或不是字符)。第一个2k vertical coordinate和第三个k side-refinement是用来回归k个anchor的位置信息。2k vertical coordinate表示的是bounding box的高度和中心的y轴坐标(可以决定上下边界),k个side-refinement表示的bounding box的水平平移量。这边注意,只用了3个参数表示回归的bounding box,因为这里默认了每个anchor的width是16,且不再变化(VGG16的conv5的stride是16)。回归出来的box如Fig中那些红色的细长矩形,它们的宽度是一定的。
  6. 用简单的文本线构造算法,把分类得到的文字的proposal(图中的细长的矩形)合并成文本线

论文的一大亮点,称之为Side-refinement,我理解为文本框边缘优化。我们回顾一下上面提到的一个问题,文本框检测中边缘部分的预测并不准确。那么改咋办,CTPN就是用这个X的偏移量来精修边缘问题。这个X是指文本框在水平方向的左边界和右边界,我们通过回归这个左边界和右边界参数进而可以使得我们对文本框的检测更为精准。在这里想举个例子说明一下回归这个x参数的重要性。

我们观察下图,第一幅图张我们看到我们有很多小候选框,位于左边的候选框我标记为1、2、3、4号框,1号框和2号框为蓝色,表明得分不高我们不把这两个框合并到大文本框内,对于3号框和4号框那就比较尴尬了,如果取3号框作为文本框的边缘框,那么显然左边边缘留白太多,精准度不够,但如果去掉3号框而使用4号框作为左边缘框,则有些字体区域没有检测出来,同样检测精度不足。这种情况其实非常容易出现,所以CTPN采取了Side-refinement 思路进一步优化边缘位置的预测即引入回归X参数,X参数直接标定了完整文本框的左右边界,做到精确的边界预测。第二幅图中的红色框就是经过Side-refinement后的检测结果,可以看出检测准确率有了很大的提升。 side-refinement确实可以进一步提升位置准确率,在SWT的Multi-Lingual datasets上产生2%的效果提升。

OCR技术(CTPN,SegLink,EAST文本检测)最后总结一下CTPN这个流行的文本检测框架的三个闪光点:

  1. 将文本检测任务转化为一连串小尺度文本框的检测;
  2. 引入RNN提升文本检测效果;
  3. Side-refinement(边界优化)提升文本框边界预测精准度。

当然,CTPN也有一个很明显的缺点:对于非水平的文本的检测效果并不好。CTPN论文中给出的文本检测效果图都是文本位于水平方向的,显然CTPN并没有针对多方向的文本检测有深入的探讨。那对于任意角度的文本检测应该采取什么的算法思路呢?下面的SegLink算法给出了一个新奇的解决方案。


SegLink(2017)

CVPR2017的一篇spotlight论文《Detecting Oriented Text in Natural Images by Linking Segments》介绍以一种可以检测任意角度文本的检测算法,我们一般称这个算法为SegLink,这篇论文既融入CTPN小尺度候选框的思路又加入了SSD算法的思路,达到了当时自然场景下文本检测state-of-art的效果。

现在我想先介绍为什么要针对多方向的文本检测做特定的研究。对于普通目标检测,我们并不需要对其做所谓的多方向目标检测,比如下面这个检测任务,我们直接把单车和狗的位置找出来即可。
OCR技术(CTPN,SegLink,EAST文本检测)但是对于文本检测任务可不一样,文本的特点就是高宽比特别大或小,而且文本通常存在一定的旋转角度,如果我们对于带角度的文本仍然使用目标检测那个思路回归四个参数(x,y,w,h)来指定一个目标的位置的话(如下图红色框),那显然误差太大了,这个检测效果并不是我们所能接受的。

OCR技术(CTPN,SegLink,EAST文本检测)一个最直接的思路就是让模型再学习一个参数θ!这个θ表示文本框的旋转角度,也就是我们最终要回归的参数从原来的(x,y,w,h)变成(x,y,w,h,θ)。SegLink确实也采取了这个思路,除此之外,他还提出了SegmentLinking两个重要概念,这个才是这篇CVPR论文的核心创新点

什么是segment?segment从中文上理解为文本行的一部分,这一部分可以是一个字符或文本行的任意一部分。如下图示,黄色框表示一个segment,一个完整的文本行中包含多个segment,每个sgment之间通过link(图中的绿色线)连接组合起来。那么Segment做文本检测的思路其实跟CTPN的思路很像,先检测文本行的一部分,再把他们连接起来构成一个完整文本行。

OCR技术(CTPN,SegLink,EAST文本检测)我们把图片的关键部位放大看看细节:首先每个segment是有一定的重合区域的,然后每两个segment连接的部位是两个segment的中心点。每一个segment和link仅依靠局部图像的纹理信息即可完成检测,而无需整张图像的信息。

OCR技术(CTPN,SegLink,EAST文本检测)接下来我们通过分析SegLink的网络架构进一步理解SegLink如何做到高效的多角度文本检测。下图是SegLink的网络架构,显然这个架构采取了SSD的思路,首先使用VGG16作为backbone进行特征提取,其中VGG16的全连接层(fc6,fc7)替换成卷积层(conv6,conv7),再接卷积层conv8到conv11。值得说明的是,conv4~conv11之间的尺寸依次减少(每一层是前一层的1/2)。这个做法是为了做多尺度下的目标检测,即大的feature map擅长做小物体的检测,而小的feature map则擅长检测大物体。借助多个不同尺度的feature map,从6个feature layer上检测segment和link,我们就可以检测出不同尺寸的文本行了。
OCR技术(CTPN,SegLink,EAST文本检测)当所有segments都被检测出来后,我们就可以通过融合规则(combining segments),将各个feature map的segment的box信息和link信息进行融合,得到最终的文本行。

SegLink所使用的目标函数由三个部分构成,是否是text的二类分类的softmax损失,box的smooth L1 regression损失,是否link的二类的softmax损失。λ1和λ2控制权重,最后都设为1。
OCR技术(CTPN,SegLink,EAST文本检测)现在计算一下每个feature map输出的参数有哪些呢?

  • segment的位置信息:(x,y,w,h,θ),一共5个参数
  • 每个segment内的分类分数,即判断框内有字符还是无字符的分数(2分类),共2个参数
  • 同层(within-layer)的每个segment的link的分数,表示该方向有link还是没link(2分类问题),而一个segment有八邻域所以有八个方向,参数一共有2×8=16
  • 相邻层(cross-layer)之间也存在link,同样是该方向有link还是没link(2分类问题),而link的个数是4个,所以参数总数为2×4=8

下图很清楚地表示出每个feature map输出的参数有多少个,输出参数总数为(2+5+16+8=31)。假设当前的feature map的尺度为(w,h),那么该层卷积后输出为w×h×31
OCR技术(CTPN,SegLink,EAST文本检测)这里想再谈谈Within-Layer Link和Cross-Layer Link的作用。

within-layer link表示在同一层feature layer里,每个Segment与8邻域内的segment的连接状况,如下图(a)所示。且每个link有2维,一维是正分,表示两个segment属于同一文本,一维是负分,表示两个segment不属于同一文本。所以,每个predictor输出16(8×2)维向量。

cross-layer link:在不同的feature layer上有可能会检测到同一文本的segments,造成冗余,cross-layer link的提出就是为了解决这个问题。cross-layer link连接了两个相邻feature layer上的segments,如图(b)所示。需要注意的是,由于下采样使后一层为前一层scale的1/2,定义一个segment的cross-layer邻居为前一层4邻域更小的segment,即前一层是后一层的邻居,但后一层不是前一层的邻居,所以conv4_3的feature layer没有cross-layer邻居。图中所示的黄框为当前层的segment,蓝框为上一层更小更细的segment,绿色的线代表cross-layer link有连接,属于同一文本,在后续的combine算法中会将他们融合,即去除了冗余。

OCR技术(CTPN,SegLink,EAST文本检测)
读到这里我们已经知道如何获取segment和相应的link了,那接下来要做的就是怎么把这些link和segment合并成一个完整的文本行。先贴一下论文中使用到的合并算法:
OCR技术(CTPN,SegLink,EAST文本检测)上述的流程大概:

  1. 假设我们有一个集合B,里面有很多相关联的segment待合并;
  2. 每一个segment都有自己的角度θ,那我们求集合B中所有segment角度的平均值θb;
  3. 求一条直线L使得所有segment的中心到这条直线的距离最小,也就是最小二乘法线性回归啦;
  4. 每个segment的中心往直线L做垂直投影;
  5. 从所有投影点中选出相距最远的两个点,记做(xp,yp)和(xq,yq);
  6. 最终合并好的文本框的位置参数记为(xb,yb,wb,hb,θb)那么xb:=1/2(xp+xq,yb:=1/2(yp+yq)
  7. 文本行的宽度wb就是两个最远点的距离(即(xp,yp)和(xq,yq))再加上最远两个点所处的segment的宽度的一半(Wp和Wq)。
  8. 文本行高度hb就是所有segment高度求平均值

下图辅助理解合并算法,橙色直线是拟合出的最佳直线,红色点表示segment的中心,黄点表示红点在直线上的投影,绿框就是合并后的完整本文框。
OCR技术(CTPN,SegLink,EAST文本检测)SegLink论文中并没有提到该算法能不能检测弯曲的文本,从理论上解读,SegLink是可以做到的。比如下图,只是合并算法要做一些改变而已。
OCR技术(CTPN,SegLink,EAST文本检测)