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到底强在哪,以及它适合干什么。
核心优势
- 速度与精度的平衡:YOLOv5s在COCO数据集上mAP能达到37%左右,在V100上推理速度超过140 FPS。这个性价比,很难找到对手。
- 模型家族丰富:从YOLOv5n(nano)到YOLOv5x,参数量从1.9M到86.7M,你可以根据硬件资源自由选择。
- 部署生态完善:官方提供了完善的导出和推理脚本,支持TensorRT、ONNX Runtime、OpenVINO等主流推理引擎。
- 社区活跃:Ultralytics维护得非常勤快,Issue回复快,文档齐全。遇到问题,基本都能在GitHub上找到答案。
适用场景
| 场景 | 推荐模型 | 说明 |
|---|---|---|
| 手机/嵌入式设备 | YOLOv5n / YOLOv5s | 模型小,速度快,适合实时检测 |
| 边缘计算盒子 | YOLOv5m / YOLOv5l | 平衡精度和速度,适合安防、工业质检 |
| 服务器/云端 | YOLOv5x | 追求极致精度,适合对延迟不敏感的场景 |
| 自动驾驶 | YOLOv5l / YOLOv5x | 需要高精度,且对多尺度目标有要求 |
注意事项:
YOLOv5虽然强大,但也不是万能的。如果你要检测的目标极度密集(比如细胞计数),或者对旋转角度有要求(比如文本检测),YOLOv5可能不是最佳选择。这时候可以考虑YOLOv5的变体,或者干脆换用其他算法。
1.4 YOLO系列发展脉络图
为了让你更直观地理解YOLO的发展脉络,我画了一张图。你可以看到,从v1到v5,每个版本都在解决前一个版本的痛点。
从这张图里,你可以清晰地看到YOLO的演进脉络。每一次迭代,都不是凭空产生的,而是为了解决实际应用中的痛点。这也是我为什么一直强调,学算法不能光学公式,要理解它背后的“为什么”。