初识
目标检测框有分割和定位两个任务,其中对于定位任务采用的损失通常为
l
n
l_n
ln范式,但这种形式的损失并不是最佳选择(无法达到最优的IoU指标)。那是不是可以直接采用IoU
作为损失呢?其损失函数形式如下所示:
看起来不错,直接针对关注的指标进行优化,但实际上IoU损失的应用范围有限,其只能在gt
与预测框重叠的时候有效。因为如果两个框不重叠,无论它们距离多远,其值永远为0,无法为网络更新提供有效的梯度。
因此在2019年的CVPR会议上提出了GIoU损失,其在IoU损失的基础上额外增加了一个损失项,如下所示:
其中
B
∪
B
g
t
B∪B^{gt}
B∪Bgt分别表示预测框和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计算重叠率】,使得对遮挡的情况更鲁棒。DIoU
和CIoU
很容易嵌入到当前的SOTA检测方法中,作者实验证明在各种网络和数据集上均得到了提升。
相知
进一步分析IoU和GIoU损失
实验挺有趣的,大家可以去读一下原文这一段:简单点来说,就是预设了一些检测框和目标框,用不同损失去进行优化,统计他们损失信息进行分析。
作者通过实验进一步分析了IoU
和GIoU
存在的不足,如下图所示(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。