论文阅读:Deep Matching Prior Network: Toward Tighter Multi-oriented Text Detection
论文链接:Deep Matching Prior Network: Toward Tighter Multi-oriented Text Detection
1. Introduction
要说文字检测,那一定要先看一下目标检测。目标检测是近几年深度学习在计算机视觉领域发展最好的应用之一。
前一段时间华盛顿大学发布YOLO V3。这个新模型在取得相当准确率的情况下实现了检测速度的很大提升,一般它可以比 R-CNN 快 1000 倍、比 Fast R-CNN 快 100 倍。
那上图呢可以很好地展示什么是目标检测,他就是在图中框出可能存在的物体,并且给出这是什么物体以及他们的置信度。
相比于目标检测,文字检测就简单很多了。我们只需要检测出图中可能存在文字的区域,把他们框出来就可以了。至于框出来的字写的是啥,那是后面文字识别要做的事情。
其实文字检测任务很早以前就有了,但是传统方法都很复杂,要经过很多中间步骤才能得到最终的结果。那随着深度学习,以及目标检测的发展,文字检测也很快的发展起来了。因为很多文字检测的文章都会借鉴目标检测算法的思想来做。那前两年的文章还比较好懂,基本上都是用回归框来做的。直到2017,18年的文章,逐渐丢弃回归框,更偏向图像分割这方面来做。那这篇文章是2017年的CVPR,她还是用回归框来做的。首先看一下题目,他是说使用深度匹配的先验网络,来做更加紧凑的多方向文字检测。这里的先验指的是考虑到场景图像中文字的先验知识,就是他们的一些分布情况,根据这些先验知识设计的回归框。
1.1 Issues
那场景图片中的文字呢,往往有以下几个特点。
1) 他们可能会是多方向的(Multi-orientation)
2) 他们可能会有透视畸变,就是我们常常说的近大远小(Perspective distortion)
3) 同一张图片中的文字大小,颜色和尺度可能会有很大差异(Variation of text size, color and scale)
那么最近呢,也有很多文章是针对多方向文字检测做的。它们中的绝大部分都是使用旋转的矩形框来框住不同方向的文本。但是这种方法会有很多缺陷。我们看一下上面这组图。
左边一列是本文提出的方法,右边是旋转矩形得到的结果。从第一行右边这个图我们可以看到,这几个矩形框的重叠面积还是比较大的。那当我们使用非极大值抑制的时候,多个可能存在文本的矩形框,由于这种不必要的重叠,可能会消除正确的结果。那作者提出的结果,就是第一行左边这个图,他使用不规则的多边形可以更加契合文字边缘轮廓。
中间一行是说旋转矩形框可能会漏掉很多大文本旁边的小文本,或者边缘处的文本。那左边作者提出来的方法就可以很好的避免这个问题。
那最后一行的话是说矩形框里可能会存在很多冗余信息,那么就使后续的识别任务会非常困难。我们可以看到第三行右边这个图的绿色矩形框他其实左上角框出了很多不是文字的背景噪声。而本文提出来的方法就是第三行左边这个图他可以非常好的框出这个文字的轮廓。
那么这三点就是使用矩形框来做文字检测的三大局限。
1.2 Contributions
那么作者就在本文提出了四大贡献。
1) 多边形的滑窗(Quadrilateral sliding window),普通方法里的滑窗,一般来说都是矩形,那么本文的话是使用的多边形的滑窗,可以更加契合场景中的不规则文字。那本文也是首个使用多边形滑窗的算法来做文字检测,可以很大程度上提高召回率。
2)本文提出了一个顺序协议(Sequential protocol),这个主要是在回归的时候准确的有序的找到回归点的坐标。它可以唯一决定任意平面凸四边形的四个顶点的顺序。
3) 作者提出了一个共享的蒙特卡洛算法(Shared Monte-Carlo),那这个算法呢,主要是用来在计算非极大值抑制的时候,可以快速准确地计算两个多边形的重叠面积。
4) 作者提出了一个光滑的ln损失(Smooth Ln loss)。那之前的文章里使用的基本上都是l1损失或者l2损失,ln损失可以提高模型的鲁棒性和定位精度。2. Proposed method
2.1 Steps
那我们现在来看一下本文提出的这个算法的主要步骤。第一个步骤是大致的找到回归框,那么基于文字固有形状这一先验知识,我们设计了几个不同的多边形滑窗。那么这些滑窗会在网络结构中间的特定卷积层来做的。通过比较boundingbox,就是我预测出来的这个框和groundtruth,就是数据集里面的原始标签的重叠面积,我们可以确定哪些预测出来的框可以用于下一步的精确回归。那么在这一过程里面由于需要计算boundingbox和groundtruth的重叠面积,那这两个又都是多边形,因此我们提出共享蒙特卡洛算法快速准确的计算多边形面积。
那第二大步骤呢,就是精确地回归预测的boundingbox。boundingbox和groundtruth的重叠面积大于某个阈值的将会留下来用于精确回归。那本文的多边形回归相比于以前的旋转矩形可以取得更精确的效果。那么在这里,本文在相对回归的时候提出了一个顺序协议,它可以唯一确定多边形顶点顺序。那最后呢,作者提出了ln损失。
2.2 Quadrilateral sliding windows
那么有了这些更加灵活的滑窗,boundingbox就会更加准确,背景噪声也就会更少,置信度会更高,减少了很多误检。
那么左边这个图就是两种滑窗的对比,黑色是数据集中的原始框。蓝色虚线是使用以前的方法的boundingbox,我们可以看到他框出了很多背景噪声,那红色虚线是本文提出来的滑窗,他就更加接近于原始标签框。
2.3 Shared Monte-Carlo method
首先,我们对gt的外接矩形上均匀的分布1万个点。那么不规则gt的面积呢,就可以通过gt里面的点的数量和我外接矩形框的点的数量的比例,再乘以外接矩形的面积来计算出来。那么到这里,我们就计算出了gt的面积。
然后是第二步,对我预测出来的多边形框也取外接矩形。如果sw的外接矩形框和gt的外接矩形框没有交集的话,那么这个重叠面积就是零,那么我们就不需要进一步计算。如果重叠面积不是零的话,那我们首先需要按照第一步计算gt的面积那样来计算SW的面积。
那么到这里呢,我们就有了GT的面积和SW的面积。
然后呢。我们计算第一步中的gt这个框里面的点和sw这个框里面的点数有多少个是重叠的,也就说有多少是共有的,就是这些点即存在GT,有存在SW。那么通过这些共有的点的数量和外接矩形点的数量的比例,我们就可以计算出两个多边形的覆盖面积。
那么,作者还提出说这一步非常适合GPU的并行运算,因为我们可以使用多个线程来计算每一个滑窗和GT交集的面积。因此我们可以在很短的时间内处理几千个滑窗。
2.4 Sequential protocol of coordinates
那么就是本文提出来的顺序协议。用这个方法来唯一确定多边形的四个顶点的顺序。
第一步,确定四个点的第一个点,就是取x轴最小的哪个点,如果两个点的x轴坐标相同,那么就取y更小的那个点。然后以这个点为起点,分别连接另外三个点。那么中间这条线连接的就是第三个点。我们假设中间这条线的方程就是下面这个式子。
然后我们连接13,24这两个点,得到两条线。比较这两条线的斜率,去更大斜率的那条线上的x更小的那个店作为新的第一个点,剩下的点按照上面的方法依次确定。
这样就唯一确定了这四个点的顺序。
那么本文的多边形呢,作者是相对的回归了四个坐标。一共是回归了十个信息。就是下面这一串,前面两个xy是这个四边形的外接矩形的中心点坐标,就是中间这个红色点。
然后后面的w1h1分别是中心店到上边界的距离。那以此类推,我们就得到了中心点和所有四个顶点的相对坐标。
其实理论上可以只回归四个顶点坐标,但是这样的话,点和点之间不包含相对信息,那么就很难训练。
2.5 Smooth Ln loss
那么这里第二行展示的就是l1损失。,其中x表示的是真实值和预测值之间的距离。那么l1损失的倒数是在第三行。我们可以看到他是一个分段函数。因此在计算损失的时候肯定会产生一定的影响。
那从训练的角度来说,L2 loss 能够加快收敛的速度。因为当预测值和真实值相差比较大的时候,L1 loss 的梯度始终是 1,但是 L2 loss 的梯度和误差是同一量级,这样可以加快收敛。
ln损失的表达式,以及她的倒数如第二行第三行所示。
那么从上图中第二个式子很容易证明得到x的绝对值永远大于等于x的倒数。也就是说ln损失和l1一样,相比于l2损失,他们都对于异常值更加的不敏感。
3. Experiments
第二个是准确率,他用来评估预测的boundingbox的置信度,就是说我这个预测的框里面到底是不是文字。
第三个是F度量,这个是召回率和准确率的调和平均数。在任何检测任务中,最重要的就是F度量。
最后呢作者作了一个小小的展望,就是目前的这个数据集ICDAR2015是唯一一个多边形标签gt的数据集。那么对于文字这样的形状多变的检测任务,未来应该会有更多多边形标签的数据集。另外一点是尽管本文的方法已经取得了一个比较高的召回率,但是本文的人为设计的多边形滑窗很僵硬,肯定不是文字检测任务最优的选择。那么未来,形状自适应的滑窗应该也是一个主要发展方向之一。