1. YOLO系列发展史

大家好,欢迎来到这门课。我是你们的老朋友,一个在计算机视觉和模型部署领域摸爬滚打了好几年的工程师。

今天咱们聊点什么呢?聊聊YOLO。这个在目标检测领域如雷贯耳的名字。说实话,我第一次接触YOLO的时候,还是v1版本刚出来那会儿。那时候我还在做传统的目标检测,用滑动窗口加HOG特征,跑一次要等半天。YOLO的出现,就像在黑暗里点了一盏灯。

咱们这一章,不急着写代码,先把来龙去脉搞清楚。你想想看,如果你连一个模型从哪来、到哪去、为什么这么设计都不清楚,后面调参、部署的时候,很容易踩坑。

1.1 目标检测的核心思想:到底在检测什么?

在聊YOLO之前,咱们得先统一一下认知:目标检测到底要解决什么问题?

说白了,就两件事:“是什么” 和 “在哪里”。

  • 分类:判断图片里有没有猫、狗、车、人。
  • 定位:用个框把这些东西框出来,给出坐标。

传统的做法,比如R-CNN系列,是“先提候选区域,再对每个区域做分类”。这就像你在一堆杂物里先圈出几个可疑的箱子,再一个个打开看里面是什么。精度不错,但速度慢,因为要跑很多次分类网络。

YOLO的思路完全不同。它把检测当作一个回归问题。一张图进去,直接输出边界框的坐标和类别概率。一步到位,不需要“先提候选再分类”这种两阶段流程。

核心思想总结:

  • 将输入图像划分为 S×S 的网格。
  • 每个网格负责预测中心点落在该网格内的物体。
  • 每个网格预测 B 个边界框和 C 个类别概率。

嗯,这里要注意,YOLO对“小物体”和“密集物体”的检测效果,早期版本确实不如两阶段方法。我在做交通场景检测时,就遇到过远处行人漏检的问题。这个咱们后面讲v5改进的时候会细说。

1.2 YOLO系列演进:从v1到v5,每一步都是血泪史

YOLO的发展史,其实就是一部“在速度和精度之间反复横跳”的历史。我把它整理成了一个表格,方便你对比。

版本 发布时间 核心贡献 我的个人感受
YOLOv1 2016 开创性提出“端到端”检测,速度极快 惊艳,但定位不准,小物体基本没戏
YOLOv2 2017 引入Anchor Box、Batch Normalization、高分辨率分类器 精度提升明显,我开始在项目里尝试使用
YOLOv3 2018 多尺度预测、Darknet-53骨干网络、逻辑回归分类 真正意义上的“工业级”检测器,我用了很久
YOLOv4 2020 Bag of Freebies、Mish激活函数、CSPNet、PANet 集大成者,训练技巧的宝库
YOLOv5 2020 PyTorch实现、模型轻量化、部署友好、Ultralytics维护 目前我最常用的版本,没有之一

咱们挑几个关键节点聊聊。

YOLOv1:开天辟地,但问题不少

v1把检测问题简化到了极致。一张图分成7x7的网格,每个网格预测2个框。我当时跑了一下,速度确实快,在Titan X上能跑到45 FPS。但问题也很明显:每个网格只能预测一个类别,如果两个物体中心落在同一个网格里,那就只能识别一个。另外,边界框的定位精度很差,尤其是对于长宽比不规则的物体。

YOLOv2:更准、更快、更强

v2引入了Anchor Box,这是个里程碑式的改进。它不再直接预测坐标,而是预测相对于预设锚框的偏移量。这大大降低了学习难度。我记得当时用v2做车牌检测,效果比v1好了不止一个档次。另外,v2还用了Batch Normalization,训练收敛速度快了很多。

YOLOv3:多尺度预测,小物体有救了

v3是我个人非常喜欢的一个版本。它引入了FPN(特征金字塔网络)的思想,在三个不同尺度的特征图上做预测。这样一来,大特征图负责检测小物体,小特征图负责检测大物体。我曾经在一个项目中用v3检测无人机航拍图像中的车辆,效果出奇的好。

YOLOv4:集大成者,但训练复杂

v4更像是一个“技巧大杂烩”。它把当时所有能用的trick都用上了:Mish激活函数、CSPNet、PANet、CIoU损失函数等等。精度确实达到了当时的SOTA,但训练起来也相当复杂。我个人觉得,v4更适合做学术研究,不太适合快速落地。

YOLOv5:部署者的福音

终于说到v5了。为什么我这么推崇v5?因为它太懂我们这些做部署的人了。

  • PyTorch原生:不用再折腾Darknet框架,生态好,调试方便。
  • 模型轻量化:提供了n/s/m/l/x五个版本,从手机到服务器都能跑。
  • 导出方便:支持导出ONNX、TensorRT、CoreML、OpenVINO等格式,一键部署。
  • 工程化完善:数据增强、自动锚框计算、W&B可视化,开箱即用。

避坑指南:

我曾经在部署YOLOv4到嵌入式设备时,因为框架兼容性问题折腾了整整一周。后来换成YOLOv5,用官方的导出脚本,半小时就搞定了。所以,如果你不是做算法研究的,而是做工程落地的,YOLOv5是首选。

1.3 YOLOv5的优势与适用场景

咱们来总结一下,YOLOv5到底强在哪,以及它适合干什么。

核心优势

  1. 速度与精度的平衡:YOLOv5s在COCO数据集上mAP能达到37%左右,在V100上推理速度超过140 FPS。这个性价比,很难找到对手。
  2. 模型家族丰富:从YOLOv5n(nano)到YOLOv5x,参数量从1.9M到86.7M,你可以根据硬件资源自由选择。
  3. 部署生态完善:官方提供了完善的导出和推理脚本,支持TensorRT、ONNX Runtime、OpenVINO等主流推理引擎。
  4. 社区活跃:Ultralytics维护得非常勤快,Issue回复快,文档齐全。遇到问题,基本都能在GitHub上找到答案。

适用场景

场景 推荐模型 说明
手机/嵌入式设备 YOLOv5n / YOLOv5s 模型小,速度快,适合实时检测
边缘计算盒子 YOLOv5m / YOLOv5l 平衡精度和速度,适合安防、工业质检
服务器/云端 YOLOv5x 追求极致精度,适合对延迟不敏感的场景
自动驾驶 YOLOv5l / YOLOv5x 需要高精度,且对多尺度目标有要求

注意事项:

YOLOv5虽然强大,但也不是万能的。如果你要检测的目标极度密集(比如细胞计数),或者对旋转角度有要求(比如文本检测),YOLOv5可能不是最佳选择。这时候可以考虑YOLOv5的变体,或者干脆换用其他算法。

1.4 YOLO系列发展脉络图

为了让你更直观地理解YOLO的发展脉络,我画了一张图。你可以看到,从v1到v5,每个版本都在解决前一个版本的痛点。

YOLO系列发展脉络图 YOLO系列发展脉络图 YOLOv1 2016 YOLOv2 2017 YOLOv3 2018 YOLOv4 2020 YOLOv5 2020 各版本关键改进 • YOLOv1:端到端检测,S×S网格,开创性工作 • YOLOv2:Anchor Box + BN + 高分辨率分类器,精度提升 • YOLOv3:多尺度预测 + Darknet-53,小物体检测突破 • YOLOv4:CSPNet + PANet + 各种trick,精度SOTA • YOLOv5:PyTorch实现 + 轻量化 + 部署友好,工程首选 核心演进方向:速度 → 精度 → 多尺度 → 工程化 最终目标:让目标检测在真实场景中“跑得快、测得准、落得稳”

从这张图里,你可以清晰地看到YOLO的演进脉络。每一次迭代,都不是凭空产生的,而是为了解决实际应用中的痛点。这也是我为什么一直强调,学算法不能光学公式,要理解它背后的“为什么”。