《Pyramid Mask Text Detector》,在2019年3月28日上传到arxiv网站,这篇文章真是把ICDAR MLT2017和ICDAR2015数据库刷出了新高,在两个库的f值分别达到80.13%和89.33%。
文章思想:把文字检测当作图像分割来做,采用在分割上获得不错效果的Mask R-CNN方法,但是直接使用该方法有一些缺点如下:
监督过于简化,目前文字检测常用的还是用四个点表示的四边形进行定位,目前基于Mask R-CNN的检测方法只是将文本从背景中分割出来,没有很好的考虑到groundtruth为四边形的情况,所以没有很好的利用这点
-
不准的groundtruth用于分割,很多情况下分割的标签只是简单的从标定框二值化而来,有时候一个框内可能有很大一部分像素是背景,这样会导致产生的gt不准,如下图所示
-
错误信息的传递,因为在Mask R-CNN中是先得到检测的框,然后对框内的物体进行分割,如果框的位置不准确,这样会导致分割出来的结果也不会准确,如下图所示
下面来介绍一下文章是怎么去解决这些问题的。
文章做了两个实验,一个是baseline方法,一个是文中重点PMTD方法。
一、baseline方法
先简单介绍一下baseline方法。
baseline的主干网络使用resenet50,网络结构采用FPN结构。
该方法和Mask R-CNN文章的不同数据增强和rpn achor的尺寸设置。
对于数据的增强:
- 将图片按照0.5的概率水平翻转
- 随机的将图片的长和宽resize到640-2560之间,并且不保证长宽比不变
- 随机的在第二步resize后的图片选择640*640大小的区域进行截取
对于FPN结构,与anchor有关的设置包括基本的anchor大小、需要进行搜索的feature map、anchor的长宽比。
文章将在所有的FPN输出的四个feature map上进行anchor的搜索,且anchor大小都为,anchor的纵横比取。之所以这样取,是因为文章分析了数据增强后的数据中bounding box的纵横比,纵横比处在0.17之前的数据占5%,处在7.46之前的数据占95%,然后再0.17-7.46之间均匀的插入三个值得到。
在训练的时候还采用了OHEM来挖掘难样本。
二、PMTD
baseline做法的缺点如下:
没考虑到通常的文本为四边形,只是将像素去分类,这样丢失了一些与形状有关的信息
将四边形的标定转换为像素级别的groundtruth会造成groundtruth不准的问题,如上面第一张图所示,框内会有一部分非文字的像素被转换为正样本
在Mask R-CNN中是先得到检测的框,然后对框内的物体进行分割,如果框的位置不准确,这样会导致分割出来的结果也不会准确,如上面的第二张图所示
2.1 PMTD的网络结构
如下图所示,基本和Mask R-CNN一致,只是在分割操作的训练和测试有所不同,不同的原因是由groundtruth标签和推断算法导致的,下面将详细介绍。
2.2 金字塔标签(Pyramid label)的生成
这部分也就是groundtruth的生成
以前的做法是将文本框中的像素置为1,其他置为0,groundtruth只有这两个值,现在groundtruth是[0,1]区间内的值。groundtruth的取值如下图所示,文章将文本框的中心称为金字塔顶,且该点的取值为1,金子塔底为文本标定框的边。图中每条三角形的边的取值都采用线性插值得到。
下面用公式解释
对于给定的四个点,对于框中的一点的值的计算如下:
首先对于金子塔尖,也就是框的中心点的计算如下所示:
对于每个,其中M和N指的是A、B、C、D四点中的两点,即区域、、、。
能用下式分解:
这样可以通过下式获得
因为P点在R区域内,所以应该满足下面条件
P点的取值为
2.4 损失函数
损失函数和Mask R-CNN类似如下式所示
其中 分别取值为1、1、5。
2.3 推断过程的后处理操作
知道了label的制作方法,网络结构和loss函数后就可以训练模型了,在得到模型进行推断过程中,经过网络的前向操作可以得到对应原图中每个像素的预测值。
得到这些预测值后需要经过平面聚类(plane clustering)的方法来得到最终的预测文本框。
首先要明确的是在一张图上,图是二维的,加上预测出的每个像素的值就是三维的了。将值看成是z轴的值,也就是第三维上的值。
下面来看看平面聚类(plane clustering)方法的伪代码
文章对于上面伪代码的标识解释不是很详细,下面文章描述一遍。
平面聚类(plane clustering)是一个迭代的过程,如下图所示:
迭代过程为:
- 将网络输出预测图,将大于0.1的像素看成是正样本,这些正样本组成一个集合称为P。将P的中心点作为金字塔的顶点,并设其值为1。预测出的boundingbox的四个顶点作为金字塔底的四个点(如上图虚线所示)。
- 经过上面步骤就可以得到初始的四个金字塔平面,然后将预测出来的点分配给离点最近的平面
- 所以点分配完成后采用最小二乘法更新平面的位置
- 回到第一步进行迭代
迭代的结束条件为最小二乘返回一个很小的值(文章设为1e-4)或者到达最大的迭代次数(文章设为10),这样就得到最终的文本框(如上图最后一图的虚线所示)。
到这里文章的算就介绍完了,文章的结果和试验等详细情况请到原文查询,还有文章还使用了空洞卷积来扩大感受野可以去文章看更详细的说明。