YOLO 系列目标检测算法入门:从 YOLO v1 开始理解 One-Stage 检测器
本文介绍了YOLOv1目标检测算法的核心原理与实现。作为One-Stage检测器的代表,YOLOv1将输入图像划分为7×7网格,每个网格预测2个边界框及类别概率,通过端到端网络实现快速检测。文章详细解析了其网络结构(24个卷积层+2个全连接层)和创新的多任务损失函数设计,该损失函数通过加权机制平衡定位、置信度和分类任务。YOLOv1具有速度快(45FPS)、全局信息利用充分等优点,但也存在网格预测
目录
YOLO 系列目标检测算法入门:从 YOLO v1 开始理解 One-Stage 检测器
引言
在计算机视觉领域,目标检测(Object Detection) 是一项基础而关键的任务,其目标是在图像中定位并识别出多个目标物体。近年来,随着深度学习的发展,目标检测算法经历了从传统方法到端到端神经网络的飞跃。其中,YOLO(You Only Look Once)系列 以其“快、准、稳”的特点,成为工业界和学术界广泛应用的代表性算法之一。
本文将从 YOLO 系列的整体背景出发,重点解析 YOLO v1 的核心思想、网络结构与优缺点,帮助读者建立起对 One-Stage 检测器的系统认知。
一、YOLO 系列概述
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 网络结构
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 为例):
1. 初始特征提取:
- 7×7 卷积(64 通道,步长 2)→ 提取大范围纹理
- 2×2 最大池化(步长 2)→ 下采样
2. 中间特征增强:
- 3×3 卷积(192 通道)
- 再次池化
3. 核心卷积块(重复多次):
- 1×1 卷积(降维,如 256 → 128)
- 3×3 卷积(升维,如 128 → 256)
- 这种“瓶颈”结构有效减少了参数量
4. 深层语义提取:
- 经过多次下采样后,特征图尺寸变为 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 由以下五部分组成:
(1)边界框中心坐标损失(x, y)
只对负责预测真实目标的网格和框计算:

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

为什么开根号?
小目标的 w, 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 等后续版本的持续改进。
更多推荐


所有评论(0)