《Distance-IoU Loss:Faster and Better Learning for Bounding Box Regression》论文笔记

代码地址:DIoU

1. 概述

导读:这篇文章主要的贡献在边界框损失函数的优化上面,传统上使用LnL_n范数的损失,如smooth-L1或是其对应的改进balanced-L1,但是这些损失函数并不直接与检测框的质量相关。将检测框的质量作为回归的度量就引入IoU损失函数,为了弥补IoU损失函数在不相交的时候不可导的问题引入GIoU,但是GIoU也是存在收敛速度慢且回归不准确(GIoU在两个框相交时退化为IoU损失,且无法很好处理包含的情况)的问题。对此文章提出了将两个框的归一化距离作为损失度量的损失DIoU(Distance IoU),从而加快回归收敛与提升回归精度。在此之外,文章将框的IoU、中心点距离、以及框的宽高比例作为衡量预测与目标的要素,从而得到新的损失度量CIoU(Complete IoU)。另外,文章将提出的DIoU用作NMS的度量也会带来性能的提升。

边界框的损失函数从lnl_n的范数损失到IoU损失的转换是直接将度量标准作为损失函数的过程,对应的IoU数学表达为:
IoU=BBgtBBgtIoU=\frac{|B\cap B^{gt}|}{|B\cup B^{gt}|}
则采用其作为边界框的回归损失,其定义为:
LIoU=1BBgtBBgtL_{IoU}=1-\frac{|B\cap B^{gt}|}{|B\cup B^{gt}|}
但是,上面的IoU-Loss存在边界框不相交的时候无法产生损失梯度的问题,对此的解决办法就再在外面套一个大框,从而得到的新的损失函数GIoU:
LGIoU=1IoU+CBBgtCL_{GIoU}=1-IoU+\frac{|C-B\cup B^{gt}|}{|C|}
上述的损失函数解决了在不相交情况下不可导的问题,但是却存在收敛速度慢与性能不佳的问题,见下图是GIoU与文章提出的DIoU的比较:
《Distance-IoU Loss:Faster and Better Learning for Bounding Box Regression》论文笔记
上图中可以看出,GIoU在开始的时候需要将检测结果方法使其与目标框相交,之后才开始缩小检测结果与GT重合,这就带来了需要较多的迭代次数才能收敛问题,特别是对于水平与垂直框的情况下。此外,其在包含情况下检测框的性能无法有效度量,见下图所示
《Distance-IoU Loss:Faster and Better Learning for Bounding Box Regression》论文笔记
文章将上面涉及到的三种损失函数的错误画出进行对比:
《Distance-IoU Loss:Faster and Better Learning for Bounding Box Regression》论文笔记

2. 损失函数

文中将基于IoU的损失定义为如下形式:
L=1IoU+R(B,Bgt)L=1-IoU+R(B,B^{gt})
其中的计算函数RR就是文章中着重修正的地方。

2.1 DIoU损失

这里首先引出DIoU,后面的CIoU也是在这个基础上进行改进(增加长宽比例约束)得到的。这将额外的惩罚项由原有GIoU中的定义替换为了下面的形式:
RDIoU=ρ2(b,bgt)c2R_{DIoU}=\frac{\rho^2(b,b^{gt})}{c^2}
其中,b,bgtb,b^{gt}B,BgtB,B^{gt}的中心点,ρ()\rho(\cdot)是欧几里得距离,cc是包含预测框与目标框的最小矩形的对角线长度(参考GIoU中C的定义)。上诉的几个参数在几何上的表示见下图所示:
《Distance-IoU Loss:Faster and Better Learning for Bounding Box Regression》论文笔记
则新的DIoU损失函数就被定义为:
LIoU=1IoU+ρ2(b,bgt)c2L_IoU=1-IoU+\frac{\rho^2 (b,b^{gt})}{c^2}
DIoU与IoU、GIoU的关系:

  • 1)DIoU依然是具有尺度不变性的;
  • 2)与GIoU一样在两个框不相交的时候也能产生梯度,然后进行回归;
  • 3)在检测框与预测框完全匹配的时候,他们之间的损失值为:LIoU=LGIoU=LDIoU=0L_{IoU}=L_{GIoU}=L_{DIoU}=0,当两个框离得很远的时候:LGIoU=LDIoU2L_{GIoU}=L_{DIoU} \rightarrow 2

DIoU损失相比IoU与GIoU的优势:

  • 1)从图1与3可以看出DIoU收敛速度更快;
  • 2)在两个框包含、水平与垂直方向的时候,DIoU仍能快速回归,而在这样的情况下GIoU退化为IoU损失;

2.2 CIoU损失

上面提出的DIoU是只考虑了框的位置关系,但是并没有考虑检测框与目标框的几何关系,因而这里还对框的几何关系做了约束,这里的约束是通过引入度量vv实现的,其定义为:
v=4π2(arctanwgthgtarctanwh)2v=\frac{4}{\pi^2}(arctan\frac{w^{gt}}{h^{gt}}-arctan\frac{w}{h})^2
对于这个新引入的度量使用参数α\alpha进行调和,因而新的损失函数就可以定义为:
LCIoU=1IoU+ρ2(b,bgt)c2+αvL_{CIoU}=1-IoU+\frac{\rho^2(b,b^{gt})}{c^2}+\alpha v
其中,参数α=v(1IoU)+v\alpha=\frac{v}{(1-IoU)+v}
对于新引入的惩罚维度vv中的w,hw,h的梯度计算表达为:
vw=8π2(arctanwgthgtarctanwh)hw2+h2\frac{\partial v}{\partial w}=\frac{8}{\pi^2}(arctan\frac{w^{gt}}{h^{gt}}-arctan\frac{w}{h})*\frac{h}{w^2+h^2}
vh=8π2(arctanwgthgtarctanwh)ww2+h2\frac{\partial v}{\partial h}=-\frac{8}{\pi^2}(arctan\frac{w^{gt}}{h^{gt}}-arctan\frac{w}{h})*\frac{w}{w^2+h^2}
其中由于w2+h2w^2+h^2的范围很小,作为被除数会导致较大的梯度,这样会导致网络不稳定,因而文中将最后一项设置为1w2+h2=1\frac{1}{w^2+h^2}=1

2.3 使用DIoU改进NMS

之前的NMS操作直接使用IoU剔除多余的检测框,在引入DIoU之后则新的剔除规则被描述为:
si={si,IoURDIoU(M,Bi)<ϵ0,IoURDIoU(M,Bi)ϵ s_i = \begin{cases} s_i, & \text{$IoU-R_{DIoU}(M,B_i)\lt\epsilon$} \\ 0, & \text{$IoU-R_{DIoU}(M,B_i)\ge\epsilon$} \end{cases}
其中,sis_i是检测框分类置信度,ϵ\epsilon是NMS的阈值。

3. 实验结果

baseline为YOLO-V3
《Distance-IoU Loss:Faster and Better Learning for Bounding Box Regression》论文笔记
baseline为SSD
《Distance-IoU Loss:Faster and Better Learning for Bounding Box Regression》论文笔记
baseline为Faster RCNN
《Distance-IoU Loss:Faster and Better Learning for Bounding Box Regression》论文笔记