论文名称:
Character Region Awareness for Text Detection
开源代码:
https://github.com/clovaai/CRAFT-pytorch
论文核心思想:
本论文为2019年韩国学者提出的一种字符级的文本检测算法, 取得了不错的检测效果.
craft文本检测的主要思想:
整体网络结构
网络采用VGG-16的backbone进行下采样, 总共进行了5次下采样, 所以在预测阶段的输入图片的预处理上, 会将输入图片的长和宽padding到距离长和宽的值最近的32的倍数. 比如输入图片为500x400, 则会将图片padding到512x416, 可以有效的避免分割中的像素漂移现象. 利用Unet的思想, 对下采样的特征图再进行上采样和特征图concat操作, 最终得到原图大小1/2的2个通道特征图:region score map和affinity score map,分别为单字符中心区域的概率和相邻字符区域中心的概率.
训练数据处理
训练数据的标签生成:
标准的像素级图像分割: 以二值化的方式离散标记每个像素的label.背景对应的mask标签为0, 前景对应的mask标签为1, 如果是多类目标, 就1,2,3,…
本文craft算法标签处理: 采用高斯热度图来生成region score和affinity score.采用高斯热度图的好处:它能很好地处理没有严格包围的边界区域.
craft检测算法的数据标签处理过程如图所示.绿色框为单个字符的字符框的4个顶点构成的四边形Character box, 每个Character box对角线相连, 找到上线两个三角形的中心点, 得到上图左1中的蓝色的点. 连接邻近的两个Character box的蓝色点, 构成一个红色的四边形, 即为这两个Character box对应的Affinity box. 将Character box作用在一个标准的高斯热度图上, 即可得到相对应的字符的高斯热度图标签, 即Region Score GT, 同理, 可得到Affinity Score GT.
上述公式表示: 在文本框区域, 其对应位置的像素值为上述计算得到的评分值, 在其他的非文本框区域, 对应的像素值为1.
损失函数
S∗r p and S∗a p 表示图片通过分水岭算法得到的估计的标签, Sr§ and
Sa§ 表示图片经过网络后最终得到的预测值, 挡训练数据为真实数据时, Sc p如公式2所示. 当训练数据为合成数据时, Sc p=1.
损失函数如上所示, 由affinity score map和region score map的L2范数两部分构成.
后处理
利用图像分割来做文本检测的话, 缺点就是后处理比较麻烦. 这点是其相较于proposal检测方法的劣势.
本文主要分为两部分:
常规矩形bbox:
1、首先对0-1之间的概率图affinity score map和region score map分别进行取二值化阈值计算, 然后将两个二值化map求并集得到一张mask图.
2、使用Connected Component Labeling(CCL) 进行区域连接
3、最后使用opencv的MinAreaRect去框出最小的四边形区域
非常规四边形poly:
1、先找到扫描方向的局部最大值(blue line)
2、连接所有the local maxima上的中心点叫做中心线
3、然后将the local maxima lines旋转至于中心线垂直
4、the local maxima lines上的端点是文本控制点的候选点,为了能更好的覆盖文本,将文本最外端的两个控制点分别向外移动the local maxima lines的半径长度最为最终的控制点.