论文阅读|论文阅读(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
文章图片
多边形滑窗。那这里其实是比较简单的,看过SSD的话就会觉得很简单,中间这个就是普通的矩形滑窗。那他就是在特征图上取多种不同比例的矩形。那这种滑窗的局限性我们在之前已经说过了。那本文就提出了右边这种多边形的滑窗,他既保留了原始的水平矩形框,又根据文字形状这一先验知识加入了几种多边形。在正方形内,加入两个四十五度角的矩形。在长矩形里面加入两个长平行四边形,在高举行里面加入两个高平行四边形。
那么有了这些更加灵活的滑窗,boundingbox就会更加准确,背景噪声也就会更少,置信度会更高,减少了很多误检。
那么左边这个图就是两种滑窗的对比,黑色是数据集中的原始框。蓝色虚线是使用以前的方法的boundingbox,我们可以看到他框出了很多背景噪声,那红色虚线是本文提出来的滑窗,他就更加接近于原始标签框。
2.3 Shared Monte-Carlo method
文章图片
那么我们之前说,对于每一个groundtruth,我们要计算他和我们预测出来的多边形框的重叠面积。也就是我们常说的IOU。那么之前的方法呢,大多只能计算规则矩形框的重叠面积。而且计算量特别大。那么,本文提出的蒙特卡洛算法可以在计算多边形重叠面积的时候,同时保持很高的速度和准确率。那这个方法能主要有两个步骤。
首先,我们对gt的外接矩形上均匀的分布1万个点。那么不规则gt的面积呢,就可以通过gt里面的点的数量和我外接矩形框的点的数量的比例,再乘以外接矩形的面积来计算出来。那么到这里,我们就计算出了gt的面积。
然后是第二步,对我预测出来的多边形框也取外接矩形。如果sw的外接矩形框和gt的外接矩形框没有交集的话,那么这个重叠面积就是零,那么我们就不需要进一步计算。如果重叠面积不是零的话,那我们首先需要按照第一步计算gt的面积那样来计算SW的面积。
那么到这里呢,我们就有了GT的面积和SW的面积。
然后呢。我们计算第一步中的gt这个框里面的点和sw这个框里面的点数有多少个是重叠的,也就说有多少是共有的,就是这些点即存在GT,有存在SW。那么通过这些共有的点的数量和外接矩形点的数量的比例,我们就可以计算出两个多边形的覆盖面积。
那么,作者还提出说这一步非常适合GPU的并行运算,因为我们可以使用多个线程来计算每一个滑窗和GT交集的面积。因此我们可以在很短的时间内处理几千个滑窗。
2.4 Sequential protocol of coordinates
文章图片
我们上一步得到的覆盖面积大于某个阈值的那些SW保留下来做进一步精确的回归。多边形的回归不像矩形那么简单,只需要回归两个坐标点就可以了。多边形的话一般来说是要回归四个坐标点。但是如果只回归四个坐标点可能会出问题,因为标注不清楚可能会导致网络不知道哪个点该回归到哪里。那么在训练前我们需要给这四个点排序。
那么就是本文提出来的顺序协议。用这个方法来唯一确定多边形的四个顶点的顺序。
第一步,确定四个点的第一个点,就是取x轴最小的哪个点,如果两个点的x轴坐标相同,那么就取y更小的那个点。然后以这个点为起点,分别连接另外三个点。那么中间这条线连接的就是第三个点。我们假设中间这条线的方程就是下面这个式子。
文章图片
那么第二个和第四个点就分布在这条线的左半部分和右半部分。把另外两个点的坐标带进去,判断这个式子是否大于0或者小于0。如果大于零,我们就把他当做第二个点,那么最后也就得到了第四个点。
然后我们连接13,24这两个点,得到两条线。比较这两条线的斜率,去更大斜率的那条线上的x更小的那个店作为新的第一个点,剩下的点按照上面的方法依次确定。
这样就唯一确定了这四个点的顺序。
文章图片
那么刚才我们获得了唯一的四边形的四个顶点的顺序。那么对于矩形框,我们只需要知道两个对角点的坐标,和两条边长,就可以得到这个矩形。
那么本文的多边形呢,作者是相对的回归了四个坐标。一共是回归了十个信息。就是下面这一串,前面两个xy是这个四边形的外接矩形的中心点坐标,就是中间这个红色点。
文章图片
然后后面的w1h1分别是中心店到上边界的距离。那以此类推,我们就得到了中心点和所有四个顶点的相对坐标。
这四个相对坐标就是分别使用中心点坐标加上相对的宽度和高度。那么需要注意的是,这里的w和h可以是负值。
文章图片
其实理论上可以只回归四个顶点坐标,但是这样的话,点和点之间不包含相对信息,那么就很难训练。
接下来就是损失函数Lreg,p星是预测出来的坐标,也就是滑窗经过回归以后得到的坐标。P的话是groundtruth。
文章图片
2.5 Smooth Ln loss
文章图片
那么本文提出了smooth ln损失来计算回归损失。而不是简单地使用l1损失。L1损失相比于在rcnn里面使用的l2损失,对离群值的敏感度更小,但是呢他很不稳定。有可能我做一个很小的调整,他会跳很大一段距离;有时候坐标调整很大的话,他却改变很小。
那么这里第二行展示的就是l1损失。,其中x表示的是真实值和预测值之间的距离。那么l1损失的倒数是在第三行。我们可以看到他是一个分段函数。因此在计算损失的时候肯定会产生一定的影响。
那从训练的角度来说,L2 loss 能够加快收敛的速度。因为当预测值和真实值相差比较大的时候,L1 loss 的梯度始终是 1,但是 L2 loss 的梯度和误差是同一量级,这样可以加快收敛。
文章图片
综合以上,作者提出了 smoothed Ln loss,综合了 L2 loss 和 smooth L1 loss 的特点。
ln损失的表达式,以及她的倒数如第二行第三行所示。
那么从上图中第二个式子很容易证明得到x的绝对值永远大于等于x的倒数。也就是说ln损失和l1一样,相比于l2损失,他们都对于异常值更加的不敏感。
文章图片
上图是这三种损失的一个直观表现。左边是函数曲线,右边是倒数曲线,我们可以看到有图中这根红色的线,他是最光滑的,没有分段。
3. Experiments
文章图片
那么最后是实验部分。作者分别对这三个指标进行了测试。
第一个是召回率,它用来评估模型找到文字的能力。
第二个是准确率,他用来评估预测的boundingbox的置信度,就是说我这个预测的框里面到底是不是文字。
第三个是F度量,这个是召回率和准确率的调和平均数。在任何检测任务中,最重要的就是F度量。
文章图片
那么作者是在ICDAR2015这个数据集上做的训练和测试。那么这个数据集是唯一一个word level的,多方向的,gt是多边形的数据集。那么这个模型的基本结构呢,是VGG16,仿照SSD,在中间卷积层做多边形滑窗。
文章图片
那么这个表格是不同方法的比较。我们可以看到这个这个绿色框狂出来的这个方法的F度量是在这个测试集上最高的。那么本文的F度量是比他搞了7个点。本文的召回率也是所有方法中最高的。那么他们的准确率却是差不多的。可见本文的确有很大的提升。
文章图片
那么这几张图是实验结果图,左边四个我们可以看到不管文字是什么方向,或者有什么大小差异。都是可以完美检测出来的。但是右边这两张图就是两个漏检的例子,他这个红色文字没有检测出来。右下角这个图是这个红色框狂出来的这个竖着的文字没有检测出来。
最后呢作者作了一个小小的展望,就是目前的这个数据集ICDAR2015是唯一一个多边形标签gt的数据集。那么对于文字这样的形状多变的检测任务,未来应该会有更多多边形标签的数据集。另外一点是尽管本文的方法已经取得了一个比较高的召回率,但是本文的人为设计的多边形滑窗很僵硬,肯定不是文字检测任务最优的选择。那么未来,形状自适应的滑窗应该也是一个主要发展方向之一。
【论文阅读|论文阅读(Deep Matching Prior Network: Toward Tighter Multi-oriented Text Detection)】