文章目录
YOLOv4是一种先进的目标检测算法,它在YOLO系列的基础上进行了多项改进和优化。
一、损失函数改进
IOU损失表示预测框A和真实框B之间交并比的差值,反映预测检测框的检测效果。在目标检测任务中,通常使用1-IOU作为优化目标,即最大化预测框与真实框的重叠程度,也就是最小化IOU损失。
当预测框与真实框没有相交时,IOU损失为0,无法梯度计算,且相同的IOU有时也并不一定能反应真实情况。
为了克服传统IOU损失的局限性,研究者们提出了多种优化和改进方法,如GIOU、DIOU和CIOU等。
1.GIOU损失
计算公式:
L
G
I
O
U
=
1
−
I
O
U
+
∣
C
−
B
∪
B
g
t
∣
C
L_{GIOU}=1-IOU+\frac{|C-B∪B^{gt}|}{C}
LGIOU=1−IOU+C∣C−B∪Bgt∣
GIoU在IOU的基础上增加了一个惩罚项,用于度量预测框和真实框之间的非重叠区域。GIoU的取值范围在[-1,1]之间,当预测框与真实框完全重合时取值为1,当两者无交集且无限远时取值为-1。GIoU损失能够更好地反映预测框与真实框之间的重合度,且解决了IOU损失在检测框不重叠时出现的梯度问题。
但是如果预测框在真实框内部,会导致惩罚项全部为0,导致最终GIOU损失全部一致,如下:
2.DIOU损失
DIOU在IOU的基础上考虑了预测框和真实框之间的距离信息,使得目标框回归更加稳定。
计算公式为:
L
D
I
O
U
=
1
−
I
O
U
+
ρ
2
(
b
,
b
g
t
)
C
2
L_{DIOU }= 1-IOU+\frac{ρ²(b, b^{gt})}{C^2}
LDIOU=1−IOU+C2ρ2(b,bgt)
b
b
b、
b
g
t
b^{gt}
bgt表示预测框和真实框的中心点,ρ表示计算两个中心点的欧式距离,所以分子就是预测框与真实框中心点的欧氏距离d。c表示能够同时包含预测框和真实框最小闭包区域的对角线距离。
这种方法通过直接优化距离,速度更快,并且在预测框在真实框内部,但是因为位置不一样,所以导致中心点距离不一致,所得结果也就不一致,可以很好的解决GIOU的问题。
但是我们又遇到了另一个问题,假如有两个预测框在真实框内部,且中心点相同,如下图:
这理会产生新的问题,即得到的惩罚项也相同,无法判断哪一个预测框更好。
3.CIOU损失
CIoU在DIoU的基础上进一步考虑了预测框和真实框之间的长宽比信息,使得目标框回归更加准确。CIoU损失的计算公式相对复杂,但同样能够显著提升目标检测算法的性能。
计算公式:
L
C
I
O
U
=
1
−
I
O
U
+
ρ
2
(
b
,
b
g
t
)
C
2
+
α
v
L_{CIOU }= 1-IOU+\frac{ρ²(b, b^{gt})}{C^2}+αv
LCIOU=1−IOU+C2ρ2(b,bgt)+αv
α
=
v
(
1
−
I
O
U
)
+
v
α = \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}{π^2}(arctan \frac{w^{gt}}{h^{gt}}-arctan \frac{w}{h})^2
v=π24(arctanhgtwgt−arctanhw)2
其中α可以当作权重参数,
w
g
t
h
g
t
\frac{w^{gt}}{h^{gt}}
hgtwgt与
w
h
\frac{w}{h}
hw分别为真实框与预测框的宽高比,通过增加比值信息,可以进一步解决DIOU的问题。
所以损失函数必须要考虑到三个要素:重叠面积、中心点距离与长宽比。
二、非极大值抑制
非极大值抑制(Non-Maximum Suppression,NMS)是目标检测中常用的一种技术,用于去除冗余的边界框,获取最佳的检测结果。
但是传统的NMS存在一定的问题:如果一个物体在另一个物体重叠区域出现,即当两个目标框接近时,分数更低的框就会因为与之重叠面积过大而被删掉,从而导致对该物体的检测失败并降低了算法的平均检测率。
所以我们使用soft-nms,它是对NMS的一种改进算法,它引入递减置信度的惩罚因子,以更加灵活地处理重叠的检测框。通过逐步降低检测得分而不是直接删除低得分框,soft-nms能够改善检测性能,减少漏检和过多候选框的问题,从而提高目标检测的准确性和鲁棒性。
将当前检测框得分乘以一个权重函数,即
e
−
i
o
u
(
M
,
b
i
)
2
σ
e^{\frac{-iou(M,b_i)^2}{σ}}
eσ−iou(M,bi)2,该函数会衰减与最高得分检测框M有重叠的相邻检测框的分数,函数图像如下图,
所以越是与M框高度重叠的检测框,该函数值就越小,其得分衰减越严重,为此选择高斯函数为权重函数,从而修改其删除检测框的规则。(δ通常取0.3)。