目录

YOLO 系列目标检测算法入门:从 YOLO v1 开始理解 One-Stage 检测器

一、YOLO 系列概述

1.1 One-Stage vs Two-Stage

二、YOLO v1 详解

2.1 核心思想

2.2 置信度(Confidence)的含义

三、YOLO v1 网络结构

3.1 整体架构概览

3.2 卷积层设计细节

3.3 全连接层与输出

四、YOLO v1 损失函数设计

4.1 为什么用 MSE?

4.2 损失函数的五大组成部分

(1)边界框中心坐标损失(x, y)

(2)边界框宽高损失(w, h)

(3)含目标的置信度损失

(4)不含目标的置信度损失

(5)分类损失

4.3 损失函数的意义总结

五、YOLO v1 的优缺点

优点

缺点

格式说明:


引言


在计算机视觉领域,目标检测(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. 初始特征提取:

  1. 7×7 卷积(64 通道,步长 2)→ 提取大范围纹理
  2. 2×2 最大池化(步长 2)→ 下采样

2. 中间特征增强:

  1. 3×3 卷积(192 通道)
  2. 再次池化

3. 核心卷积块(重复多次):

  1. 1×1 卷积(降维,如 256 → 128)
  2. 3×3 卷积(升维,如 128 → 256)
  3. 这种“瓶颈”结构有效减少了参数量

4. 深层语义提取:

  1. 经过多次下采样后,特征图尺寸变为 7×7
  2. 通道数达到 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 等后续版本的持续改进。

 

更多推荐