论文阅读: Character Region Awareness for Text Detection (CRAFT)

简介

论文链接:https://arxiv.org/abs/1904.01941

这篇论文的主要是解决文本检测的问题,思路是利用分割的方法,与图像分割有些不同的是,CRAFT不是对整个图像进行像素级分类,而是做了回归,它有两个分支,一个是目标是字符的中心的概率(这里用概率可能不是很准确,或许说是距离字符中心的距离更好一些),另一个是字符之间的连接关系,然后经过一步后处理,得到文本的边界框。

网络结构

CRAFT的网络结构如图。看起来并不复杂,基于VGG16的结构,整体类似UNet,是一个标准的分割模型。Region Score表示该点是文字中心的概率,Affinity Score可以认为是该点是两个字之间的中心的概率。这个结构还是比较简单的,其实大部分基于分割的模型网络结构都比较简单,主要是后处理与训练数据。

在这里插入图片描述

训练数据格式

CRAFT的训练数据label不是二值化的图像,而是采用了类似热力图的的图像,这也对应了上面说的,表示的是该位置在文字中心的概率。

在这里插入图片描述

上图是训练数据的label的生成示意图。首先看左边,有了一个字符级的标注(图2的红框, Character Boxes),这个字符的四个点(图1绿边)构成一个四边形,做对角线,构成两个三角形(图1蓝边),取三角形的中心,两个框之间就有四个点,构成了一个新的边框,这个边框就是用来表示两个字符之间的连接的label的(Affinity Boxes)。图3是根据Box生成Label的过程,先生成一个2D的高斯图,通过透视变换,映射成与box相同的形状,最后粘到对应的背景上。

弱监督学习

由于训练数据的label生成需要字符级标注,所以这个方法其实获取数据是很困难的,因此作者在这里采用了一个弱监督学习的方法来训练模型,取得了较好的效果。

在这里插入图片描述

上图是整个弱监督学习的框架。首先,我们有两种数据,一种是合成数据,这些数据的标注是准确的,另一种是真实数据,这些数据的标注是文本行等级的,合成数据就正常的训练。真实数据训练分以下几步:

  1. 根据真实数据的标签,将文本行crop出来。
  2. 跑网络,得到结果图。
  3. 根据网络输出的图,分割出单个文字。
  4. 根据上一步的结果,生成label。

实际上,这些label并不一定准确,所以用这些数据训练,并不一定能使模型训得更好,尤其是一开始模型并不够准的时候。因此,论文中利用了一个已有的标注结果来给出一个置信度,那就是利用文本长度。简单来说,如果文本长度与模型跑出来的结果是一样的,那就认为置信度高,否则置信度比较低(置信度直接乘到loss上)。

后处理

在网络输出score map之后,下面就要把这些像素级的label合成box,这篇论文里用的方法并不复杂,首先是通过阈值过滤score map,进行二值化,然后接一个连通域分析(Connected Component Labeling ),接下来通过连通域画出最终的QuadBox,论文里讲的不是特别清楚,可以看一下它的示意图:
在这里插入图片描述

看起来是利用单字的score map,得到绿点,之后连起来就好了,具体是怎么做的没太说清,但是到了这一步其实就不难了。

发布了443 篇原创文章 · 获赞 149 · 访问量 55万+

猜你喜欢

转载自blog.csdn.net/qian99/article/details/90740430