系列说明:本系列共四篇,本篇为第一篇,聚焦 YOLO 系列的奠基之作 YOLOv1 和改进版 YOLOv2,深入讲解其核心思想、网络架构与损失函数设计。


一、目标检测背景:One-Stage vs Two-Stage

目标检测任务的目标是让模型同时完成"找到目标在哪(定位)"和"目标是什么(分类)"两件事。根据检测流程的不同,检测算法分为两大流派:

1.1 Two-Stage 检测器

以 R-CNN 系列(R-CNN → Fast R-CNN → Faster R-CNN)为代表,检测分两个阶段进行:

  • 第一阶段:通过选择性搜索(Selective Search)或 RPN 网络生成候选区域(Region Proposal);
  • 第二阶段:对候选区域做精细分类与回归。
特性Two-Stage
精度
速度慢(通常 ~5 FPS)
代表算法Faster R-CNN、Mask R-CNN

1.2 One-Stage 检测器

以 YOLO 系列为代表,将检测问题转换为回归问题,用单个 CNN 直接输出类别与位置,无需候选框生成阶段。

特性One-Stage
精度相对较低
速度极快,适合实时检测
代表算法YOLO 系列、SSD

关键指标

  • FPS(Frames Per Second):每秒处理的图像帧数,衡量检测速度;
  • FLOPs(Floating Point Operations):前向传播所需浮点运算次数,衡量计算量。

二、检测评估指标:mAP 详解

在进入 YOLO 原理之前,先明确检测任务中最重要的评估指标——mAP(Mean Average Precision,平均精度均值)

2.1 精确率(Precision)与召回率(Recall)

Precision=TPTP+FP\text{Precision} = \frac{TP}{TP + FP}Precision=TP+FPTP

Recall=TPTP+FN\text{Recall} = \frac{TP}{TP + FN}Recall=TP+FNTP

  • TP(True Positive):预测为正,且预测正确;
  • FP(False Positive):预测为正,但预测错误;
  • FN(False Negative):图中有目标,但未检测到。

示例:设阈值为 0.9,图像中有 3 个人,模型检测到 1 个正确、1 个错误:

  • TP=1,FP=1,FN=2
  • Precision = 1/2 = 0.5,Recall = 1/3 ≈ 0.33

2.2 AP 与 mAP

以不同置信度阈值绘制 P-R 曲线,曲线下面积即为该类别的 AP(Average Precision)。对所有类别取平均,得到 mAP

在这里插入图片描述

指标含义
mAP@50IoU 阈值为 0.5 时的平均精度
mAP@50:95IoU 从 0.5 到 0.95 每步 0.05 的平均精度,更严格

2.3 IOU(Intersection over Union)

在这里插入图片描述

IOU=预测框∩真实框预测框∪真实框\text{IOU} = \frac{\text{预测框} \cap \text{真实框}}{\text{预测框} \cup \text{真实框}}IOU=预测框真实框预测框真实框

IOU 越高,预测框与真实框重叠度越高,检测越准确。


三、YOLOv1:开创性的单阶段检测

论文:《You Only Look Once: Unified, Real-Time Object Detection》(2016,CVPR)
作者:Joseph Redmon 等

3.1 核心思想:网格预测

YOLOv1 的革命性想法是把图像划分成 S×S 个网格(Grid Cell),每个网格负责预测落在该格内的目标。

在这里插入图片描述

图1:将图像划分为 S×S 网格,每个格子负责预测对应目标

检测流程只需一次前向传播,无需多阶段处理,因此速度极快。

3.2 网络输出格式

对于 PASCAL VOC 数据集,YOLO 将图像划分为 7×7 个网格,每个格子预测 2 个边界框,每个边界框包含 5 个值:

[x,y,w,h,c][x, y, w, h, c][x,y,w,h,c]

  • (x,y)(x, y)(x,y):边界框中心相对网格的归一化坐标(0~1);
  • (w,h)(w, h)(w,h):边界框宽高相对整幅图像的归一化值(0~1);
  • ccc(置信度):=P(Object)×IoU= P(\text{Object}) \times \text{IoU}=P(Object)×IoU,表示该框中存在目标的可能性。

每个格子还预测 20 个类别概率(PASCAL VOC 共 20 类)。

因此,网络最终输出张量为:

7×7×30(2×5+20=30)7 \times 7 \times 30 \quad (2 \times 5 + 20 = 30)7×7×30(2×5+20=30)

3.3 网络架构

YOLOv1 的骨干网络借鉴了 GoogLeNet,共包含 24 个卷积层 + 2 个全连接层,用 1×1 降维卷积接 3×3 卷积替换 Inception 模块。

在这里插入图片描述

图2:YOLOv1 网络架构,输出 7×7×30 的预测张量

Input(448×448×3) → [Conv × 24] → [FC × 2] → Output(7×7×30)

3.4 损失函数设计

YOLOv1 的损失函数由三部分组成,对坐标、置信度、分类误差分别进行约束:

L=Lcoord+Lconf+Lclass\mathcal{L} = \mathcal{L}_{\text{coord}} + \mathcal{L}_{\text{conf}} + \mathcal{L}_{\text{class}}L=Lcoord+Lconf+Lclass

关键设计点

  1. 坐标损失:对 w,hw, hw,h 取平方根再计算误差,使小目标的偏差更敏感(大目标对小偏差不敏感);
  2. 权重系数λcoord=5\lambda_{\text{coord}} = 5λcoord=5(放大坐标误差权重),λnoobj=0.5\lambda_{\text{noobj}} = 0.5λnoobj=0.5(降低无目标格子的置信度权重);
  3. 全连接层输出:将 7×7×30 展平后通过全连接层预测。

在这里插入图片描述

图3:YOLOv1 损失函数,包含坐标、置信度、分类三部分

3.5 YOLOv1 的局限性

问题描述
每格只预测 1 个类别若两目标重叠在同一格,无法区分
长宽比单一每格仅 2 个先验框,形状可选空间有限
小目标检测效果差特征图分辨率低(7×7),小物体难以定位

448448的图片分成77的网格,则一个一个网格代表原来64像素。特征压缩导致信息丢失,为了解决这个问题后面地方v2v3模型进行的改进

四、YOLOv2(YOLO9000):Better, Faster, Stronger

论文:《YOLO9000: Better, Faster, Stronger》(2017,CVPR)

YOLOv2 在 v1 基础上针对性地解决了上述问题,引入了多项关键改进。

4.1 引入 Batch Normalization

YOLOv2 在每个卷积层后加入 Batch Normalization(BN),带来以下好处:

  • 加速收敛,使训练更稳定;
  • 起到正则化作用,去掉 Dropout 层;
  • mAP 提升约 2%。
    在这里插入图片描述

图4:加入 BN 层后,YOLOv2 各项指标的对比提升

4.2 高分辨率分类器预训练

YOLOv1 在 ImageNet 上以 224×224 预训练分类网络,但检测时用 448×448 输入,存在分辨率不匹配问题。

YOLOv2 改进策略:

  1. 先用 224×224 预训练 160 个 epoch;
  2. 再改用 448×448 微调 10 个 epoch;
  3. 最后用于检测训练。

这使得网络对高分辨率输入更加适应,mAP 提升约 4%。

4.3 Anchor Box:引入先验框

YOLOv1 直接预测绝对坐标,YOLOv2 借鉴 Faster R-CNN 引入 Anchor(先验框) 机制,将检测转为预测相对先验框的偏移量,大幅降低学习难度。

K-Means 聚类生成先验框

YOLOv2 不手工设计先验框,而是对训练集中所有标注框进行 K-Means 聚类,自动学出 5 种最适合数据集分布的先验框尺寸:

流程:
1. 提取训练集所有标注框的 (w, h)
2. 随机初始化 5 个聚类中心
3. 用 IOU 距离(而非欧氏距离)迭代聚类
4. 输出 5 种先验框作为 Anchor

在这里插入图片描述

图5:通过 K-Means 聚类生成 5 种先验框

YOLOv3 进一步扩展为 9 种先验框(按检测尺度分 3 类,每类 3 种)。

4.4 位置预测改进:Direct Location Prediction

Faster R-CNN 中先验框的位置偏移预测公式为:

x=(tx⋅wa)+xa,y=(ty⋅ha)+yax = (t_x \cdot w_a) + x_a, \quad y = (t_y \cdot h_a) + y_ax=(txwa)+xa,y=(tyha)+ya

该公式在训练初期 txt_xtx 取值没有约束,可能导致框预测位置偏移到图像任意位置,训练不稳定

YOLOv2 用 Sigmoid 函数约束预测的偏移量,保证预测中心始终在当前网格内:

bx=σ(tx)+cx,by=σ(ty)+cyb_x = \sigma(t_x) + c_x, \quad b_y = \sigma(t_y) + c_ybx=σ(tx)+cx,by=σ(ty)+cy
bw=pw⋅etw,bh=ph⋅ethb_w = p_w \cdot e^{t_w}, \quad b_h = p_h \cdot e^{t_h}bw=pwetw,bh=pheth

  • (cx,cy)(c_x, c_y)(cx,cy):当前网格左上角坐标;
  • (pw,ph)(p_w, p_h)(pw,ph):先验框宽高;
  • σ\sigmaσ 为 Sigmoid 函数,将输出约束到 (0, 1)。

在这里插入图片描述

图6:YOLOv2 位置预测公式,通过 Sigmoid 约束偏移量

4.5 细粒度特征融合(Fine-Grained Features)

YOLOv2 将浅层高分辨率特征图(26×26×512)通过 passthrough 层 重组为低分辨率特征图(13×13×2048),再与深层特征拼接,解决小目标漏检问题。

26×26×512 → [passthrough] → 13×13×2048
                                ↓ concat
              13×13×1024  ──────┘
                                ↓
                         最终预测输出

在这里插入图片描述

图7:passthrough 层将 26×26 特征重组后与 13×13 特征拼接

4.6 多尺度训练

由于 YOLOv2 去掉了全连接层,网络可以接受任意尺寸输入。训练时每隔 10 个 batch,随机从以下尺寸中选择一个输入大小:

{320,352,384,416,448,480,512,544,576,608} (均为32的倍数)\{320, 352, 384, 416, 448, 480, 512, 544, 576, 608\} \text{ (均为32的倍数)}{320,352,384,416,448,480,512,544,576,608} (均为32的倍数)

这使得 YOLOv2 对不同输入尺寸都有较好的鲁棒性,小尺寸输入速度快,大尺寸输入精度高。


五、YOLOv1 vs YOLOv2 对比总结

特性YOLOv1YOLOv2
主干网络GoogLeNet-likeDarknet-19
先验框无,直接预测K-Means 聚类 5 个 Anchor
Batch Normalization所有卷积层后均有
输入分辨率448×448(固定)多尺度(320~608)
特征图输出7×7×3013×13×(5×(5+C))
位置预测直接预测绝对坐标相对先验框的偏移量
小目标检测改进(passthrough 层融合细粒度特征)
mAP(VOC 2007)63.478.6
速度(FPS)4540(416×416 输入)

六、小结

YOLOv1 开创了单阶段目标检测的先河,以极快的速度换取可接受的精度;YOLOv2 通过引入 BN、Anchor、多尺度训练等多项改进,在保持速度的同时大幅提升了精度。二者共同奠定了 YOLO 系列的核心设计哲学:用最简洁的回归方式解决检测问题

下一篇将介绍 YOLOv3 的多尺度检测机制,以及如何使用 LabelMe 工具为自定义数据集打标签并完成训练。


参考文献

  1. Redmon, J., et al. “You only look once: Unified, real-time object detection.” CVPR 2016.
  2. Redmon, J., & Farhadi, A. “YOLO9000: better, faster, stronger.” CVPR 2017。

更多推荐