目标检测中的回归损失函数总结
目前总结内容(Content)
本文总结了目标检测中常用的回归损失函数的优缺点以及对其公式的分析。
演进路线:Smooth L1->IoU->GIoU->DIoU->CIoU->EIoU->Alpha-IoU
Smooth L1 Loss
动机
Smooth L1 Loss完美的避开了L1和L2 Loss的缺点:
- L1 Loss的问题:损失函数对x的导数为常数,在训练后期,x很小时,如果learning rate 不变,损失函数会在稳定值附近波动,很难收敛到更高的精度。
- L2 Loss的问题:损失函数对x的导数在x值很大时,其导数也非常大,在训练初期不稳定。
分析
Smooth L1 Loss的定义为:

其中,
x
=
f
(
x
i
)
−
y
i
x=f(x_i)-y_i
x=f(xi)−yi为真实值和预测值的差值。
Smooth L1对x的导数为:

实际使用时:

其中,
v
i
=
(
v
x
,
v
y
,
v
w
,
v
h
)
v_i=(v_x,v_y,v_w,v_h)
vi=(vx,vy,vw,vh)表示真实框坐标,
t
i
u
=
(
t
x
u
,
t
y
u
,
t
w
u
,
t
h
u
)
t_i^u=(t_x^u,t_y^u,t_w^u,t_h^u)
tiu=(txu,tyu,twu,thu)表示预测的框坐标,即分别求4个点的loss,然后相加作为Bounding Box Regression Loss。

Smooth L1的优点:
- 相比于L1损失函数,可以收敛得更快。
- 相比于L2损失函数,对离散点、异常值不敏感,梯度变化相对更小,训练时不容易跑飞。
Smooth L1 Loss能从两个方面限制梯度:
- 当预测框与 ground truth 差别过大时,梯度值不至于过大;
- 当预测框与 ground truth 差别很小时,梯度值足够小。
不足
Smooth L1 Loss在计算目标检测的 bbox loss时,都是独立的求出4个点的 loss,然后相加得到最终的 bbox loss。这种做法默认4个点是相互独立的,与实际不符。举个例子,当 ( x , y ) (x, y) (x,y)为右下角时, w , h w ,h w,h其实只能取0。
IoU Loss(2016)
论文地址:https://arxiv.org/pdf/1608.01471.pdf
动机
针对Smooth L1没有考虑box四个坐标之间相关性的缺点。
分析
通过4个坐标点独立回归Bounding boxes的缺点:
- 检测评价的方式是使用IoU,而实际回归坐标框的时候是使用4个坐标点,如下图所示,是不等价的;L1或者L2 Loss相同的框,其IoU不是唯一的;

- 通过4个点回归坐标框的方式是假设4个坐标点是相互独立的,没有考虑其相关性,实际4个坐标点具有一定的相关性;
- 基于L1和L2的距离的loss对于尺度不具有不变性;
IoU Loss定义如下:

I
o
U
l
o
s
s
=
−
l
n
(
I
o
U
(
b
b
o
x
g
t
,
b
b
o
x
p
r
e
d
)
)
IoU loss=-ln(IoU(bbox_{gt},bbox_{pred}))
IoUloss=−ln(IoU(bboxgt,bboxpred))
实际使用中简化为:
I
o
U
l
o
s
s
=
1
−
I
o
U
(
b
b
o
x
g
t
,
b
b
o
x
p
r
e
d
)
IoUloss=1-IoU(bbox_{gt},bbox_{pred})
IoUloss=1−IoU(bboxgt,bboxpred)
不足
- 当预测框和目标框不相交,即 I o U ( b b o x g t , b b o x p r e d ) = 0 IoU(bbox_{gt},bbox_{pred})=0 IoU(bboxgt,bboxpred)=0时,不能反映两个框距离的远近,此时损失函数不可导, I o U l o s s IoUloss IoUloss无法优化两个框不相交的情况。
- 假设预测框和目标框的大小都确定,只要两个框的相交值是确定的,其 I o U IoU IoU值相同时, I o U IoU IoU值不能反映两个框是如何相交的。

GIoU Loss(2019)
论文地址:https://arxiv.org/abs/1902.09630
代码地址:https://github.com/generalized-iou/g-darknet
动机
解决 I o U L o s s IoU Loss IoULoss没有考虑两个框是如何相交的问题。
分析
GIoU定义如下:
G
I
o
U
=
I
o
U
−
∣
C
−
∣
A
∪
B
∣
∣
C
GIoU=IoU-\frac{|C-|A \cup B||}{C}
GIoU=IoU−C∣C−∣A∪B∣∣
实际使用时:
L
o
s
s
G
I
o
U
=
1
−
G
I
o
U
Loss_{GIoU}=1-GIoU
LossGIoU=1−GIoU
- G I o U GIoU GIoU取值范围为 [-1, 1],在两框重合时取最大值1,在两框无限远的时候取最小值-1;
- 与 I o U IoU IoU只关注重叠区域不同, G I o U GIoU GIoU不仅关注重叠区域,还关注其他的非重合区域,能更好的反映两者的重合度。
实验
G I o U L o s s GIoU Loss GIoULoss,在单阶段检测器YOLO v1上涨了2个点,两阶段检测器涨点相对较少(原因分析:RPN的box比较多,两个框未相交的数量相对较少)
不足
当真实框完全包裹预测框的时候, I o U IoU IoU和 G I o U GIoU GIoU 的值都一样,此时 G I o U GIoU GIoU 退化为 I o U IoU IoU, 无法区分其相对位置关系。
DIoU Loss(2019)
论文地址:https://arxiv.org/pdf/1911.08287.pdf
代码链接:https://github.com/Zzh-tju/DIoU
动机
通过引入距离,解决 G I o U L o s s GIoU Loss GIoULoss当真实框完全包裹预测框时, I o U IoU IoU 和 G I o U GIoU GIoU 的值一样的缺点。
分析
基于 I o U IoU IoU和 G I o U GIoU GIoU存在的问题,作者提出了两个问题:
- 问题一:直接最小化预测框与目标框之间的归一化距离是否可行,以达到更快的收敛速度。
- 问题二:如何使回归在与目标框有重叠甚至包含时更准确、更快。
好的目标框回归损失应该考虑三个重要的几何因素:重叠面积,中心点距离,长宽比。
- 针对问题一,作者提出了 D I o U L o s s DIoU Loss DIoULoss,相对于 G I o U L o s s GIoU Loss GIoULoss收敛速度更快,该 L o s s Loss Loss考虑了重叠面积和中心点距离,但没有考虑到长宽比;
- 针对问题二,作者提出了 C I o U L o s s CIoU Loss CIoULoss,其收敛的精度更高,以上三个因素都考虑到了。
DIoU Loss 的定义如下:
L
o
s
s
D
I
o
U
=
1
−
I
o
U
+
ρ
2
(
b
,
b
g
t
)
c
2
Loss_{DIoU}=1-IoU+ \frac{\rho^2(b,b^{gt})}{c^2}
LossDIoU=1−IoU+c2ρ2(b,bgt)
其中, ρ ( ) \rho() ρ()表示预测框和真实框中心点的欧氏距离, c c c表示预测框和真实框最小外界矩形的对角线距离,如下图所示:

当2个框完全重合时,
L
o
s
s
D
I
o
U
=
l
o
s
s
G
I
o
U
=
0
Loss_{DIoU}=loss_{GIoU}=0
LossDIoU=lossGIoU=0
当2个框不相交时,
L
o
s
s
D
I
o
U
=
l
o
s
s
G
I
o
U
=
2
Loss_{DIoU}=loss_{GIoU}=2
LossDIoU=lossGIoU=2
不足
边界框回归的三个重要几何因素:重叠面积、中心点距离和长宽比,DIoU 没有包含长宽比因素。
CIoU Loss(2019)
论文地址:https://arxiv.org/pdf/1911.08287.pdf
代码地址:https://github.com/Zzh-tju/DIoU-darknet
动机
解决 D I o U L o s s DIoU Loss DIoULoss没有包含长宽比因素的不足。
分析
C I o U CIoU CIoU的惩罚项是在 D I o U DIoU DIoU的惩罚项基础上加了一个影响因子。
CIoU Loss定义为:
L
o
s
s
C
I
o
U
=
1
−
I
o
U
+
ρ
2
(
b
,
b
g
t
)
c
2
+
a
v
Loss_{CIoU}=1-IoU+\frac{\rho^2(b,b^{gt})}{c^2}+av
LossCIoU=1−IoU+c2ρ2(b,bgt)+av
其中, v = 4 π 2 ( a r c t a n w g t h g t − a r c t a n w h ) 2 v=\frac{4}{\pi^2}(arctan{w^{gt} \over {h^{gt}}}-arctan{{w} \over {h}})^{2} v=π24(arctanhgtwgt−arctanhw)2,用于做trade-off的参数 a = v ( 1 − I o U ) + v a=\frac{v}{(1-IoU)+v} a=(1−IoU)+vv
实验

不足
在CIoU的定义中,衡量长宽比过于复杂,从两个方面减缓了收敛速度:
- 长宽比不能取代单独的长宽,比如 w = k w g t w=kw^{gt} w=kwgt, h = k h g t h=kh^{gt} h=khgt 都会导致 v = 0 v=0 v=0;
- 从 v v v的导数可以得到 ∂ v ∂ w = − h w ∂ v ∂ h \frac{\partial v}{\partial w}=-\frac{h}{w}\frac{\partial v}{\partial h} ∂w∂v=−wh∂h∂v ,这说明 ∂ v ∂ w \frac{\partial v}{\partial w} ∂w∂v 和 ∂ v ∂ h \frac{\partial v}{\partial h} ∂h∂v 在优化中意义相反。
EIoU Loss(2021)
论文地址:https://arxiv.org/pdf/2101.08158.pdf
动机
解决CIoU定义中的不足。
亮点
引入了解决样本不平衡问题的Focal Loss思想。
分析
将CIoU的 a v av av 取代为 a 2 ( w , w g t ) C w 2 + ρ 2 ( h , h g t ) C h 2 \frac{a^2(w,w^{gt})}{C_w^2}+\frac{\rho^2(h,h^{gt})}{C_h^2} Cw2a2(w,wgt)+Ch2ρ2(h,hgt)
EIoU Loss的定义为:
L
o
s
s
E
I
o
U
=
1
−
I
o
U
+
ρ
2
(
b
,
b
g
t
)
c
2
+
a
2
(
w
,
w
g
t
)
C
w
2
+
ρ
2
(
h
,
h
g
t
)
C
h
2
Loss_{EIoU}=1-IoU+\frac{\rho^2(b,b^{gt})}{c^2}+\frac{a^2(w,w^{gt})}{C_w^2}+\frac{\rho^2(h,h^{gt})}{C_h^2}
LossEIoU=1−IoU+c2ρ2(b,bgt)+Cw2a2(w,wgt)+Ch2ρ2(h,hgt)
Focal-EIoU Loss的定义为:
focal loss可以理解为对损失加权,常见的分类focal loss为
F
L
(
p
t
)
=
−
a
t
(
1
−
p
t
)
γ
l
o
g
(
p
t
)
FL(p_t)=-a_t(1-p_t)^{\gamma}log(p_t)
FL(pt)=−at(1−pt)γlog(pt)
最后得到: L o s s F o c a l − E I o U = I o U γ L o s s E I o U Loss_{Focal-EIoU}=IoU^{\gamma}Loss_{EIoU} LossFocal−EIoU=IoUγLossEIoU
实验
论文首先尝试直接将EIoU带入,但是效果不好,仅供思路参考。
Alpha-IoU (2021)
论文地址:https://arxiv.org/abs/2110.13675v1
将现有的基于 I o U IoU IoU的 L o s s Loss Loss推广到一个新的 P o w e r I o U Power IoU PowerIoU系列的 L o s s Loss Loss,它具有一个幂次 I o U IoU IoU项和一个附加的幂次正则项。这种新的损失系列为 α − I o U L o s s α-IoU Loss α−IoULoss。在多个目标检测基准和模型上的实验表明, α − i o u α- iou α−iou损失:
- 可以显著的超过现有的基于 I o U IoU IoU的损失;
- 通过调节 α α α,使探测器更灵活地实现不同水平的bbox回归精度;
- 对小数据集和噪声的鲁棒性更强。
并且通过实验发现,在大多数情况下,取α=3的效果最好。
总结
- 好的目标框回归损失应该考虑三个重要的几何因素:重叠面积,中心点距离,长宽比,对边框间的物理描述愈发准确。
参考文献
- https://blog.csdn.net/qq_29462849/article/details/121026812
- https://zhuanlan.zhihu.com/p/422104433