最近很多公众号都在推这篇文章,但是我在阅读的过程中产生了一些问题,由于代码未开源,理解可能不正确,因此先记录一下,等开源之后对照代码再更深地去理解,也希望如果有大佬看见这篇文章的时候,能对我不成熟的看法给予一些意见。 文章实验的最终损失函数计算如下: 其中
L
c
l
s
L_{cls}
Lcls?是用了focal loss,
W
b
o
x
W_{box}
Wbox?和
W
c
l
s
W_{cls}
Wcls?权重参数是根据遗传算法计算得来的,
L
b
o
x
L_{box}
Lbox?是本文所提的SIoU损失,计算如下:
主要是涉及到四部分损失:角度损失 、距离损失 、形状损失 、IoU 损失 1.角度损失
这里作者认为,可以考虑角度因素,首先使得预测框回归到与真值框同一水平线或者垂直线上,这点我很认同,可以加速收敛,作者是通过以下公式评估损失的 该公式由两部分组成,第一部分是
1
?
2
s
i
n
2
(
x
)
1-2sin^2(x)
1?2sin2(x),其实也就是
c
o
s
(
2
x
)
cos(2x)
cos(2x),使得对于
x
>
0
x>0
x>0的情况,其值只有在
x
x
x为
π
/
4
π/4
π/4的时候取最小,得到0,而在
x
x
x为0的时候取最大,得到1;第二部分是
a
r
c
s
i
n
(
x
)
?
π
/
4
arcsin(x)-π/4
arcsin(x)?π/4,其中
a
r
c
s
i
n
(
x
)
arcsin(x)
arcsin(x)也就是
α
α
α,还需要进行
?
π
/
4
-π/4
?π/4的操作是需要考虑到让预测框朝角度较小的一边进行移动,因为
β
β
β等于
π
/
2
?
α
π/2-α
π/2?α,两者
?
π
/
4
-π/4
?π/4后互为相反数,经过
c
o
s
cos
cos函数计算后的值是一样的,当
α
α
α为0的时候,其损失最小,而为
π
/
4
π/4
π/4的时候最大。最终使得预测框更快地移动到真值框所在的水平线或者垂直线上。 2.距离损失 (1)对于
ρ
x
ρ_x
ρx?和
ρ
y
ρ_y
ρy?的计算,如果我对公式没理解错的话,其计算结果永远是1,好像无法反映距离,而且文章也说明了
c
h
c_h
ch?的计算方式,更佐证了我的看法,因此猜测这里是作者写错了或者是我理解错了。 (2)对于
γ
γ
γ的计算方式,我的理解是首先由角度损失计算可以得到
Λ
Λ
Λ的范围应该是[0,1],这里再经过
2
?
Λ
2-Λ
2?Λ,首先防止
γ
γ
γ为0时
ρ
t
ρ_t
ρt?失效的情况,其次使得
Λ
Λ
Λ越小,
ρ
t
ρ_t
ρt?变化对于损失的影响就越大。 (3)对于
(
1
?
e
?
γ
ρ
t
)
(1-e^{-γρ_t})
(1?e?γρt?)的计算方式,我的理解是,假如对于
ρ
t
ρ_t
ρt?这里的计算方式是作者写错了,而且与距离正相关的话,那么这里的目的是使距离越大损失越大但又不会超过1,防止梯度爆炸。 3.形状损失 这里和EIOU一样,都考虑到了预测框和真值框之间的真实长宽比,不过对于
ω
x
ω_x
ωx?和
ω
y
ω_y
ωy?的计算,与EIOU中还需要计算能包围两个框的最小框长宽不一样,这里只用到了真值框和预测框的长宽属性,计算量更少,按理会更快,但是具体效果还不清楚。另外,
ω
t
ω_t
ωt?的范围是[0,1],我认为应该不需要通过
1
?
e
?
ω
t
1-e^{-ω_t}
1?e?ωt?进一步计算,说不定效果会更好,最后对于
θ
θ
θ的引入,这里不是很理解。 (1)首先是不理解为什么引入这个因子会更好。 (2)其次距离损失也是可以引入因子的,为什么不引入。 4.IoU损失 和GIOU里提的一样,这里是按
1
?
I
o
U
1-IoU
1?IoU计算得到 对于文章中的一些权重和
θ
θ
θ参数都是通过遗传算法对数据集计算得来,不清楚这一部分的提升效果,由于代码未开源,对其中的一些计算方式也存在质疑,因此无法验证每一个改进点真实的效果
|