代码地址(非官方,训练未开源):CRAFT-pytorch
代码地址(官方):CRAFT-Reimplementation
1. 概述
导读:这篇文章主要致力于去解决任意形状本文的检测问题,对此文章提出了一种新的文本检测方法CRAFT,该方法检测每个文字字符的区域与文字字符的相互关系。对于字符级别的训练自然就要有字符级别的标注,然而实际中这样的数据是很少的,针对这个问题,文章有效利用了已有的字符级标注,还是用网络自己去预估字符级的标注用于训练。完成字符级别的训练之后,对于字符之间的关联性文章使用新提出的字符关联表达来实现这个任务。文章提出的方法在诸如CTW-1500等数据集上展现了文章字符级文本检测的性能(达到state-of-the-art)。
这篇文章提出的算法CRAFT使用一个卷积与生成字符区域的置信度与字符之间的关联系数。字符区域的置信度用于定位图像中的独立字符区域,而关联系数是将这些独立的字符关联起来组成一个检测实例。对于没有字符级标注的问题,提出使用一个弱监督学习框架拟合真是的字符级标注GT。
在图1中展示了CRAFT检测的结果,左边一列是字符级文本区域heatmap,右边一列是最后的检测结果。
文章的网络结构见图2所示,其基础网络是VGG-16,之后是FPN的特征融合,最后在stage2出生成字符区域预测(region score)与字符关联性预测(affinity score)。
2. 训练
2.1 训练标签的生成
这里对于字符区域与字符关联性区域的标签并没有采用分割标注的离散形式,而是采用高斯分布的连续形式。具体为:
- 1)首先准备一个二维的高斯分布heatmap;
- 2)计算准备好的高斯分布与需要映射过去的字符与相关性区域的变换关系;
- 3)将高斯分布按照这个变换关系映射过去得到标签;
其中对于字符相关性的区域标注使用的是图3左半部分的过程,具体看图就好了。
2.2 字符级弱监督学习
真实的检测文本标注是单词级别的,因而文章对每个单词级别的标注区域使用弱监督的形式学习字符特性。其弱监督的训练形式见图4所示
原本的标注是单词级的,而文章要求的标注是字符级别的,这里使用弱监督的形式学习,其中就涉及到字符的分割问题,其具体过程见图6所示
这里将分割的步骤划分为如下步骤:
- 1)首先将单词级别的字符区域从原始图像中抠出;
- 2)使用训练的模型去预测(图4的右下部分)字符区域置信度;
- 3)使用分水岭算法分割每个字符区域;
- 4)过程1的逆变换,映射到原图上去;
为了解决弱监督并没有显著约束的问题,这里引入单词级标注的长度作为约束。这里将检测的文本区域与其长度(单词级)定义为 R ( w ) , l ( w ) R(w),l(w) R(w),l(w),预测的字符(多个)长度为 l c ( w ) l^c(w)