背景

让我们回到IoU损失和GioU损失。IoU损失可以表示为:AAAI2020 目标检测算法DIoU YOLOv3 更加稳定有效的目标框回归损失,性能提升近3%,从IoU的角度看,回归损失是可以解决的,但它的缺点是当两个框不想相交时,IoU损失总是1,不能给出优化方向。所以乔来了。GioU可以用以下公式表示: AAAI2020 目标检测算法DIoU YOLOv3 更加稳定有效的目标框回归损失,性能提升近3%,可以看到,GioU在IoU的基础上添加了一个项,其中[formula]表示包含两个框的最小矩形,因此可以优化两个框不相交的情况。不过,GioU还是有问题。当两个框相交时,GioU损失降低为IoU损失。因此,当包含预测盒bbox和地面真值bbox时,特别是在水平和垂直方向上,很难进行优化。这里的一个猜想是,在水平方向和垂直方向上,[公式]的值没有在其他方向上增长得快,因此对这两个方向的惩罚不够,导致收敛速度减慢。如图2和图4所示:

AAAI2020 目标检测算法DIoU YOLOv3 更加稳定有效的目标框回归损失,性能提升近3%

图2:在这些情况下,GIoU损耗会降低为IoU损耗,而我们的DIoU损耗仍然可以区分。 绿色和红色分别表示目标框和预测框

AAAI2020 目标检测算法DIoU YOLOv3 更加稳定有效的目标框回归损失,性能提升近3%

图4:可视化最终迭代T的IoU,GioU和DIoU损失的回归误差,即每个坐标n的E(T,n)。 我们注意到(a)和(b)中的盆地对应于良好的回归情况。 可以看到,对于非重叠情况,IoU损失有较大的误差;对于水平和垂直情况,GioU损失具有较大的误差,而我们的DIoU损失在各处导致的回归误差很小。

 

同时,为了更生动地说明这一点,我们看一下论文的图1:

AAAI2020 目标检测算法DIoU YOLOv3 更加稳定有效的目标框回归损失,性能提升近3%

图1:按GIoU损失(第一行)和DIoU损失(第二行)的边界框回归步骤。 绿色和黑色分别表示目标框和锚框。 蓝色和红色分别表示GIoU损失和DIoU损失的预测框。 GIoU丢失通常会增加预测框的大小以与目标框重叠,而DIoU丢失会直接最小化中心点的标准化距离。

 

提出的问题

 

在上面分析的基础上,笔者提出了以下两个问题:

 

  • 直接最小化锚与目标框之间的规范化距离以获得更快的收敛速度是否可行?

  • 当回归损失与目标盒重叠甚至包含目标框时,如何使回归损失更准确、收敛更快?

DIoU Loss

 

为了解决第一个问题,本文提出了Distance-IoU Loss(DIoU Loss)。

AAAI2020 目标检测算法DIoU YOLOv3 更加稳定有效的目标框回归损失,性能提升近3%

在这个损失函数中,AAAI2020 目标检测算法DIoU YOLOv3 更加稳定有效的目标框回归损失,性能提升近3%分别表示锚箱和目标箱的中心点,p表示两个中心点之间的欧氏距离,其中,c表示锚定框和目标可以同时覆盖框中最小矩形的对角线距离。因此,锚箱和目标箱之间的标准化距离在DIoU中建模。可视化显示如图5所示:

 

AAAI2020 目标检测算法DIoU YOLOv3 更加稳定有效的目标框回归损失,性能提升近3%

图5:边界框回归的DIoU损失,其中中心点之间的标准化距离可以直接最小化。 c是覆盖两个框的最小封闭框的对角线长度,d =ρ(b,b gt)是两个框的中心点的距离。

 

DIoU Loss的好处如下:

 

  • 与GioU Loss类似,当边界框不与目标框重叠时,DIoU Loss仍然可以为边界框提供移动方向。

  • DIoU损失可以直接最小化两个目标盒之间的距离,因此它比GioU损失收敛快得多。

  • 在水平和垂直两种情况下,DIoU损失可以使收益损失迅速下降,而GioU损失几乎退化为IoU损失。

CIoU Loss

 

为了回答第二个问题,作者提出了Complete-IoU Loss。一个好的目标框回归损失应该考虑三个重要的几何因素:重叠面积、中心点距离和纵横比。为了规范化坐标尺度,GIoU使用IOU,初步解决了IOU为0时无法优化的问题。然后在GioU损失的基础上,考虑边界框的重叠区域和与中心点的距离。因此,还有最后一点没有考虑损失,即锚长宽比与目标框架之间长宽比的一致性。在此基础上,本文提出了CIoU损失。

AAAI2020 目标检测算法DIoU YOLOv3 更加稳定有效的目标框回归损失,性能提升近3%

从以上损失可以看出,CIoU比DIoU多了两个参数a和v。a是用来平衡比例的系数,v用来测量锚箱和目标箱之间比例的一致性。其公式如下:

AAAI2020 目标检测算法DIoU YOLOv3 更加稳定有效的目标框回归损失,性能提升近3%

然后在推导w和h时,公式如下:

AAAI2020 目标检测算法DIoU YOLOv3 更加稳定有效的目标框回归损失,性能提升近3%

因为AAAI2020 目标检测算法DIoU YOLOv3 更加稳定有效的目标框回归损失,性能提升近3%的项在计算时会变得很小,因为w,h的值的范围是[0,1]。在回归问题中,很难返回一个大的值。因此,通常用原始图像的长度和宽度来处理原始w和h。所以本文直接把公式AAAI2020 目标检测算法DIoU YOLOv3 更加稳定有效的目标框回归损失,性能提升近3%设为常数1,这样就不会引起梯度方向的改变。虽然值会改变,但这会加快收敛速度。

 

从a的定义来看,损失函数将更倾向于向增加重叠区域的方向优化,特别是当IoU为0时,这符合我们的要求。同时,在nms阶段,一般的评价标准是IOU,建议在这里用DIOU代替。这样就考虑了中心点距离的信息,在一定程度上提高了效果。

 

AAAI2020 目标检测算法DIoU YOLOv3 更加稳定有效的目标框回归损失,性能提升近3%

可视化实验

 

本文做了一个有趣的实验来探讨IoU和GioU的问题。我认为有必要介绍一下。实验如图3所示:

AAAI2020 目标检测算法DIoU YOLOv3 更加稳定有效的目标框回归损失,性能提升近3%

图3:仿真实验:(a)通过考虑不同的距离,比例和长宽比采用1,715,000个回归案例,(b)迭代t时不同损失函数的回归误差总和(即,P n E(t,n))曲线 。

 

其中,绿色框表示回归任务需要返回的7个不同尺度的目标框,7个目标框的中心坐标均为[10,10]。蓝点代表所有锚的中心点,在所有方向和所有距离。总共有[公式]蓝点,有[公式]锚定框,每个框需要返回到[公式]目标框,所以总共有[公式]回归方程。从图3(b),我们可以看到,在训练相同的代数(200次)之后,三个损失最终具有每个锚的误差分布。从IoU误差曲线可以看出,锚距边缘越近,误差越大,与目标帧不重叠的锚基本上不能返回。从GioU误差曲线可以看出,对于一些不重叠的锚,GioU的性能优于IoU。但是,由于GioU仍然严重依赖于IoU,因此在两个垂直方向上的误差很大,基本上很难收敛。这就是GioU不稳定的原因。从DIoU的误差曲线可以看出,对于不同的锚距、方向、面积和比例,DIoU可以得到较好的回归。CIoU是相似的。

 

实验结果

 

表1显示了使用YOLOv3上的使用IoU Loss,GIoU Loss,DIoU Loss, CIoU Loss获得的AP值。可以看到CIoU Loss涨了快3个点,证明了这种Loss的有效性。

AAAI2020 目标检测算法DIoU YOLOv3 更加稳定有效的目标框回归损失,性能提升近3%

结论

在本文中论文地址或源码下载地址:关注“图像算法”wx公众号 回复"DIoU",我们提出了两种损失,即DIoU损失和CIoU损失,用于边界框回归,同时提出了DIoUNMS来抑制冗余检测框。通过直接最小化两个中心点的标准化距离,DIoU损耗可以比GIoU损耗更快地收敛。CIoU损耗考虑了三个几何特性,即重叠区域,中心点距离和纵横比,并导致更快的收敛和更好的性能。所提出的损耗和DIoU-NMS可以轻松整合到任何物体检测管道中,并在基准测试中获得出色的结果。