1. YOLO 的前世今生:从 v1 到 v8 的演进脉络

YOLO 这个系列,我差不多从 v2 开始跟的。说实话,当年第一次看到 YOLOv1 的,第一反应是——这玩意儿真敢想。把检测当成回归问题来做,一个网络直接输出边界框和类别概率。这在当时几乎是离经叛道的做法。

但效果确实炸裂。45 FPS 的实时检测,让之前那些两阶段方法(R-CNN、Fast R-CNN)显得像老牛拉车。嗯,咱们今天就从头捋一遍,看看 YOLO 是怎么一步步走到今天的。

一句话总结 YOLO 的核心思想:将目标检测视为单一的回归问题,从图像像素直接映射到边界框坐标和类别概率。一个端到端的卷积网络搞定一切。

1.1 YOLOv1:开山之作,敢为人先

YOLOv1 是 2016 年由 Joseph Redmon 提出的。它的做法很简单:把输入图像分成 S×S 的网格,每个网格负责预测 B 个边界框和 C 个类别概率。

我记得第一次在项目里试 v1,训练了一个车牌检测模型。收敛速度确实快,但有个问题——小目标基本全漏了。两个物体挨得太近,网格也分不清谁是谁。

特性 YOLOv1
骨干网络 GoogLeNet 风格(24 层卷积)
输出方式 全连接层直接回归坐标
网格划分 7×7
每网格预测框数 2 个
速度 45 FPS(Titan X)
mAP(VOC 2007) 63.4

v1 的硬伤:每个网格只能预测一个类别,小目标检测能力极差。我曾经用它检测密集人群,结果惨不忍睹——人挨着人就只能识别出一个。

1.2 YOLOv2 / YOLO9000:更好,更快,更强

2017 年,v2 来了。这次改进非常大。我个人觉得,v2 才是 YOLO 真正走向实用的起点。

核心改进有这么几个:

  • Batch Normalization:训练更稳,收敛更快。我试过不加 BN 的版本,loss 曲线像过山车。
  • Anchor Boxes:用 k-means 聚类出先验框,不再直接回归坐标。这招很聪明——让网络学偏移量,比学坐标容易得多。
  • Darknet-19:自研骨干网络,19 层卷积 + 5 个 maxpooling。
  • 多尺度训练:每 10 个 batch 随机换一次输入尺寸(320~608)。

还有一个不得不提的——YOLO9000。它用 WordTree 把 COCO 和 ImageNet 的标签层级融合,实现了 9000 类别的检测。虽然精度一般,但这个思路在当时非常前卫。

我的经验:v2 的 anchor 聚类一定要用自己的数据集重新算。直接用 COCO 的 anchor 去检测工业零件,效果会差很多。k-means 跑一遍也就几分钟,别偷懒。

1.3 YOLOv3:多尺度检测的里程碑

2018 年,v3 发布。这版我用了整整两年,直到 v5 出来才换掉。为什么?因为它太稳了。

v3 的核心创新:

  • Darknet-53:借鉴 ResNet 的残差结构,53 层卷积。比 v2 的 19 层深得多,但速度依然快。
  • FPN(特征金字塔):在 3 个不同尺度上做检测。大尺度(13×13)检测大物体,小尺度(52×52)检测小物体。
  • 多标签分类:用 sigmoid 替代 softmax,一个物体可以同时属于多个类别。

说实话,v3 的改进非常务实。FPN 解决了 v1/v2 对小目标不敏感的问题。我在一个遥感图像检测项目里,用 v3 检测建筑物,效果比 v2 提升了将近 12 个点的 mAP。

# YOLOv3 的检测头配置(3 个尺度)
# 每个尺度预测 3 个 anchor
# 输出维度:S × S × [3 × (4 + 1 + C)]
# 4: 边界框坐标 (tx, ty, tw, th)
# 1: 置信度
# C: 类别数

# 以 COCO 80 类为例
# 13×13 尺度:13×13×255
# 26×26 尺度:26×26×255
# 52×52 尺度:52×52×255

1.4 YOLOv4 / v5:工程化的胜利

2020 年是 YOLO 的爆发年。v4 和 v5 几乎同时出现,但出自不同团队。

YOLOv4(Bochkovskiy 等):

  • 把当时所有能用的 trick 都堆上去了:Mish 激活函数、CSPNet、PANet、CIoU Loss、Mosaic 数据增强……
  • 训练技巧极其丰富,堪称「炼丹手册」。
  • 速度比 v3 快 10%,精度高 10%。

YOLOv5(Ultralytics):

  • 用 PyTorch 实现(v4 是 Darknet),生态更好。
  • 模型尺寸分 n/s/m/l/x 五个版本,灵活部署。
  • 自动学习率、自动 anchor 计算、W&B 集成……工程化做得极其到位。

我个人更偏爱 v5。为什么?因为开箱即用。v4 的配置项太多,调参能调到头秃。v5 的默认参数就很好,训练一个模型基本不用改什么。

v4 vs v5 怎么选?如果你追求极致精度,愿意花时间调参,选 v4。如果你要快速落地、部署到移动端或边缘设备,选 v5。我在一个安防项目里用 v5s 部署到 Jetson Nano,能做到 30 FPS。

1.5 YOLOv6 / v7 / v8:工业界的持续迭代

2022~2023 年,YOLO 进入了「内卷」阶段。美团、阿里、Ultralytics 各出一版。

版本 发布方 核心创新 我的评价
YOLOv6 美团 RepVGG 重参数化、SimOTA 标签分配 工业部署友好,但生态一般
YOLOv7 Wang 等 E-ELAN 结构、重参数化、辅助头训练 精度很高,但配置复杂
YOLOv8 Ultralytics C2f 模块、Anchor-Free 检测头、Task-Aligned 分配 目前最均衡的选择

v8 是我目前的主力。它去掉了 anchor 机制,改用 anchor-free 检测头。说白了就是每个位置只预测一个框,不再跟 anchor 较劲。训练简单了,部署也简单了。

而且 v8 的生态做得很好:支持分类、检测、分割、姿态估计,一个框架全搞定。我在一个智慧零售项目里,用 v8 同时做商品检测和货架分割,省了不少事。

避坑:v7 虽然精度高,但训练配置非常繁琐。我曾经花了两天时间才把 v7 的训练流程跑通。如果你不是做学术研究,建议直接上 v8。

1.6 演进脉络总览

下面这张图,是我自己整理的 YOLO 演进路线。你可以看到,从 v1 到 v8,核心脉络其实很清晰:

YOLO 演进脉络图(2016-2023) YOLOv1 2016 开山之作 YOLOv2 2017 Anchor + BN YOLOv3 2018 FPN 多尺度 YOLOv4 2020 Trick 集大成 YOLOv5 2020 PyTorch 生态 YOLOv6 2022 RepVGG YOLOv7 2022 E-ELAN YOLOv8 2023 Anchor-Free v6/v7/v8 并行发展 核心演进趋势 ① 骨干网络:从 VGG → ResNet → CSPNet → C2f ② 检测头:从全连接 → Anchor → Anchor-Free ③ 训练技巧:从基础 → Mosaic → 自动超参搜索

1.7 核心创新点对比

最后,我用一个表格把各版本的核心创新点列出来。方便你以后选版本时快速参考。

版本 骨干网络 检测头 损失函数 数据增强 部署友好度
v1 GoogLeNet 变体 全连接回归 Sum-Squared Error 基本 低
v2 Darknet-19 Anchor + 卷积 SSE + 分类交叉熵 多尺度 中
v3 Darknet-53 FPN 多尺度 BCE + MSE 多尺度 中
v4 CSPDarknet-53 PANet + FPN CIoU + BCE Mosaic + MixUp 中
v5 CSPDarknet-53 PANet + FPN CIoU + BCE Mosaic + Auto 高
v6 EfficientRep 解耦头 VariFocal + GIoU Mosaic 高
v7 E-ELAN 重参数化头 CIoU + BCE Mosaic + MixUp 中
v8 C2f Anchor-Free 解耦头 DFL + CIoU Mosaic + Auto 高

嗯,以上就是 YOLO 从 v1 到 v8 的完整演进脉络。你会发现,每个版本都在解决前一个版本的痛点。v1 解决了速度问题,v2 解决了精度问题,v3 解决了小目标问题,v4/v5 解决了工程化问题,v6/v7/v8 则在部署和易用性上持续优化。

选哪个版本?我的建议很简单:

  • 学术研究:v4 或 v7,trick 多,可玩性高。
  • 工业落地:v5 或 v8,生态好,部署快。
  • 边缘设备:v5n 或 v8n,模型小,速度快。