Bootstrap

【目标检测】AAAI20 - 提升边界框回归《Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression》

初识

目标检测框有分割和定位两个任务,其中对于定位任务采用的损失通常为 l n l_n ln范式,但这种形式的损失并不是最佳选择(无法达到最优的IoU指标)。那是不是可以直接采用IoU作为损失呢?其损失函数形式如下所示:

在这里插入图片描述
看起来不错,直接针对关注的指标进行优化,但实际上IoU损失的应用范围有限,其只能在gt与预测框重叠的时候有效。因为如果两个框不重叠,无论它们距离多远,其值永远为0,无法为网络更新提供有效的梯度

因此在2019年的CVPR会议上提出了GIoU损失,其在IoU损失的基础上额外增加了一个损失项,如下所示:
在这里插入图片描述
其中 B ∪ B g t B∪B^{gt} BBgt分别表示预测框和GT的并,C表示两者最小外接矩形的面积(闭包区域)。在采用GIoU损失之后,如果两个框不重叠,它们之间也会计算出损失,并且距离越远损失值越大,这样为优化提供了方向。

那这样总行了吧?不论什么情况都可以进行优化了。但作者通过实验发现GIoU仍存在需要限制,在一些特殊情况下表现不好,并且收敛很慢。而本文提出的DIoU损失可以解决这些问题,其提出了一种新的损失项,直接最小化两个框中心之间的归一化距离
在这里插入图片描述
其中 ρ \rho ρ表示欧式距离, c c c为两框之间的对角线长度,如下图所示。
在这里插入图片描述
作者做了一个小实验,如下所示,其中绿色框表示GT,黑色框表示预测框(anchor),蓝色框表示用GIoU损失优化得到结果,红色框表示用本文提出的DIoU损失优化的结果。从图上可以看出来,GIoU损失会先想办法增加预测框的大小,使其与目标框重叠,然后再最大化边界框的重叠面积【退化到IoU损失】。而DIoU损失直接优化两个框之间的距离,能够更快的收敛(120个epoch)。

在这里插入图片描述
并且还可以进一步引入了长宽比信息,在DIoU的基础上提出了CIoU(Complete IoU)损失,进一步加速收敛和提升性能。并且DIoU还可以用于NMS中的评价指标【代替IoU计算重叠率】,使得对遮挡的情况更鲁棒。DIoUCIoU很容易嵌入到当前的SOTA检测方法中,作者实验证明在各种网络和数据集上均得到了提升。

相知

进一步分析IoU和GIoU损失

实验挺有趣的,大家可以去读一下原文这一段:简单点来说,就是预设了一些检测框和目标框,用不同损失去进行优化,统计他们损失信息进行分析。

在这里插入图片描述

作者通过实验进一步分析了IoUGIoU存在的不足,如下图所示(x,y表示每个候选框的位置,GT的坐标为(10,10),纵轴表示loss)。IoU损失只对那些与GT重叠的候选框优化比较好;GIoU对于那些落于水平方向和垂直方向上的检测框优化得不够好(容易退化到IoU Loss,虽然用足够的训练轮次和合适的学习率能够让其优化到目标框,但这会导致训练非常慢);而本文提出的DIoU对于各种情况的候选框都能优化得很好。
在这里插入图片描述
DIoU损失和GIoU损失

DIoU的具体形式在上文中已经表述的非常清楚了,在IoU损失的基础上增加了一个与GIoU不同的惩罚项,去优化两个框之间的归一化中心距离。
在这里插入图片描述
它即继承了IoU,GIoU的一些很好的特性【尺度不变性(无视检测框的尺寸),能够处理不重叠的情况,损失范围在[0,2)之间(0最优,2表示无限远)】,也解决了GIoU存在的一些问题【收敛慢,对于水平/垂直方向的候选框优化得不够好】。
在这里插入图片描述
作者分析,对于检测框回归任务来说,一个好的损失函数必须考虑三个方面:重叠率、中心点距离以及长宽比。DIoU已经考虑了前两个方面,作者进一步加入了长宽比的限制,提出了CIoU损失:
在这里插入图片描述
其中 v v v用于衡量目标框和预测框之间的长宽比一致性, α α α表示权衡参数,使得在优化过程中,重叠率的优先级更高。
在这里插入图片描述
在这里插入图片描述
还有一点需要注意的就是,在优化过程中, v v v中的 w , h w,h w,h的梯度计算需要指定,如下所示。为了解决梯度弥散的问题,将 1 w 2 + h 2 \frac{1}{w^2+h^2} w2+h21置为1。

在这里插入图片描述
将DIoU用于NMS

NMS是用于处理预测结果中的重叠框,通常使用IoU来进行判断(根据阈值从高到低选择,每次选择一个后,排除与其IoU在某个范围内的其他框)。但使用IoU只考虑重叠率,对于遮挡的情况处理得不够好,导致错误的抑制。因此可以将DIoU代替IoU,因为其不仅考虑重叠面积,还考虑了两框中心的归一化距离【两个中心点很远的检测框可能定位了不同的物体,不应将其移除】:
在这里插入图片描述
部分实验

下图展示了各种损失在YOLOv3和Faster RCNN上进行的实验,其中将损失替换成CIoU以及加上DIoU-NMS之后,整体的性能提升了非常多。
在这里插入图片描述
在这里插入图片描述

其中可以看到,加入长宽比约束之后对于小目标的检测性能有所下降,但是整体性能仍然是提升的。小目标下降也可以理解,这是因为对于小目标的检测来说,中心点之间的距离更重要,而引入长宽比会弱化中心距离的重要性。

下图展示了faster rcnn网络在COCO数据集上用不同损失训练得到的可视化效果
在这里插入图片描述
下图展示了普通NMS和DIoU-NMS之间的区别
在这里插入图片描述

回顾

这篇文章发表于AAAI2020,作者团队来自由天津大学和中国人民公安大学。整体方案的创新思路非常简单,改进很直观易懂,并且效果确实很好,让我觉得有意思的是,作者做了许多仿真实验,从不同的角度分析了当前方案存在的问题,以读者能够更直观感受到,喔!这确实是一个问题,然后提出的方法又正好解决了这个问题!如果一上来就直接介绍方法和实验结果,虽然让人感到很惊讶,但肯定没有这么让人印象深刻。

方法简单,又很容易嵌入到各种的检测模型当中,不管是对于比赛还是实际工业应用中都是一个可以尝试的trick。

参考

[1] https://zhuanlan.zhihu.com/p/94799295

;