论文推荐 | Character region awareness for Text Detection (有源码)
本文简要介绍CVPR2019文字检测论文”Character region awareness for Text Detection”。
场景文本检测的方法,大致可以分为基于回归的方法(例如TextBox、EAST、DMPNet、DirectReg等)、基于分割的方法(PixelLink、SSTD、TextSnake、PSENet等)、端到端检测方法(FOTS, TextBox++、Mask TextSpotter)、部件或字符级检测的方法(例如CTPN、SegLink、WordSup)等几大类。
本论文提出的模型CRAFT是一种基于字符级检测的方法。论文提出了一个新的文本检测器思路,网络的输出包括像素级的区域置信度,以及预测像素级字符连接的置信度输出。其中区域置信度用来得到单字的输出, 字符连接用来对输出的单字进行组合, 经过简单的后处理得到最后的文本行检测结果。由于现有的场景文本数据集都是基于文本行的标注, 训练数据缺少字符级别的标注,因此论文中提出了一种有效的半监督训练方法,并不需要字符级标注监督信息。
Fig1.
CRAFT是一种基于pixel级别回归的方法, 因此需要对于图中的每个像素生成标注。
具体的做法是论文中对于区域置信度(region score)以及连接置信度(affinity score)通过生成以文本框为中心的高斯区域,由于字符大多是任意四边形框, 直接生成任意四边形的高斯区域花费时间更长, 论文中通过直接对矩形的2D高斯图作投影变换, 得到映射后的任意四边形高斯区域。其中连接置信度(affinity score)的四边形区域则通过相邻两个字符的中心来连接(如图1所示), 通过这种方法我们可以得到更大的文本连接区域, 更有利于网络学习回归。
由于已有的数据集大多缺少单字符的标注, 实验中通过合成数据集以及半监督的训练方法来训练网络, 先通过合成数据来强监督得到预训练模型, 对于真实数据, 通过上图的流程, 来提取行中的单字作为伪GT来半监督训练。
具体的做法如图2所示,从数据集中将文本行提取出来, 送入网络得到字符的region score, 再利用分水岭(watershed)算法来区分开不同的字符, 从而得到每个文本行的字符框, 最后利用相反的操作得到字符框在原图的区域。
由于通过这种方法得到的伪GT不一定足够准确, 现有的数据集也有标注识别的结果, 通过识别结果我们可以知道文本行的单字符个数, 因此结合字符个数来判断伪GT的置信度,作为loss回传的比例。Loss回传比例的计算公式如下所示,其中l(w) 表示GT文本行长度,lc(w)表示通过上述方法得到的预测长度。
Fig3. model pipeline
图3即为模型的整个训练流程,其中backbone网络伪Vgg-16, 分割的网络类似于U-net的网络结构. 先利用合成数据训练,再结合真实数据一起训练, 其中伪GT的生成方式如上所述, 通过伪GT来监督真实数据的训练, 伪GT在回传时结合识别标注的字符个数, 作为loss回传的置信度, 通过这种半监督的训练方法, 最后得到文本行的confidence map。
模型训练的Loss包括以下两个部分,为region score以及affinity score的损失累加,再乘以伪GT的置信度,作为回传的Loss。
通过后处理,可以实现对任意形状(例如曲线)文本的检测。如下图所示为生成多边形检测框的后处理示意图。
Fig4. Experiment results
CRAFT 方法在数据集IC13, IC15, IC17, MSRA-TD500都取得很高的性能指标(图4), 尤其在IC13上领先最多。在TotalText及SCUT-CTW1500两个曲线文本检测数据集上也取得了目前为止最好的实验结果(见下表)。
CRAFT有以下几个特点:
由于论文中不直接预测文本行, 而是得到字符级别的region score, 因此CRAFT可以实现对多方向以及任意形状文本的检测。此外CRAFT对于不同尺度的文本也有较好的鲁棒性。
对于一些一笔连成的文本例如阿拉伯语, 论文中半监督的训练方法可能存在一定困难, 因为不能通过字符的间距来区分开得到单字符。
从效果来看,对于单字间隔较大的文本行,通常字符连接(affinity score)更难回归出来,效果不一定够理想。
论文地址: https://arxiv.org/abs/1904.01941v1
模型前向代码地址: https://github.com/clovaai/CRAFT-pytorch
(长按识别上图二维码加关注)