本文按照时间线路,总结目标检测常用的框回归loss函数。顺序依次为:smooth L1 loss, IOU loss,GIOU loss, DIOU loss, CIOU loss
mmdetection box regression losses(click here)
Smooth l1 loss
最初由 fast rcnn提出。其公式如下:
s
m
o
o
t
h
l
1
(
x
)
=
{
0.5
x
2
i
f
∣
x
∣
<
1
∣
x
∣
−
0.5
i
f
∣
x
∣
>
=
1
smooth_{l1}(x) = \begin{cases} 0.5 x^2 \quad if \, |x|<1 \\ |x| - 0.5 \quad if \,|x| >=1 \end{cases}
smoothl1(x)={0.5x2if∣x∣<1∣x∣−0.5if∣x∣>=1
如果直接使用L2或者L1作为loss,都会有训练不稳定的问题。
L
1
(
x
)
=
∣
x
∣
L1(x) = |x|
L1(x)=∣x∣
L
2
(
x
)
=
x
2
L2(x) = x^2
L2(x)=x2
我们观察一下三个函数的导数
d
l
1
(
x
)
d
x
=
{
1
,
i
f
x
>
0
−
1
,
i
f
x
<
0
\frac{\mathrm{d}l1(x) }{\mathrm{d} x} = \begin{cases} 1, if x>0\\ -1, if x <0 \end{cases}
dxdl1(x)={1,ifx>0−1,ifx<0
d
l
2
(
x
)
d
x
=
2
x
\frac{\mathrm{d} l2(x) }{\mathrm{d} x} = 2x
dxdl2(x)=2x
d
s
m
o
o
t
h
l
1
(
x
)
d
x
=
{
x
,
i
f
∣
x
∣
<
1
±
1
\frac{\mathrm{d} smooth_{l1}(x) }{\mathrm{d} x} = \begin{cases} x, if |x| <1 \\ \pm 1 \end{cases}
dxdsmoothl1(x)={x,if∣x∣<1±1
通过观察可知, 如果x很大,即误差很大的时候,l2的导数会很大,至于l1,导数一直为正负1。但是smooth l1 loss的导数,当误差x很大的时候,其导数最大为正负1(取模值), 当x很小,即误差很小的时候, 导数也很小。所以用smooth l1 loss 训练框回归分支,更加稳定。
但该loss也存在缺点。该loss push 这四个值向gt推进,整个过程没有考虑到这四个值之间是有关联的。同时smooth l1 损失值很小,但IOU有可能并不好。
IOU loss
针对smooth l1 loss的问题,旷视在16年提出IOU loss,直接优化预测框和GT的IOU。
绿色框是预测框, 蓝色框是gt。 求iou之后,直接取对数取反。
GIOU(cvpr19)
IOU loss在训练初期并不稳定,因为在预测不准确的时候, 预测框和GT的IOU是0,则无法求导更新。并且,当Inter和预测框以及GT的面积定了之后,IOU是固定的,但GT和预测框却能有不同方式的交集。
比如上图, 三种IOU的值一样,但却又不一样的交集形式。
GIOU的做法是,针对一个预测框A和对应的GT。找到一个最大外接框C,能包住A和B。
G
I
O
U
=
I
O
U
−
∣
C
−
(
A
⋃
B
)
∣
∣
C
∣
GIOU = IOU - \frac{|C - (A \bigcup B )|}{|C|}
GIOU=IOU−∣C∣∣C−(A⋃B)∣
所以GIOU的范围在-1 到1 之间。 当A和B完全重合的时候,GIOU = 0。 当A和B不重合的时候, 可以发现GIOU不等于0, 而是小于0。
l
o
s
s
g
i
o
u
=
1
−
G
I
O
U
loss_{giou} = 1 - GIOU
lossgiou=1−GIOU
如果A和B不相交,则loss为大于1的数值,也是可以求导的。
- 缺点: 当GT框包住预测框的时候, GIOU退化为IOU,无法表示预测框和GT的相对位置关系
DIOU (AAAI2020)
针对GIOU的缺点, DIOU加入中心点归一化距离。
针对问题:
- 直接最小化预测框与目标框之间的归一化距离是否可行,以达到更快的收敛速度。
首先考虑框回归损失的三个重要几何因素:重叠面积,中心点距离,长宽比。
iou系列的loss都考虑到了重叠面积,DIOU考虑到了中心点距离, 但没考虑长宽比,CIOU则是都考虑到了。
IOU-based loss通常可以写成
l
i
o
u
=
1
−
I
O
U
+
R
(
A
,
B
)
l_{iou} = 1 - IOU + R(A,B)
liou=1−IOU+R(A,B)
A是预测框,B是GT。DIOU的R是
R
d
i
o
u
(
A
,
B
)
=
ρ
2
(
b
,
b
g
t
)
c
2
R_{diou}(A,B) = \frac{\rho^2(b,b^{gt)}}{c^2}
Rdiou(A,B)=c2ρ2(b,bgt)
ρ
(
.
)
\rho(.)
ρ(.)是欧氏距离,
b
b
b和
b
g
t
b^{gt}
bgt是A的中心点和B的中心点。c是A和B的最小外接框的对角线长度
DIOU同样具有尺度不变性,且直接优化框和GT的距离,收敛速度更快。对于GT框包裹住预测框的情况,GIOU退化为IOU,收敛更慢,但是DIOU依然收敛很快。
CIOU
在DIOU的基础上,添加一个引子。
l
c
i
o
u
=
1
−
I
O
U
+
ρ
2
(
b
,
b
g
t
)
c
2
+
a
v
l_{ciou} = 1- IOU + \frac{\rho^2(b,b^{gt)}}{c^2} + av
lciou=1−IOU+c2ρ2(b,bgt)+av
其中a和v的定义是
a
=
v
(
1
−
I
O
U
)
+
v
a = \frac{v}{(1-IOU)+v}
a=(1−IOU)+vv
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\frac{w^{gt}}{h^{gt}} - arctan\frac{w}{h})^2
v=π24(arctanhgtwgt−arctanhw)2
v的目标是想让预测框的长宽比和GT一致。