YOLOv5共有5个版本的网络模型及其权重文件,即(n,s,m,l,x)
。
(下图来自github上yolov5官方开源项目的性能截图)
其中n,s,m,l,x网络模型结构如出一辙,差异在参数上。另外的n6,s6,m6,l6,x6模型是对于更大分辨率图片检测。
网络结构
该网络结构图来自CSDN博主:江大白。此处引用,仅供学习记录使用。
此图为
Y
O
L
O
v
5
s
YOLOv5s
YOLOv5s的网络模型架构。
Backbone
CSP-Darknet53
Neck
SPPF + CSP-PAN
Head
YOLOv3 Head
输出三种大小的特征预测,如分别是
(
76
,
76
,
255
)
,
(
38
,
38
,
255
)
,
(
19
,
19
,
255
)
(76,76,255),(38,38,255),(19,19,255)
(76,76,255),(38,38,255),(19,19,255),不同版本不一致。
重点解析
边界框优化
在YOLOv4的基础上,将
b
w
=
p
w
∗
e
t
w
b_w=p_w*e^{t_w}
bw=pw∗etw与
b
h
=
p
h
∗
e
t
h
b_h=p_h*e^{t_h}
bh=ph∗eth换成
b
w
=
p
w
∗
(
2
∗
σ
(
e
t
w
)
)
2
b_w=p_w*(2*\sigma(e^{t_w}))^2
bw=pw∗(2∗σ(etw))2与
b
h
=
p
h
∗
(
2
∗
σ
(
e
t
h
)
)
2
b_h=p_h*(2*\sigma(e^{t_h}))^2
bh=ph∗(2∗σ(eth))2.
使用
σ
\sigma
σ函数旨在限制
t
w
t_w
tw与
t
h
t_h
th的值域,避免出现Nan的情况发生。
数据增强
数据增强方式有mosaic、HSV色域变换、旋转、缩放、翻转、平移、剪切等
真实框与Anchor匹配
r
w
=
w
g
t
w
a
t
r
h
=
h
g
t
h
a
t
r
w
m
a
x
=
m
a
x
(
r
w
,
1
r
w
)
r
h
m
a
x
=
m
a
x
(
r
h
,
1
r
h
)
r
w
m
a
x
=
m
a
x
(
r
w
m
a
x
,
r
h
m
a
x
)
\begin{align} r_w&=\frac{w_{gt}}{w_{at}}\\ r_h&=\frac{h_{gt}}{h_{at}}\\ r_w^{max}&=max(r_w,\frac{1}{r_w})\\ r_h^{max}&=max(r_h,\frac{1}{r_h})\\ r_w^{max}&=max(r_w^{max},r_h^{max})\\ \end{align}
rwrhrwmaxrhmaxrwmax=watwgt=hathgt=max(rw,rw1)=max(rh,rh1)=max(rwmax,rhmax)
其中
w
g
t
w_{gt}
wgt为真实框的宽度,
w
a
t
w_{at}
wat为anchor的宽度,
h
g
t
h_{gt}
hgt为真实框的高度,
h
a
t
h_{at}
hat为anchor的高度。
( 3 ) ( 4 ) (3)(4) (3)(4)两式子用于衡量真实框与anchor差异大小,如果两者框的差异最小或两个框最相近,那么 r h m a x r_h^{max} rhmax和 r w m a x r_w^{max} rwmax为1.最后 ( 5 ) (5) (5)中,获取框在高、宽上的最大差异值。这个差异值会与给定的阈值进行比较,如果满足阈值条件则认为匹配成功,否则失败。该原理与之前的使用IOU匹配原理类似。
损失函数
(v6.0及以后版本)
损失=边界框定位损失+目标分类损失+CIoU损失(置信度损失)
L
o
s
s
=
λ
1
L
l
o
c
+
λ
2
L
c
l
s
+
λ
3
L
c
i
o
u
Loss=\lambda_1L_{loc}+\lambda_2L_{cls}+\lambda_3L_{ciou}
Loss=λ1Lloc+λ2Lcls+λ3Lciou
也即
参数K为特征图数量,
S
2
S^2
S2为grid cell数量,
B
B
B为anchor数量。
其中为了平衡不同尺度的损失(在coco数据集上),对于三个预测特征层
{
P
3
(
小目标,如
76
∗
76
)
,
P
4
(
中等目标,如
38
∗
38
)
,
P
5
(
大目标,如
19
∗
19
)
}
\{P_3(小目标,如76*76),P_4(中等目标,如38*38),P_5(大目标,如19*19)\}
{P3(小目标,如76∗76),P4(中等目标,如38∗38),P5(大目标,如19∗19)}上的目标CIOU损失采用不同的权重:
L
o
s
s
c
i
o
u
=
4
∗
L
c
i
o
u
s
m
a
l
l
+
L
c
i
o
u
m
e
d
i
u
m
+
0.4
∗
L
c
i
o
u
l
a
r
g
e
Loss_{ciou}=4*L_{ciou}^{small}+L_{ciou}^{medium}+0.4*L_{ciou}^{large}
Lossciou=4∗Lciousmall+Lcioumedium+0.4∗Lcioularge
损失函数中, 为了提高对小目标的精准度,提高了小目标预测的损失。