一、YOLOv1算法
1.1 参考
- 论文下载地址:https://arxiv.org/abs/1506.02640
- 代码下载地址:https://github.com/pjreddie/darknet
1.2 算法原理
- YOLOv1对输入图像尺寸有要求,将输入图像缩放成指定尺寸
(
418
?
418
)
(418*418)
(418?418),再将图片划分成
S
?
S
S*S
S?S的方格,如果某个目标object落在这个方格中,则这个网格就负责预测这个object;
- 每个网格包含
B
B
B个交叠目标(即有
B
B
B个目标的中心点落在方格中),所以此方格需要预测
B
B
B个目标的矩形框(即预测四个值
(
x
,
y
,
h
,
w
)
(x, y, h, w)
(x,y,h,w)),且预测该方格包含某个类别目标的置信度(Confidence);
C
o
n
f
i
d
e
n
c
e
=
P
(
o
b
j
e
c
t
)
?
I
O
U
p
r
e
d
t
r
u
t
h
=
P
(
C
i
)
?
I
O
U
p
r
e
d
t
r
u
t
h
(1)
Confidence=P(object)*IOU_{pred}^{truth}=P(C_i)*IOU_{pred}^{truth}\tag{1}
Confidence=P(object)?IOUpredtruth?=P(Ci?)?IOUpredtruth?(1) 如果有object落在方格中,
P
(
o
b
j
e
c
t
)
P(object)
P(object)取1,否则取0,
I
O
U
p
r
e
d
t
r
u
t
h
IOU_{pred}^{truth}
IOUpredtruth?为真实值矩形框与预测矩形框之间的IOU值;因此每个矩形框需要预测的维度为
(
5
?
B
+
C
)
(5*B+C)
(5?B+C),B个目标,每个目标4个位置参数和1个置信度参数,同时需要预测C个类别;所以最终输出为
S
?
S
?
(
5
?
B
+
C
)
S*S*(5*B+C)
S?S?(5?B+C)的tensor。
- 在下图网络结构中,文章用了GoogLeNet 作为神经网络主干,24层卷积层加上两层全连接层。图像输入为448x448,取S=7,B=2,一共有20个类别(C=20),最后得到7*7*30的tensor。
- 在进行预测时,将条件类概率和预测框的置信度相乘,这个公式给出了每一个框的特定类别的置信度分数。这些分数反映了一个类别出现在一个框的可能性和预测框和物体的匹配程度。
P
(
C
i
∣
o
b
j
e
c
t
)
?
P
(
o
b
j
e
c
t
)
?
I
O
U
p
r
e
d
t
r
u
t
h
=
P
(
C
i
)
?
I
O
U
p
r
e
d
t
r
u
t
h
(2)
P(C_i|object)*P(object)*IOU_{pred}^{truth}=P(C_i)*IOU_{pred}^{truth}\tag{2}
P(Ci?∣object)?P(object)?IOUpredtruth?=P(Ci?)?IOUpredtruth?(2)
P
(
C
i
)
P(C_i)
P(Ci?)表示第
i
i
i个类别的预测概率。 - 损失函数中,更重视坐标预测,给这些损失前面赋予更大的loss weight;对没有object的矩阵框的置信度loss,赋予小的loss weight;有object的矩阵框的置信度损失和类别的loss的loss weight正常取1。
1.3 算法总结
- 优点
1)快速,pipline简单. 2)背景误检率低。 3)通用性强。YOLO对于艺术类作品中的物体检测同样适用。它对非自然图像物体的检测率远远高于DPM和RCNN系列检测方法。 - 缺点
1)由于输出层为全连接层,因此在检测时,YOLO训练模型只支持与训练图像相同的输入分辨率。 2)虽然每个格子可以预测B个bounding box,但是最终只选择只选择IOU最高的bounding box作为物体检测输出,即每个格子最多只预测出一个物体。当物体占画面比例较小,如图像中包含畜群或鸟群时,每个格子包含多个物体,但却只能检测出其中一个。这是YOLO方法的一个缺陷。 3)YOLO loss函数中,大物体IOU误差和小物体IOU误差对网络训练中loss贡献值接近(虽然采用求平方根方式,但没有根本解决问题)。因此,对于小物体,小的IOU误差也会对网络优化过程造成很大的影响,从而降低了物体检测的定位准确性。
|