1. YOLO发展史:从v1到v8的演进脉络
YOLO系列,说白了就是目标检测领域的「速度之王」。我从v1开始一路跟到v8,看着它从一个有点「糙」的实时检测器,进化成今天工业界最常用的模型家族。今天咱们就捋一捋这条演进路线,看看每个版本到底改了啥、为啥改。
1.1 YOLOv1:开天辟地,把检测做成回归
2016年,Joseph Redmon那篇 You Only Look Once 出来的时候,我还在用Faster R-CNN做项目。说实话,第一次看到YOLOv1的,我第一反应是「这也太粗暴了吧?」——它把整张图分成S×S的网格,每个网格预测B个边界框和类别概率,一次前向就把检测做完了。
核心创新点:
- 端到端单阶段检测:不再需要Region Proposal,直接回归出边界框坐标和类别概率
- 全局推理:训练时能看到整张图的上下文,不像滑动窗口那样只看局部
- 速度碾压:在Titan X上跑到45 FPS,Fast YOLO甚至能到155 FPS
主要缺陷:
- 每个网格只能预测2个框,对密集目标束手无策
- 定位误差大,尤其小目标
- 对不规则形状的目标(长条形)检测效果差
1.2 YOLOv2(YOLO9000):更好、更快、更强
2017年,Redmon又放了个大招。我记得当时在实验室看到YOLO9000的标题,心想「9000类?吹牛吧?」结果人家真用WordTree把检测和分类数据集联合训练,实现了9000类的检测能力。
核心创新点:
- Batch Normalization:去掉Dropout,收敛更快,mAP提升2%
- 高分辨率分类器:先用224×224预训练,再在448×448上微调分类网络,最后用448×448做检测
- Anchor Boxes:用K-Means聚类出5种先验框,不再直接预测坐标,而是预测偏移量
- Darknet-19:19层卷积+5个MaxPooling,比VGG-16快得多
- WordTree + YOLO9000:联合训练检测和分类数据,能检测9000类
| 版本 | Backbone | Anchor | 输入尺寸 | mAP (VOC 2007) | FPS (Titan X) |
|---|---|---|---|---|---|
| YOLOv1 | 自定义GoogLeNet风格 | 无 | 448×448 | 63.4 | 45 |
| YOLOv2 | Darknet-19 | 5个K-Means聚类 | 416×416 | 76.8 | 67 |
1.3 YOLOv3:多尺度检测的里程碑
2018年,YOLOv3来了。说实话,这是我最喜欢的一个版本。它把多尺度检测做到了极致,而且代码写得特别干净。我至今还在一些边缘设备上用v3的tiny版本。
核心创新点:
- Darknet-53:53层卷积,用了残差连接,比ResNet-152更快、更准
- FPN(特征金字塔):在3个不同尺度上做检测,分别对应大、中、小目标
- 9个Anchor:每个尺度3个,总共9个先验框
- 多标签分类:用Sigmoid代替Softmax,一个目标可以属于多个类别
- Logistic回归:对每个Anchor做目标性评分
为什么会用FPN?你想想看,浅层特征图分辨率高、感受野小,适合检测小目标;深层特征图分辨率低、感受野大,适合检测大目标。YOLOv3把两者结合起来,小目标检测能力直接上了一个台阶。
1.4 YOLOv4:集大成者
2020年,Alexey Bochkovskiy(就是那个维护Darknet的大神)发布了YOLOv4。我记得当时看到的消融实验表,密密麻麻几十个trick的对比,简直像一本「目标检测trick百科全书」。
核心创新点:
- Backbone:CSPDarknet53:引入Cross Stage Partial结构,减少计算量、增强梯度传播
- Neck:SPP + PANet:SPP增加感受野,PANet加强特征融合
- Head:YOLOv3 Head:沿用v3的检测头,但做了改进
- Bag of Freebies:Mosaic数据增强、CutMix、Label Smoothing、CIoU Loss等
- Bag of Specials:Mish激活函数、SAM模块、DIoU NMS等
| 组件 | YOLOv3 | YOLOv4 | 提升点 |
|---|---|---|---|
| Backbone | Darknet-53 | CSPDarknet-53 | 计算量减少20%,精度提升 |
| Neck | FPN | SPP + PANet | 多尺度融合更强 |
| 激活函数 | Leaky ReLU | Mish | 梯度更平滑 |
| 损失函数 | MSE + BCE | CIoU + BCE | 定位更准 |
| 数据增强 | 基本增强 | Mosaic + CutMix | 小目标检测提升明显 |
1.5 YOLOv5:PyTorch生态的王者
2020年6月,Ultralytics发布了YOLOv5。虽然名字叫v5,但它其实是在v4的基础上用PyTorch重写的。很多人争论它能不能叫「v5」,但说实话,它在工程化上做得太好了——训练、部署、导出一条龙,社区生态无敌。
核心创新点:
- PyTorch原生:不再依赖Darknet,训练和部署更方便
- 模型缩放:n/s/m/l/x五个版本,深度和宽度可调
- AutoAnchor:训练前自动聚类Anchor
- Focus层:将4×4的像素切片成4个2×2,减少计算量
- 更好的训练策略:Warmup、Cosine LR Scheduler、EMA等
1.6 YOLOv6 & YOLOv7:工业界的双响炮
2022年,美团发布了YOLOv6,主打工业部署。紧接着YOLOv7也来了,在精度和速度上又刷了一波记录。
YOLOv6核心创新:
- EfficientRep Backbone:重参数化结构,训练时用多分支,推理时合并成单路
- SimOTA标签分配:动态匹配正负样本
- SIoU Loss:考虑角度、距离、形状的损失函数
- 量化感知训练:对INT8部署友好
YOLOv7核心创新:
- E-ELAN:扩展高效层聚合网络,控制梯度路径
- Model Scaling:同时缩放深度、宽度、分辨率
- 重参数化卷积:训练和推理结构解耦
- 辅助头训练:用浅层特征辅助深层头训练
1.7 YOLOv8:集大成的新标杆
2023年,Ultralytics又推出了YOLOv8。说实话,第一次看到v8的架构图,我心想「这不就是v5的升级版吗?」但用下来发现,细节优化确实多。
核心创新点:
- C2f模块:CSP + ELAN的融合,梯度更丰富
- 解耦头:分类和回归分支分开,收敛更快
- TaskAlignedAssigner:根据分类和回归的联合分数分配标签
- DFL Loss:分布聚焦损失,让边界框预测更准
- 多任务支持:检测、分割、姿态估计、分类全在一个框架里
1.8 演进脉络总览
下面这张SVG图,把YOLO从v1到v8的核心演进路线画出来了。你可以看到,每个版本都在解决前一个版本的痛点。
1.9 各版本核心创新点对比表
| 版本 | 年份 | Backbone | 核心创新 | 主要贡献 |
|---|---|---|---|---|
| v1 | 2016 | 自定义 | 端到端回归检测 | 开创单阶段实时检测 |
| v2 | 2017 | Darknet-19 | Anchor + BN + 高分辨率 | 检测精度和速度双提升 |
| v3 | 2018 | Darknet-53 | FPN + 多标签分类 | 小目标检测突破 |
| v4 | 2020 | CSPDarknet-53 | SPP + PANet + 大量trick | 精度和速度的平衡标杆 |
| v5 | 2020 | CSPDarknet | PyTorch + 模型缩放 | 工程化生态王者 |
| v6 | 2022 | EfficientRep | 重参数化 + SimOTA | 工业部署优化 |
| v7 | 2022 | E-ELAN | 辅助头 + 重参数化 | 速度精度双刷榜 |
| v8 | 2023 | C2f | 解耦头 + DFL + 多任务 | 统一框架新标杆 |