YOLOv1
《You Only Look Once》论文地址:You Only Look Once: Unified, Real-Time Object Detection
视频讲解地址:YOLO Object Detection
YOLOv1的原理
在推出 YOLO 目标检测之前,研究人员使用了基于卷积神经网络(CNN) 的方法,如 R-CNN 和Fast R-CNN。这些方法使用两步流程,先预测边界框,然后使用回归对这些框中的物体进行分类。这种方法速度慢且耗资源,但 YOLO 模型彻底改变了目标检测。2016 年,Joseph Redmon 和 Ali Farhadi 两位大神开发了第一个 YOLO,它通过新的增强架构克服了传统目标检测算法的大多数问题。
网络结构图
解读
YOLO 架构由 24 个卷积层和 2 个全连接层组成,灵感来自用于图像分类的GoogLeNet模型。YOLOv1 方法是当时的首创方法。
Conv.Layer表示卷积层
- 7×7×64-s-2表示该卷积层尺寸为7×7,通道数为64,步长为2
Maxpool Layer表示最大池化层
- 2×2-s-2表示池化窗口大小为2×2,步长为2
Conn.Layer表示全连接层
整个网络由 24 个卷积层 (受 GoogLeNet 启发,有很多 1 × 1 和 3 × 3 交替的结构) 和 2 个全连接层构成,输入图像尺寸为 448 × 448,输出为 7 × 7 × 30,说一下输出为啥是这个 shape。YOLOv1 会把输入图像划成 7 × 7 的 grid,每个 grid 负责预测 2 个目标,对于每个目标来说又有这些属性:x、y、h、w、置信度,然后再加上类别数 20,这样就形成了 7 × 7 × (2 × 5 + 20) = 7 × 7 × 30 的输出 tensor 了。
由于 YOLOv1 将图片划分为 7 × 7 个 grid,虽然每个 grid 负责预测两个目标,但最后会通过抑制只保留一个匹配度最高的 bounding box,也就是说一张图我最多就给你预测七七 49 个目标,那么想一下,如果有两个相邻的目标落在了同一个 grid 中,那么势必会漏检一个,所以 YOLOv1 对于邻近目标的检测效果不好。
损失函数
详细讲解见YOLO V1损失函数的理解 - GShang - 博客园
创新点
前人工作
- DPM:采用滑动窗口策略,在整张图像上均匀地运行分类器
- R-CNN: 先生成图像中的候选边界框,再在这些候选框上运行分类器
创新性工作
- 把目标检测问题直接定义为边界框坐标和类别概率的回归问题,在一张图像上定位和分类是同时做的,如上图左边,人,狗,马的一张图片放到YOLO经过裁剪图片后输入到单一的卷积网络经过最大值抑制之后输出了右边这张图,能够同时预测多个边界框及其对应的类别概率。
- YOLO 极其快速: YOLO 可以在不到 25 毫秒的延迟内处理视频流,实现真正的实时检测并且YOLO 的平均精度(mAP)比其他实时检测系统高出一倍以上。
- 具有很强的泛化能力:在拿毕加索的抽象艺术画进行预测的效果比前人的系统的性能强
- YOLO 在检测精度上仍落后于当时最先进的检测方法,特别是小目标




