You Only Look Once: Unified, Real-Time Object Detection
1、核心思想
将整张图片作为网络的输入,直接在输出层对 BBox 的位置和类别进行回归。
- Resize image:将输入图片resize到448x448。
- Run ConvNet:使用CNN提取特征,FC层输出分类和回归结果。
- Non-max Suppression:非极大值抑制筛选出最终的结果。
2、前向推断
(1)前向推断流程:
1)首先将输入图片分成 S × S 个网格(grid cell),如果某个 object 的中心落在这个网格中,则这个网格就负责预测这个 object 。
2)每个网格需要预测 B (YOLO V1 中 B = 2) 个BBox 的位置信息和 confidence(置信度),一个 BBox 对于着四个位置信息 (x, y, w, h) 和一个 confidence 信息。
x —— 预测框中心的横坐标
y —— 预测框中心的纵坐标
w —— 预测框的宽度
h —— 预测框的高度
confidence(置信度)—— 预测框中包含目标物体的概率值
3)每个网格要预测 B 个 bounding box 还要预测 C 个 categories 。输出就是S × S × ( 5 ∗ B + C ) 的一个 tensor 。
4) 阈值处理:根据 confidence ,去除掉大部分不含预测物体的背景框。
5) NMS (Non-Maximum Suppression,非极大值处理)处理:利用 IoU 去除掉多余的 bounding box,防止重复预测同一物体。
(2)YOLO V1 网络结构
YOLO V1 的检测网络有 24 个卷积层和 2 个全连接层。交替使用 1 x 1 个卷积层减少了前一层的特征空间。我们在 ImageNet 分类任务上以一半的分辨率(224 x 224 输入图像)对卷积层进行预处理,然后将分辨率提高一倍进行检测,也就是将图片尺寸提高 448 x 448 。输入图片 reshape 为 448 x 448 x 3 ,在经过卷积层以及 4096 和 1470 两个全连接层之后,输出 7 x 7 x 30 的特征图。
为什么会输出 7 x 7 x 30 的特征图?
因为输入图像划分为 7 × 7 grid cell ,并且每个 grid cell 对应输出 30 维的向量(YOLO V1 每个 grid cell 预测 2 个 BBox):
3、反向传播
损失函数
在 YOLO V1 目标检测过程中一共需要计算 5 个误差:
- 负责检测物体 bbox 中心点定位误差
- 负责检测物体 bbox 宽高定位误差
- 负责检测物体 bbox 置信度 confidence 误差
- 不负责检测物体 bbox 置信度 confidence 误差
- 负责检测物体的 grid cell 分类误差
YOLO V1 相较于 Fast R-CNN 优势主要体现在它是 one stage 网络,推理速度快。
[REFERENCE]
【精读AI论文】YOLO V1目标检测,看我就够了
yolov1:背景介绍与算法精讲
YOLO系列论文精读总结——YOLOv1篇
YOLO学习笔记——第一篇YOLOv1