YOLO 系列目标检测算法入门:从 YOLO v1 开始理解 One-Stage 检测器
目录
引言
在计算机视觉领域,目标检测(Object Detection) 是一项基础而关键的任务,其目标是在图像中定位并识别出多个目标物体。近年来,随着深度学习的发展,目标检测算法经历了从传统方法到端到端神经网络的飞跃。其中,YOLO(You Only Look Once)系列 以其“快、准、稳”的特点,成为工业界和学术界广泛应用的代表性算法之一。
本文将从 YOLO 系列的整体背景出发,重点解析 YOLO v1 的核心思想、网络结构与优缺点,帮助读者建立起对 One-Stage 检测器的系统认知。
一、YOLO 系列概述
YOLO 算法由 Joseph Redmon 等人于 2016 年首次提出,其最大创新在于:将目标检测问题转化为一个回归问题,通过单次前向传播即可完成对图像中所有目标的定位与分类。
1.1 One-Stage vs Two-Stage
目标检测算法通常分为两类:
-
Two-Stage 方法(如 R-CNN、Fast R-CNN、Faster R-CNN、Mask R-CNN)
先生成候选区域(Region Proposal),再对每个区域进行分类和精确定位。优点是精度高,但速度慢(通常仅 5 FPS 左右),不适合实时场景。 -
One-Stage 方法(如 YOLO 系列、SSD)
直接在整张图像上进行密集预测,一步到位输出类别和边界框。优点是推理速度快,适合实时检测(如自动驾驶、视频监控),但早期版本在小目标和密集场景下精度略逊。

YOLO 正是 One-Stage 的代表,其设计理念是:“You Only Look Once”——只需看一次图像,就能完成检测。
二、YOLO v1 详解
2.1 核心思想
YOLO v1 将输入图像划分为 S × S 的网格(Grid Cell)(如 7×7)。每个网格负责预测:
- 该网格内是否存在目标(以目标中心点是否落在该网格为判断依据);
- 目标的边界框(Bounding Box):包括中心坐标 (x, y)、宽高 (w, h);
- 目标的类别概率(假设每个网格只负责一个类别)。
每个网格会预测 B 个边界框(YOLO v1 中 B=2),每个框包含 5 个值:(x, y, w, h, confidence),再加上 C 个类别概率(COCO 数据集 C=80,PASCAL VOC C=20)。
因此,最终输出张量维度为:S × S × (B×5 + C)。以 7×7 网格、2 个框、20 类为例,输出为 7×7×30。
2.2 置信度(Confidence)的含义
置信度 = Pr(Object) × IoU
- Pr(Object):该网格是否包含目标(0 或 1);
- IoU:预测框与真实框的交并比。


若网格不含目标,置信度为 0;若包含,则置信度反映预测框的准确程度。
三、YOLO v1 网络结构
YOLO v1 的网络结构虽然在今天看来略显“复古”,但其设计逻辑清晰,是理解后续 YOLO 版本演进的基础。
3.1 整体架构概览
YOLO v1 的主干网络受 GoogLeNet 启发,但做了简化,整体包含 24 个卷积层 + 2 个全连接层,输入固定为 448×448×3,输出为 7×7×30 的张量。
注意:由于最后使用了全连接层,YOLO v1 无法支持任意尺寸输入,这是它与 YOLO v2/v3 的重要区别。
3.2 卷积层设计细节
网络前 24 层全部为卷积层,采用 1×1 卷积 + 3×3 卷积 的交替堆叠方式,替代了 GoogLeNet 中复杂的 Inception 模块。这种设计既能降低计算量,又能保留足够的特征表达能力。
具体流程如下(以 PASCAL VOC 为例):
- 初始特征提取:
- 7×7 卷积(64 通道,步长 2)→ 提取大范围纹理
- 2×2 最大池化(步长 2)→ 下采样
- 中间特征增强:
- 3×3 卷积(192 通道)
- 再次池化
- 核心卷积块(重复多次):
- 1×1 卷积(降维,如 256 → 128)
- 3×3 卷积(升维,如 128 → 256)
- 这种“瓶颈”结构有效减少了参数量
- 深层语义提取:
- 经过多次下采样后,特征图尺寸变为 7×7
- 通道数达到 1024
经过 24 层卷积和 4 次池化(每次下采样 2 倍),448×448 的输入最终被压缩为 7×7×1024 的特征图。
3.3 全连接层与输出
卷积输出的 7×7×1024 特征图被展平为 50176 维向量(7×7×1024 = 50176),然后送入两个全连接层:
- 第一层 FC:50176 → 4096,使用 ReLU 激活函数
- 第二层 FC:4096 → 1470(因为 7×7×30 = 1470)
最后,1470 维输出被 reshape 为 7×7×30,每个位置对应一个网格的预测结果。
关键理解:这 30 个值中:
- 前 10 个:2 个边界框的 (x, y, w, h, confidence)
- 后 20 个:20 个类别的条件概率 P(class | object)
四、YOLO v1 损失函数设计
YOLO v1 的损失函数是其成功的关键之一。它不是一个简单的分类或回归损失,而是一个多任务加权均方误差(MSE),同时优化定位、置信度和分类三个目标。
4.1 为什么用 MSE?
YOLO v1 将检测视为回归问题,因此自然选择 均方误差(MSE) 作为基础损失。但直接对所有输出使用相同权重会导致训练不稳定,因此引入了任务加权机制。
4.2 损失函数的五大组成部分
总损失 L LL 由以下五部分组成:
(1)边界框中心坐标损失(x, y)
只对负责预测真实目标的网格和框计算:

- 1 i j obj = 1 \mathbb{1}_{ij}^{\text{obj}} = 11ijobj=1 表示第 i ii 个网格的第 j jj 个框“负责”某个真实目标(即目标中心在该网格,且该框与真实框 IoU 最大)
- λ coord = 5 \lambda_{\text{coord}} = 5λcoord=5:提高定位损失权重,因为定位不准会严重影响检测效果
(2)边界框宽高损失(w, h)
同样只对负责预测的框计算,但对 w ww 和 h hh 开平方根:

为什么要开根号?
小目标的 w , h w, hw,h 值很小(如 0.1),若直接用 MSE,其误差平方后更小(0.01),梯度极弱,模型难以学习。开根号后,小值区域的误差被放大,使模型对小目标更敏感。
(3)含目标的置信度损失
对负责预测的框,使其 confidence 接近真实 IoU:

(4)不含目标的置信度损失
对不负责任何目标的框,使其 confidence 接近 0:

:降低负样本权重,因为 7×7×2=98 个预测框中,绝大多数不包含目标,若不加权,模型会过度优化“无目标”区域,导致漏检。
(5)分类损失
仅对包含目标中心的网格计算类别概率的 MSE:

- 注意:这里预测的是 条件概率
,不是联合概率 - 最终检测得分

4.3 损失函数的意义总结
| 任务 | 是否加权 | 权重 | 原因 |
|---|---|---|---|
| 定位(x, y, w, h) | 是 | 定位不准影响大 | |
| 无目标置信度 | 是 | 负样本过多 | |
| 有目标置信度 & 分类 | 否 | 1.0 | 正样本已稀疏 |
这种设计体现了 YOLO v1 在样本不平衡和多任务冲突下的工程智慧。
五、YOLO v1 的优缺点
优点
- 速度快:可达到 45 FPS(在 Titan X 上),适合实时应用;
- 端到端训练:结构简单,易于实现和部署;
- 全局信息利用充分:不像滑动窗口或区域提议那样局部化,能更好避免背景误检。
缺点
- 每个网格只能预测一个类别:若多个目标中心落在同一网格,无法处理重叠目标;
- 小目标检测效果差:7×7 网格粒度较粗,对小物体定位不准;
- 边界框形状受限:仅使用 2 个预设框,难以适应极端长宽比的目标。
正是这些局限性,推动了 YOLO v2、v3 等后续版本的持续改进。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)