目标检测 YOLO 系列模型
前言
YOLO (You Only Look Once) 系列模型追求实时目标检测,因此会在一定程度上牺牲精度,以实现更高的检测速度。
如果你对这篇文章可感兴趣,可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」,查看完整博客分类与对应链接。
目标检测评价指标
IoU
模型预测框的 IoU 值与 IoU 阈值进行比较,若大于阈值,即为正确的检测,否则为错误的检测。
mAP
目标检测中,每个预测框都对应一个置信度,不同的置信度阈值,意味着最终留下的预测框的不同。
AP 是针对目标检测中某个单独的类别的检测效果,即在同一 IoU 阈值下,通过调整置信度阈值,得到 P-R 曲线,其下方面积即为 AP 值。相应地,mAP 即是所有类别的 AP 值取平均后的结果。
mAP
=
1
C
∑
i
=
1
C
AP
i
\text{mAP}=\frac{1}{C}\sum_{i=1}^C \text{AP}_i
mAP=C1i=1∑CAPi
YOLOv1
论文链接:[CVPR16 - Joseph Redmon] You Only Look Once: Unified, Real-Time Object Detection
网络架构
整体网络架构如下:
可以看到开始的输入被固定为 448x448x3,输出被固定为 7x7x30,其中输出的含义为将原始输入图片划分为 7x7 的网格,其中每个网格包含 30 维信息(x, y, w, h 均为归一化后结果):
- 1~5:当前网格对应预测框 1 的信息,框中心 x、y 坐标,宽度 w,高度 h,置信度 c
- 6~10:当前网格对应预测框 2 的信息,框中心 x、y 坐标,宽度 w,高度 h,置信度 c
- 11~30:对 20 个类别的预测概率
损失函数
其中对 w、h 开根再求差,是为了放大小物体检测框的权重,因为
y
=
x
y=\sqrt{x}
y=x 在数值较小时变化更剧烈。
模型特点
- 优点:
- 快速、简单
- 不足:
- 每个网格只预测一个类别,如果物体重叠,则难以识别
- 只有两个预选框,小物体检测效果一般
YOLOv2
论文链接:[CVPR17 - Joseph Redmon] YOLO9000:Better, Faster, Stronger
改进方案
- Batch Normalization
- v2 舍弃 Dropout,卷积后全部加入 Batch Normalization,即网络的每一层的输入都做了归一化,使收敛更容易
- 经过 BN 处理后的网络会提升 2% 的 mAP
- 更大的分辨率
- v1 训练时用 224x224,测试时使用 448x448;因此 v2 训练时再额外进行 10 次 448x448 的微调
- 该项改进提升 4% 的 mAP
- 网络结构改变
- 采用 Darknet-19,去除所有全连接层,进行 19 次卷积,且再进行 5 次降采样,以及多次 1x1 卷积,节省大量参数
- 每一层卷积核尺寸都较小,原因在于多个小卷积核比一个大卷积核更省参数,以及多个小卷积核,每次卷积后再进行 BN,网络输出更稳定
- 最终输出从 7x7 提升至 13x13,预测的框更多了
- 聚类提取先验框
- faster-rcnn 中选取的先验框比例都是常规的,而 v2 中先验框大小通过对训练集中标注的边框进行 k-means 聚类,其中聚类采用的距离形式如下(欧式距离对大框和小框不公平):
d ( box, centroids ) = 1 − IOU ( box, centroids ) d(\text { box, centroids })=1-\operatorname{IOU}(\text { box, centroids }) d( box, centroids )=1−IOU( box, centroids ) - 根据 k 和 Avg IOU 曲线,选择 k = 5
- faster-rcnn 中选取的先验框比例都是常规的,而 v2 中先验框大小通过对训练集中标注的边框进行 k-means 聚类,其中聚类采用的距离形式如下(欧式距离对大框和小框不公平):
- 预测框偏移量计算
- 原先的
x
=
x
p
+
w
p
∗
t
x
x=x_p+w_p*tx
x=xp+wp∗tx 为直接偏移量,存在收敛问题,导致模型不稳定;因此修改为相对网格的偏移,使得中心点不会偏移出网格:
- 计算举例(根据预测值,以及一开始聚类得到的先验框大小,得到最终的预测框):
- 原先的
x
=
x
p
+
w
p
∗
t
x
x=x_p+w_p*tx
x=xp+wp∗tx 为直接偏移量,存在收敛问题,导致模型不稳定;因此修改为相对网格的偏移,使得中心点不会偏移出网格:
- 特征融合
- 最后一层感受野(特征图上的点能看到原始图像的区域)太大了,小目标可能丢失,因此与之前的特征进行融合
- 最后一层感受野(特征图上的点能看到原始图像的区域)太大了,小目标可能丢失,因此与之前的特征进行融合
- 适配多尺度输入
- 由于网络中不再有全连接层,因此可以适配多尺度的输入
改进结果
YOLOv3
论文链接:[arXiv18 - Joseph Redmon] YOLOv3: An Incremental Improvement
改进方案
- 多 scale
- 为了检测不同大小的物体,设计了 3 个 scale
- 为了检测不同大小的物体,设计了 3 个 scale
- 网络架构修改
- 将 multi scale 进行融合
- 将 multi scale 进行融合
改进效果
神图:效率与性能远程其它模型
YOLOv4
论文链接:[CVPR20 - Alexey Bochkovskiy] YOLOv4: Optimal Speed and Accuracy of Object Detection
网络架构
注意其中的 multi-scale 融合,从 YOLOv3 中只有第二部分(自下而上),增加了第三部分(自上而下),并且融合的方式从原先的直接相加,变为了深度拼接。
优化策略
- 数据增广:Mosaic 图片拼接,增加样本多样性
YOLOv5
代码实现:YOLOv5 in PyTorch
图片来源:YOLOv5网络详解、YOLOv5 解读,训练,复现
网络架构
其中骨干网络有如下多个选择:
优化策略
-
数据增广:Augment HSV (Hue, Saturation, Value)
-
数据增广:Mix up(根据透明度融合)
-
数据增广:Copy paste
参考资料
- 视频资料 1 - YOLOv1v2v3
- 视频资料 2 - YOLOv4
- 视频资料 3 - YOLOv5
- 文章资料 1 - YOLOv1v2v3v4v5
- 文章资料 2 - YOLOv4
- 文章资料 3 - YOLOv5
- 文章资料 4 - YOLOv5
- 代码资料