DIoU损失函数详解,源码已开源

本文介绍一篇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可以缓解不重叠情况下梯度消失问题,但是它依然存在一些局限性。

我们再回到上述损失函数,可以看一下惩罚项,如果B和Bgt其中一个覆盖另外一个框的情况下,那么分子就变成了0,就如同上图所示,这时候惩罚项就没有作用了,它就又退化成IoU损失。

上述图中,第一行代表GIoU几个边界框回归步骤,第二行代表DIoU的几个迭代步,图中绿色代表目标框,黑色代表锚框,蓝色代表GIoU的预测框,红色代表DIoU的预测框。

从上面迭代过程中预测框为了与目标框重叠,它在开始阶段会逐渐的增大尺寸。然而到后面阶段,GIoU会退化成IoU损失,因此,它需要在垂直和水平方向需要多次的迭代来达到收敛。

思考

思考2个问题,

•为了获得更快的收敛速度,是否可以直接最小化预测框和目标框之间的归一化距离?•当与目标框有重叠甚至存在包含关系时,如何使得回归速度更准确、更快速?

可以思考一下这两个问题,本文提出的DIoU和CIoU都是在围绕这两个问题在展开。

DIoU

读到这里可以看出,无论是IoU还是GIoU都是基于前面我们列出来的3个因素的第一点:重叠面积

因此,本文将第二点因素中心点距离考虑在损失函数之中提出了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中,这样不仅考虑重叠区域,还会将检测框与目标框中心点之间的距离考虑在内,这样能够有效避免上述错误。

实验结果

从上图误差可视化中我们可以看出,(a)和(b)在中间凹陷部分对应的回归效果较好,但是,IoU损失在非重叠的情况下有较大误差,GIoU在水平和垂直情况下有较大误差。而本文提出的GIoU,无论在哪种情况下,都会产生非常小的误差。

使用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