基本思想
YOLO(You Only Look Once )是针对深度学习目标检测问题提出的另一种框架,其核心思想是生成RoI+目标检测两阶段算法用一套网络的一阶段算法代替,直接在输出层回归bounding box的位置和所属类别。
之前的物体检测方法首先需要产生大量可能包含待检测物体的先验框, 然后用分类器判断每个先验框对应的边界框里是否包含待检测物体,以及物体所属类别的概率或者置信度,同时需要后处理修正边界框,最后基于一些准则过滤掉置信度不高和重叠度较高的边界框,进而得到检测结果。这种基于先产生候选区再检测的方法虽然有相对较高的检测准确率,但运行速度较慢。
YOLO创造性的将物体检测任务直接当作回归问题(regression problem)来处理,将候选区和检测两个阶段合二为一。只需一眼就能知道每张图像中有哪些物体以及物体的位置。
实际上,YOLO并没有真正去掉候选区,而是采用了预定义候选区的方法,也就是将图片划分为77个网格,每个网格允许预测出2个边框,总共492个bounding box,可以理解为98个候选区域,它们很粗略地覆盖了图片的整个区域。YOLO以降低mAP为代价,大幅提升了时间效率。
每个网格单元预测这些框的2个边界框和置信度分数。这些置信度分数反映了该模型对框是否包含目标的可靠程度,以及它预测框的准确程度。置信度定义为:
P
r
(
O
b
j
e
c
t
)
∗
I
O
U
p
r
e
d
t
r
u
t
h
Pr(Object)*IOU_{pred}^{truth}
Pr(Object)∗IOUpredtruth如果该单元格中不存在目标,则置信度分数应为零。否则,我们希望置信度分数等于预测框与真实值之间联合部分的交集(IOU)。
每个边界框包含5个预测:x ,y ,w ,h 和置信度。(x,y)坐标表示边界框相对于网格单元边界框的中心。宽度和高度是相对于整张图像预测的。最后,置信度预测表示预测框与实际边界框之间的IOU。
每个网格单元还预测 个条件类别概率 P r ( C l a s s i ∣ O b j e c t ) Pr(Class_i|Object) Pr(Classi∣Object)。这些概率以包含目标的网格单元为条件。每个网格单元我们只预测的一组类别概率,而不管边界框的的数量 是多少。
网络结构
YOLOv1网络有24个卷积层,后面是2个全连接层。我们只使用11 降维层,后面
是 33卷积层。如下图所示:
为了快速实现快速目标检测,YOLOV1还训练了快速版本。快速YOLO使用具有较少卷积层(9层而不是24层)的神经网络,在这些层中使用较少的滤波器。除了网络规模之外,YOLO和快速YOLO的所有训练和测试参数都是相同的。网络的最终输出是7730(1470)的预测张量。
训练过程
(1)预训练。采用前20个卷积层、平均池化层、全连接层进行了大约一周的预训练;
(2)输入。输入数据为224* 224和448*448大小的图像;
(3)采用相对坐标。通过图像宽度和高度来规范边界框的宽度和高度,使它们落在0和1之间;边界框 和 坐标参数化为特定网格单元位置的偏移量,边界也在0和1之间;
(4)损失函数如下图示:
- 损失函数由坐标预测、是否包含目标物体置信度、类别预测构成;、
- 其中 1 i o b j 1_i^{obj} 1iobj表示目标是否出现在网格单元 中,表示 1 i o b j 1_i^{obj} 1iobj 网格单元 中的第 个边界框预测器“负责”该预测;
- 如果目标存在于该网格单元中(前面讨论的条件类别概率),则损失函数仅惩罚分类错误;
- 如果预测器“负责”实际边界框(即该网格单元中具有最高IOU的预测器),则它也仅惩罚边界框坐标错误。
(5)学习率。第一个迭代周期,慢慢地将学习率从
1
0
−
3
10^{-3}
10−3 提高到
1
0
−
2
10^{-2}
10−2 ;然后继续以
1
0
−
2
10^{-2}
10−2 的学习率训练75个迭代周期,用
1
0
−
3
10^{-3}
10−3 的学习率训练30个迭代周期,最后用
1
0
−
4
10^{-4}
10−4 的学习率训练30个迭代周期。
(6)避免过拟合策略。使用dropout和数据增强来避免过拟合。
优缺点
(1)优点
-YOLO 检测物体速度快。
- YOLO在训练和测试时都能看到一整张图的信息,因此YOLO在检测物体是能很好利用上下文信息,从而不容易在背景上预测出错误的物体信息。
- YOLO可以学到物体泛化特征
(2) 缺点 - 容易产生定位错误
- 对小物体检测效果不好