《Distance-IoU Loss:Faster and Better Learning for Bounding Box Regression》论文笔记
代码地址:DIoU
1. 概述
导读:这篇文章主要的贡献在边界框损失函数的优化上面,传统上使用范数的损失,如smooth-L1或是其对应的改进balanced-L1,但是这些损失函数并不直接与检测框的质量相关。将检测框的质量作为回归的度量就引入IoU损失函数,为了弥补IoU损失函数在不相交的时候不可导的问题引入GIoU,但是GIoU也是存在收敛速度慢且回归不准确(GIoU在两个框相交时退化为IoU损失,且无法很好处理包含的情况)的问题。对此文章提出了将两个框的归一化距离作为损失度量的损失DIoU(Distance IoU),从而加快回归收敛与提升回归精度。在此之外,文章将框的IoU、中心点距离、以及框的宽高比例作为衡量预测与目标的要素,从而得到新的损失度量CIoU(Complete IoU)。另外,文章将提出的DIoU用作NMS的度量也会带来性能的提升。
边界框的损失函数从的范数损失到IoU损失的转换是直接将度量标准作为损失函数的过程,对应的IoU数学表达为:
则采用其作为边界框的回归损失,其定义为:
但是,上面的IoU-Loss存在边界框不相交的时候无法产生损失梯度的问题,对此的解决办法就再在外面套一个大框,从而得到的新的损失函数GIoU:
上述的损失函数解决了在不相交情况下不可导的问题,但是却存在收敛速度慢与性能不佳的问题,见下图是GIoU与文章提出的DIoU的比较:
上图中可以看出,GIoU在开始的时候需要将检测结果方法使其与目标框相交,之后才开始缩小检测结果与GT重合,这就带来了需要较多的迭代次数才能收敛问题,特别是对于水平与垂直框的情况下。此外,其在包含情况下检测框的性能无法有效度量,见下图所示
文章将上面涉及到的三种损失函数的错误画出进行对比:
2. 损失函数
文中将基于IoU的损失定义为如下形式:
其中的计算函数就是文章中着重修正的地方。
2.1 DIoU损失
这里首先引出DIoU,后面的CIoU也是在这个基础上进行改进(增加长宽比例约束)得到的。这将额外的惩罚项由原有GIoU中的定义替换为了下面的形式:
其中,是的中心点,是欧几里得距离,是包含预测框与目标框的最小矩形的对角线长度(参考GIoU中C的定义)。上诉的几个参数在几何上的表示见下图所示:
则新的DIoU损失函数就被定义为:
DIoU与IoU、GIoU的关系:
- 1)DIoU依然是具有尺度不变性的;
- 2)与GIoU一样在两个框不相交的时候也能产生梯度,然后进行回归;
- 3)在检测框与预测框完全匹配的时候,他们之间的损失值为:,当两个框离得很远的时候:
DIoU损失相比IoU与GIoU的优势:
- 1)从图1与3可以看出DIoU收敛速度更快;
- 2)在两个框包含、水平与垂直方向的时候,DIoU仍能快速回归,而在这样的情况下GIoU退化为IoU损失;
2.2 CIoU损失
上面提出的DIoU是只考虑了框的位置关系,但是并没有考虑检测框与目标框的几何关系,因而这里还对框的几何关系做了约束,这里的约束是通过引入度量实现的,其定义为:
对于这个新引入的度量使用参数进行调和,因而新的损失函数就可以定义为:
其中,参数。
对于新引入的惩罚维度中的的梯度计算表达为:
其中由于的范围很小,作为被除数会导致较大的梯度,这样会导致网络不稳定,因而文中将最后一项设置为
2.3 使用DIoU改进NMS
之前的NMS操作直接使用IoU剔除多余的检测框,在引入DIoU之后则新的剔除规则被描述为:
其中,是检测框分类置信度,是NMS的阈值。
3. 实验结果
baseline为YOLO-V3
baseline为SSD
baseline为Faster RCNN