目标检测中的回归损失函数系列四:DIoU / CIoU Loss
论文:https://arxiv.org/pdf/1911.08287.pdf
开源代码:
https://github.com/Zzh-tju/DIoU-darknet
https://github.com/Zzh-tju/CIoU
IoU/GIoU Loss
IoU
通常定义如下:
其中
代表的是真实框。
代表的是预测框。
但是,IoU Loss 仅在边界框重叠时起作用,并且在非重叠情况下不会提供任何移动梯度,所以有了GIoU Loss
。尽管GIoU Loss
缓解非重叠情况下的梯度消失问题,但仍然存在一些局限性。如下图所示:
其中第一行是GIoU Loss
,第二行是DIoU Loss
。绿色框和黑色框分别代表target box
和anchor box
。蓝色和红色代表GIoU
和DIoU
的预测框。
由图看出,GIoU Loss
收敛很慢,因为GIoU Loss
首先是要增加预测框的大小,使其与目标框重叠,然后是利用GIoU Loss
的公式(如下)最大化边界框的重叠区域。
此外,由图2可以看到,当目标框完全包裹预测框的时候,IoU和GIoU的值都一样,此时GIoU退化为IoU, 无法区分其相对位置关系。通常GIoU Loss
无法很好地收敛于最新的检测算法中,从而导致检测不准确。
综上所述,对于不重叠的情况,IoU Loss会收敛到不好的解决方案,而GIoU Loss的收敛速度很慢,尤其是对于水平和垂直方向的盒子。 而且,将IoU和GIoU损失合并到对象检测管道中时,不能保证回归的准确性
基于以上,作者提出两个问题:
- 直接最小化预测框和目标框之间的标准化距离以实现更快的收敛是否可行?
- 预测框与目标框重叠时,如何使回归更准确,更快?
DIoU Loss
通常,基于IoU的损失可以定义为:
其中R(B,Bgt)是预测框B和目标框Bgt的惩罚项。
对于DIoU Loss,惩罚项定义为:
其中b和bgt表示B和Bgt的中心点,ρ(·)是欧几里得距离,c是覆盖两个盒子的最小封闭盒子的对角线长度。如下图所示:
然后可以将DIoU损失函数定义为:
DIoU Loss的优点如下:
- DIoU Loss与回归问题的scale无关(尺度不变性)
- 与GioU Loss类似,当边界框不与目标框重叠时,DIoU Loss仍然可以为边界框提供移动方向。
- DIoU损失可以直接最小化两个目标盒之间的距离,因此它比GioU损失收敛快得多。
- 在水平和垂直两种情况下,DIoU损失可以使收益损失迅速下降,而GioU损失几乎退化为IoU损失。
CIoU Loss
作者建议边界框回归的良好损失应考虑三个重要的几何因素,即重叠面积,中心点距离和纵横比。 通过合并坐标,IoU Loss考虑重叠区域,而GIoU Loss在很大程度上依赖于IoU损耗。 DIoU Loss旨在同时考虑边界框的重叠区域和中心点距离。 但是,边框的高宽比的一致性也是一个重要的几何因素,基于此,作者提出了CIoU Loss。
CIoU Loss的惩罚项定义如下:
其中α是一个正的权衡参数,而v衡量长宽比的一致性。
CIoU Loss的最终定义如下:
实验结果
下表显示了在YOLOv3上的使用IoU Loss,GIoU Loss,DIoU Loss, CIoU Loss获得的AP值。
由图可以看到,使用IoU作为评价指标,DIoU Loss可以提高性能,使AP的增益为3.29%,AP75的增益为6.02%。 CIoU Loss考虑了两个边界框的三个重要几何因素,带来了惊人的性能提升,即5.67%AP和8.95%AP75,证明了DIoU/CIoU Loss的有效性。
参考
https://blog.****.net/qiu931110/article/details/103330107
https://bbs.cvmart.net/topics/1436
https://zhuanlan.zhihu.com/p/94799295