微信关注公众号【平凡而诗意】,原创技术文章第一时间推送。
本文介绍一篇AAAI 2020新提出的一种交并比损失函数,Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression[1],它在收敛速度、回归准确性方面相对于IoU和GIoU都有显著的提升,下面就来看一下DIoU的详细内容。
摘要
边界框回归是目标检测任务中非常关键的一环,交并比(IoU)是边界框回归过程中一个被广泛使用的评估指标。目前提出的IoU和广义IoU(GIoU)有利于评估IoU指标,但是,仍然存在两点问题,
- 收敛速度缓慢
- 回归不准确
因此,在这篇文章中,作者提出一种结合预测框和目标框之间距离的一种距离IoU(Distance-IoU,DIoU)损失,它在训练中收敛速度比IoU和GIoU要快的多。
本文总结了在边界框回归中比较重要的3个因素,
- 重叠面积
- 中心点距离
- 长宽比
这3个因素在本文非常重要,本文提出的两种改进方案DIoU和CIoU都是围绕这3点因素再展开。
IoU和GIoU
IoU(Intersection over Union)是评估边界框回归效果非常重要且被广泛使用的指标,它的定义如下,
其中Bgt是目标框,B是预测框。
IoU的损失函数定义如下,
从上面这个损失函数我们可以看出,如果目标框和预测框没有重叠的话,那么分子就为0,也就是说,损失函数一直为1。
也就是说,IoU损失仅在边界框有重叠的情况下起作用,而在没有重叠的情况梯度不会发生变化。
基于这个弊端,GIoU就出现了。
GIoU主要针对IoU损失在边界框无重叠的情况下梯度不变化的情况进行改进,它的做法是在原来IoU损失函数的基础上加了一个惩罚项,改进后的损失函数如下,
式中多了一个参数C,它代表的含义是能够同时覆盖B和Bgt的最小边界框。从上述公式中引入的惩罚项可以看出,在不重叠的情况下,预测框会不断向目标框移动。
虽然GIoU可以缓解不重叠情况下梯度消失问题,但是它依然存在一些局限性。
img我们再回到上述损失函数,可以看一下惩罚项,如果B和Bgt其中一个覆盖另外一个框的情况下,那么分子就变成了0,就如同上图所示,这时候惩罚项就没有作用了,它就又退化成IoU损失。
img上述图中,第一行代表GIoU几个边界框回归步骤,第二行代表DIoU的几个迭代步,图中绿色代表目标框,黑色代表锚框,蓝色代表GIoU的预测框,红色代表DIoU的预测框。
从上面迭代过程中预测框为了与目标框重叠,它在开始阶段会逐渐的增大尺寸。然而到后面阶段,GIoU会退化成IoU损失,因此,它需要在垂直和水平方向需要多次的迭代来达到收敛。
思考
思考2个问题,
•为了获得更快的收敛速度,是否可以直接最小化预测框和目标框之间的归一化距离?•当与目标框有重叠甚至存在包含关系时,如何使得回归速度更准确、更快速?
可以思考一下这两个问题,本文提出的DIoU和CIoU都是在围绕这两个问题在展开。
DIoU
读到这里可以看出,无论是IoU还是GIoU都是基于前面我们列出来的3个因素的第一点:重叠面积。
img因此,本文将第二点因素中心点距离考虑在损失函数之中提出了DIoU。
式中b和bgt分别代表B和Bgt的中心点,p(.)的含义代表欧式距离,c代表覆盖两个边界框最小框的对角线长度(上图中蓝色线)。
DIoU在IoU的基础上加入了一个惩罚项,用于度量目标框和预测框之间中心点的距离,我们在最小化边界框中心点的距离过程中,能够使得边界框收敛速度更快。
DIoU继承了IoU和GIoU的一些特性,
- DIoU损失仍然与回归问题的规模无关
- 与GIoU损失类似,DIoU损失在与目标框不重叠时可以为边界框明确移动方向
DIoU对比IoU和GIoU也有一些优越性,
- DIoU损失可以直接最小化两个盒子的距离,因此收敛速度比GIoU损失快得多
- 对于目标框和预测框存在包含关系的情况,DIoU损失可以使回归非常快,而GIoU损失几乎退化为IoU损失
到这里,就会打了思考部分的第一个问题:为了获得更快的收敛速度,是否可以直接最小化预测框和目标框之间的归一化距离。
CIoU
现在就来回答第二个问题:当与目标框有重叠甚至存在包含关系时,如何使得回归速度更准确、更快速?
现在把摘要中强调的一部分拿回来再重申一遍,边界框回归中比较重要的3个因素,
- 重叠面积
- 中心点距离
- 长宽比
DIoU考虑了重叠面积和中心点距离达到了很不错的效果,然而,长宽比这个重要的因素还没有被考虑进来。
因此,基于DIoU提出了CIoU损失,在原来DIoU损失函数的基础上引入了长宽比的一致性,改进后的损失函数为,
其中,v用于测量长宽比的一致性,
代表一个平衡参数,
其中重叠面积因子在回归中被赋给更高的优先级,特别是在非重叠情况下。
DIoU应用于非极大值抑制
在原始的NMS(Non-Maximum Suppression,非极大值抑制)会移除一些容易的检测框,其中IoU就是一个度量冗余检测框的一个重要指标,在抑制冗余检测框的过程中,唯一考虑的因素就是重叠面积,这样显然是不合理的,如果存在遮挡的情况,这样就会产生错误的抑制。
本文提出将DIoU应用于NMS中,这样不仅考虑重叠区域,还会将检测框与目标框中心点之间的距离考虑在内,这样能够有效避免上述错误。
实验结果
img从上图误差可视化中我们可以看出,(a)和(b)在中间凹陷部分对应的回归效果较好,但是,IoU损失在非重叠的情况下有较大误差,GIoU在水平和垂直情况下有较大误差。而本文提出的GIoU,无论在哪种情况下,都会产生非常小的误差。
img使用YOLOv3模型,在PASCAL VOC 2007数据集上对比IoU、GIoU、DIoU、CIoU四种损失的表现,选取的对比指标分别是AP和AP75。可以从上图中看出,在AP和AP75这两项评价指标方面DIoU对比IoU和GIoU均取得了显著的提升。
源代码
DIoU[2]目前源代码已经开源,代码是由Matlab编写,代码已经托管到Github,可以直接在Github搜索DIoU,也可以查看引用链接。
引用链接
[1] DIoU Paper: https://github.com/Zzh-tju/DIoU
[2] DIoU Code: https://github.com/Zzh-tju/DIoU
网友评论