什么是IOU?
简单来说IOU就是用来度量目标检测中预测框与真实框的重叠程度。在图像分类中,有一个明确的指标准确率来衡量模型分类模型的好坏。其公式为:
a
c
c
=
P
t
r
u
e
N
N
=
全
部
样
本
的
数
量
,
P
t
r
u
e
=
预
测
正
确
的
样
本
数
量
acc = \frac{P_{true}}{N} {\quad}{\quad}{\quad}{\quad}{\quad}{\quad}{\quad}N=全部样本的数量,P_{true}=预测正确的样本数量
acc=NPtrueN=全部样本的数量,Ptrue=预测正确的样本数量
这个公式显然不适合在在目标检测中使用。我们知道目标检测中都是用一个矩形框住被检测物体,又因为检测物体尺度不同,预测框与真实框或大或小。所以度量标准必然是具有尺度不变性的,那么大神们就引入了一个概念IOU(交并比),用预测框(A)和真实框(B)的交集除上二者的并集,其公式为:
I
O
U
=
A
∩
B
A
∪
B
IOU = \frac{A\cap B}{A\cup B}
IOU=A∪BA∩B
显而易见,IOU的值越高也说明A框与B框重合程度越高,代表模型预测越准确。反之,IOU越低模型性能越差。
IOU应用场景
除了作为目标检测的评价指标,IOU还有其他应用场景:
- 在anchor-based方法的目标检测中,根据IOU的值来区分正样本和负样本。
- 可以直接作为边界框回归的loss函数进行优化。
- 在NMS(非极大值抑制)对预测框筛选。
IOU的优缺点
普通IOU的优缺点很明显,优点:
- IOU具有尺度不变性
- 满足非负性
同时,由于IOU并没有考虑框之间的距离,所以它的作为loss函数的时候也有相应的缺点:
- 在A框与B框不重合的时候IOU为0,不能正确反映两者的距离大小。
- IoU无法精确的反映两者的重合度大小。如下图所示,三种情况IOU都相等,但看得出来他们的重合度是不一样的,左边的图回归的效果最好,右边的最差。
对IOU进行改进
普通IOU是对两个框的距离不敏感的,下面两张图中,左图预测框的坐标要比右图预测框的坐标更接近真实框。但两者的IOU皆为0,如果直接把IOU当作loss函数进行优化,则loss=0,没有梯度回传,所以无法进行训练。
GIOU
- 对于任意的两个A、B框,首先找到一个能够包住它们的最小方框,例如在上述场景 A 和 B 中,C 的形状分别为:
-
计算IOU
-
根据A、B,我们可以算出C的面积,有了C的面积就可以计算出GIOU了:
G
I
O
U
=
I
O
U
−
C
−
(
A
∪
B
)
C
GIOU = IOU - \frac{C - (A\cup B)}{C}
GIOU=IOU−CC−(A∪B)
G
I
O
U
=
−
1
+
(
A
∪
B
)
C
(
I
O
U
=
0
)
GIOU = -1 + \frac{(A\cup B)}{C} \quad\quad\quad(IOU=0)
GIOU=−1+C(A∪B)(IOU=0)
而当IOU为0时,意味着A与B非常远时,
A
∪
B
C
\frac{A\cup B}{C}
CA∪B无限接近于0,GIOU趋近于-1,同理当IOU为1时,两框重合,
A
∪
B
C
\frac{A\cup B}{C}
CA∪B为1。所以GIOU的取值为(-1, 1]。
GIOU作为loss函数时,为
L
=
1
−
G
I
O
U
L=1-GIOU
L=1−GIOU ,当A、B两框不相交时
A
∪
B
A\cup B
A∪B值不变,最大化
G
I
O
U
GIOU
GIOU就是就小化
C
C
C,这样就会促使两个框不断靠近。
DIoU
尽管GIoU解决了在IoU作为损失函数时梯度无法计算的问题,且加入了最小外包框作为惩罚项。但是它任然存在一些问题。下图第一行的三张图片是GIoU迭代时预测框收敛情况。其中黑色框代表anchor,蓝色框代表预测框,绿色框代表真实框。
上图中可以看出,GIoU在开始的时候需要将检测结果方法使其与目标框相交,之后才开始缩小检测结果与GT重合,这就带来了需要较多的迭代次数才能收敛问题,特别是对于水平与垂直框的情况下。此外,其在一个框包含另一个框的情况下,GIoU降退化成IoU,无法评价好坏,见下图所示:
综合以上的问题,又有大神提出了DIoU:
D
I
o
U
=
ρ
2
(
A
,
B
)
c
2
DIoU =\frac{\rho^2(A, B)}{c^2}
DIoU=c2ρ2(A,B)
其中
d
=
ρ
(
A
,
B
)
d = \rho(A, B)
d=ρ(A,B)是A框与B框中心点坐标的欧式距离,而
c
c
c则是包住它们的最小方框的对角线距离。
完整的DIoU Loss定义如下:
L
D
I
o
U
=
1
−
I
o
U
+
ρ
2
(
A
,
B
)
c
2
L_{DIoU} = 1 - IoU + \frac{\rho^2(A, B)}{c^2}
LDIoU=1−IoU+c2ρ2(A,B)
从公式和示意图中,我们可以看到,DIoU有几个优点:
- DIoU的惩罚项是基于中心点的距离和对角线距离的比值,避免了像GIoU在两框距离较远时,产生较大的外包框,Loss值较大难以优化(因为它的惩罚项是
A
∪
B
A \cup B
- 即使在一个框包含另一个框的情况下,c值不变,但d值也可以进行有效度量。
CIoU
同时DIoU的作者考虑到,在两个框中心点重合时,c与d的值都不变。所以此时需要引入框的宽高比:
C
I
o
U
=
ρ
2
(
A
,
B
)
c
2
+
α
v
CIoU = \frac{\rho^2(A, B)}{c^2} + \alpha v
CIoU=c2ρ2(A,B)+αv
其中
α
\alpha
α是权重函数,
v
v
v用来度量宽高比的一致性:
α
=
v
(
1
−
I
o
U
)
+
v
\alpha = \frac{v}{(1 - IoU) + v}
α=(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
最终CIoU Loss定义为:
C
I
o
U
=
1
−
I
o
U
+
ρ
2
(
A
,
B
)
c
2
+
α
v
CIoU = 1 - IoU + \frac{\rho^2(A, B)}{c^2} + \alpha v
CIoU=1−IoU+c2ρ2(A,B)+αv
版权声明:本文为CSDN博主「热血厨师长」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42392454/article/details/111152035
暂无评论