label文字颜色_文字检测算法的相关研究

00ee6a7b32ab9078bfeb8efc896056a2.png

最近由于项目的需要,读了一些字符检测的相关的算法,整理如下。

最早的基于深度学习的字符检测都是基于检测的体系来做的,包括ctpn,textboxes,RRPN等,但是这些基于检测框回归的方法在处理曲线型文本或者较为密集的文本的时候都表达不够细致,也会出现回归边框不准确的问题,所以近期对于字符检测的研究都由基于检测的方法转向了基于分割的方法,往往是文本区域分割+边界框校准的方法。因为对于文字的检测都需要较为精细的边界框,基于检测的方法已经往往只能确定一个四边形的文本框,后期的nms算法也不太适合处理较为密集的文本区域筛选。最近看的文章也基本上基于分割+边界框校准来做的,文章列表如下:

  1. EAST:An Efficient and Accurate Scene Text Detector(Advanced EAST)
  2. PixelLink: Detecting Scene Text via Instance Segmentation
  3. SOTD: Self-organized Text Detection with Minimal Post-processing via Border Learning
  4. Accurate Scene Text Detection through Border Semantics Awareness and Bootstrapping
  5. MSR: Multi-Scale Shape Regression for Scene Text Detection
  6. TextField: Learning A Deep Direction Field for Irregular Scene Text Detection
  7. TextMountain: Accurate Scene Text Detection via Instance Segmentation

接下来介绍一下每篇文章的做法以及分析各类基于分割的文字检测中对边界学习的改进,以及它们的作用。

一. EAST(Advanced EAST)

这篇文章是比较早的提出的一个高效的字符检测算法,其特点一个是高效,如下图所示,与之前的其他算法相比,east省去了很多复杂的后处理操作,使用FCN直接对字符区域进行分割和对字符像素到字符边界框的距离进行回归,后处理只有简单的thresholding和NMS操作,简单高效。文章的缺点在于:

1.只考虑了rotated box (RBOX) and quadrangle (QUAD)两种几何图像,在处理弯曲文本的时候存在天然的不足;

2.对于生成分割区域的training label的时候采用了shrink的区域,这在处理密集文本和小区域文本的时候会存在一些问题,导致分割不准确;

3.受制于感受野的大小,在对每一个字符像素到边框四周的距离进行回归的时候,对于长边的回归会出现错误,反应到检测结果上就是对于长文本的检测效果不佳;

2fcf9a5d93d09b397b3688906c67650f.png

下面这个图是EAST的training label的构造过程:

fec87e0162b7112a87a254c52a989bc9.png

针对上面第三点提到的EAST对于长文本检测不佳的问题,有人在参加天池 ICPR比赛的时候提出了 AdvancedEAST,代码开源地址:https://github.com/huoyijie/AdvancedEAST,该算法与EAST算法的改进如下:

bc2c344879bb2f6fdb8b1fe3f8c42c0c.png

该网络输出层一共7层feature map,分别是1位score map, 表示图像中的一个pixel是否在文本框内;2位vertex code,表示一个pixel是否属于文本框边界像素以及是头还是尾;4位geo,是位于边界的pixel可以预测的2个顶点坐标,位于头部的pixel负责头部的两个顶点,位于尾部的pixel负责尾部的两个顶点。其中所有像素构成了文本框形状,然后只用边界像素去预测回归顶点坐标。边界pixel定义为黄色和绿色框内部所有像素,最后利用所有的边界pixel预测值的加权平均来预测头或尾两端的两个顶点。

该算法效果图如下 :

fc8ea38cabc43d8a50810f735e8184b8.png

二. PixelLink

这篇算法是浙江大学在2018年AAAI发表的一篇文章。文章的总体思路还是先用分割的方法来获得文本区域,在如何处理文本区域的粘连问题时,这篇文章采用的思路如下图所示:

84fdd3b91e0dc67f36af9052c7750ae2.png

主要是使用针对每一个pixel的8领域像素的连接情况进行建模,所以网络的输出有10个channels,2个负责正负像素的分割,8个负责对8个领域像素的连接情况进行分类,1表示有连接,0表示没有连接,后处理的话直接使用pixel之间的连同情况进行实例分割,使用opencv的minAreaRect获得文本框。

该算法主要有以下两个优点:

1.与以往基于包围框回归的方法(CTPN,RRPN,DMPNet,EAST)不同的是,PixelLink放弃了包围框回归,而是先分割,再连接,再从连接中直接生成包围框。这样做速度更快。

2.对感受野的要求少(因为每个神经元值只负责检测自己及其邻域内的状态)。

缺点:

1.与SegLink一样,不能检测很大的文本,这是因为link主要是用于连接相邻的segments,而不能用于检测相距较远的文本行。

三.SOTD

这篇文章全称为Self-organized Text Detection with Minimal Post-processing via Border Learning,第一次提出了Border Learning的概念。作者认为传统的文本检测中将文字框和背景部分的像素分为两种类别,直接使用分割很容易会导致文本框之间出现粘连的情况,入图(b)所示。之前的字符检测算法例如EAST等往往都不把文本边框周围的像素当作是文本框像素,所以这一类的算法会在生成分割的map的时刻对标注的文本框先进行收缩操作,把收缩后的文本区域作为训练的label,将文本框周围的像素丢弃,然后再单独的训练回归的方法对文本框边界进行回归。而SOTD这篇文章采用的做法是之间把文本框周围的像素看作是除了文本区域像素和背景像素之外的第三种类别,然后直接利用FCN对这三种类别进行训练和学习,去解决文本框之间的粘连问题。这篇文章的除了提出一种新的思想之外,还给出了一个针对三分类分割标注的字符检测数据集,但是该文章提出的算法和数据集适应场景都偏简单,在文字区域较小和弯曲文字的情况下效果不佳。

209b3566076ff1cfdbcaa7881cecf020.png

0af767462fa92c2af4565a03ba3188b6.png

四.Accurate Scene Text Detection through Border Semantics Awareness and Bootstrapping

这篇文章是ECCV 2018的一篇文章,首先,作者总结了字符检测领域比较常见的三个问题:

1.一些text line会出现断框的情况,造成的原因可能是字符之间的间距较大或者字符的颜色和大小变化等;

2.错误的定位,造成的原因往往是文本较长导致的回归不准确;

3.缺少训练数据;

针对上述的三个问题,作者在这篇文章里提出了

1.提出了一个全新的bootstraping方法来对文本区域进行不同长度的采样;

2.提出了一种新的基于分割的文本框检测技术,将文本框的4条边分别作为4个类别去学习

d7ab96099bc7fc050a2859671e7e6a15.png

五.MSR(Multi-Scale Shape Regression for Scene Text Detection)

这篇文章和上一篇文章作者的最新作品,包括下面介绍的两篇文章,这三篇文章都采用了一种新的思路来解决文本区域之间的粘连问题,就是针对文本区域的每一个pixel去生成一个vector,这样在后处理的过程中,每一个文本区域的pixel都有一个方向能去指导它朝哪个方向去靠拢,从而解决粘连问题。

这篇文章的思路不是让文字区域的像素向文字区域中心靠拢,而是先确定一个shrink的文字区域,然后对shrink区域的像素到边框的距离方向进行回归,从而得到最后的文字区域。除此之外,文字的另外一个创新就是为了处理场景文字检测下文字区域大小范围变化较大的情况,引入了多尺度的输入和网络,整个算法的运行过程如下图所示:

1795924492cea7ac3919100479e42a81.png

下面这张图表示的是如何构建一个curve text region下的shrink区域和shrink区域内每个像素到边框的向量:

ced53860e5615029c54bc16f340ee99c.png

网络的后处理就是使用Alpha-Shape Algorithm 从预测出的边界点集合中得到外接凸多边形。

该算法的代码我们已经实现,但是该算法的效果存在一定的问题,主要是针对长文本容易出现断框问题,然后就是在训练过程中对于边界的回归可能不是很稳定,其实感觉作者在回归边框的时候考虑引入一些平滑的技术。

六.TextField

该文章的亮点在于使用text region内部像素到最近边框的向量来做instance segmentation。text field是一个二维的向量,指向是每个text pixel到最近boundary点的向量,其主要作用是它的magnitude可以在后期处理中用来区分text和non-text region,它的direction可以用来在后处理部分进行instance segmentation对粘连字符块进行分离。

后处理的算法比较复杂,感兴趣的可以直接看论文,写的比较详细,主要的过程就是对语义分割后的像素做关于超像素的的合并以及一些形态学操作加上过滤来得到每一个text instance。

整个算法的流程如下图所示:

0728659254e8b87b7796294af27d3587.png

生成text region中关于每一个pixle对应的像素过程如下图所示:

6c511b7efbc82c4a266fe6a52064d6b1.png

七.TextMountain

这篇文章是中科大挂在arxiv的一篇比较新的文章,效果非常的好(目前好像是几个数据集上的state-of-art)。

这篇文章的作者认为,与SOTD中武断的将文字区域的边框区域和内部区域作为二分类并不是很合适,而是将整个文字区域的每一个像素点建立成了一个概率图的形式,一个文字区域的内部的概率比较高,文字框周围的像素比较低一些,就好像一座山峰一样(如下图的TCBP)所示。

整个算法的网络架构还是使用的FPN的分割网络,网络最后的输出有三个部分:TS,TCBP和TCD。

5f3c63514b09ea09a8ebbb5b372e76e6.png

其中TS就是简单的文字区域和非文字区域的简单二类语义分割,TCBP就是之前提到的文字区域的概率图,其生成方式由以下的几个公式给出,感兴趣的可以看原论文。

0549e7e819be347993026b3aca3cc9f0.png

TCD表示的是每一个文字边框区域的每一个pixel都对应上一个指向文字中心区域的向量,思想和text field构造的向量一样,只是构造的方式略有不同,构造的公式如下:

716b663bbbc1a40dde910ce0c43e49e0.png

b620b15dfc2ff61f582065dfa6033390.png

42a63537b316e55f9700a3764dc4f0d1.png

7fd68ad925948fa8dc58c6611e323236.png

算法的后处理就是设计了一种“爬山算法”,边框像素的pixel不断按照TCD或者TCBP给定的方向向中心区域寻找父节点,最后根据连接到的中心节点的instance来完成instance segmentation,这个后处理可以设计成GPU并行的模式,作者在论文中也提到速度很快,这也是该算法的一大优势吧。

该算法还在实现过程中,但是存在的一个问题就是training label的生成速度有点慢, 因为要针对文字区域的每一个pixel来构造label。。。算法效果还有待评估,生成的一些label如下所示:

2fd3d5be28dedb5cf821b1175361ac5e.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值