Yolo模型简介:从v1到v8的演进之路
做嵌入式AI部署这些年,我接触最多的目标检测模型就是Yolo。说实话,Yolo这个系列就像个老朋友,看着它从v1一路走到v8,每个版本都有故事。今天我就跟你聊聊Yolo的发展史、核心思想,以及它凭什么能在边缘计算设备上这么吃香。
Yolo系列发展史:从v1到v8
Yolo的故事要从2016年说起。那时候目标检测还是Faster R-CNN的天下,但速度嘛...你想想看,在嵌入式设备上跑Faster R-CNN,帧率基本就是个位数。我当时在做一个智能相机的项目,用Faster R-CNN跑一次检测要200多毫秒,客户直接说"这玩意儿能用?"
Yolo v1:开山之作
2016年,Joseph Redmon提出了Yolo v1。核心思想就一句话:把检测当成回归问题来做。一张图分成S×S的网格,每个网格预测B个边界框和类别概率。
Yolo v1的核心参数:
- 输入尺寸:448×448
- 网格划分:7×7
- 每个网格预测:2个边界框
- 检测类别:20类(PASCAL VOC)
- 速度:45 FPS(Titan X)
我记得第一次跑Yolo v1时,那个速度真的惊艳到我了。45 FPS,比当时的Faster R-CNN快了将近10倍。但缺点也很明显——小目标检测能力差,两个物体挨得近就容易漏检。
Yolo v2:更好,更快,更强
2017年,Yolo v2来了。这次改进很大,我挑几个关键点说说:
- Batch Normalization:训练更稳定,收敛更快
- Anchor Boxes:用K-means聚类出先验框,定位更准
- Darknet-19:新的骨干网络,19个卷积层
- 多尺度训练:每10个batch随机换一次输入尺寸
嗯,这里要注意,Yolo v2引入了Anchor Boxes,这是个里程碑式的改进。我在做嵌入式部署时,v2的模型大小只有50MB左右,在Jetson TX2上能跑到30 FPS,相当实用。
Yolo v3:真正的里程碑
2018年的Yolo v3,我个人认为是Yolo系列最经典的一个版本。为什么这么说?
Yolo v3三大改进:
- 多尺度检测:在3个不同尺度的特征图上做预测,小目标检测能力大幅提升
- Darknet-53:借鉴ResNet的残差结构,53层卷积,性能更强
- Logistic回归:用sigmoid替代softmax做类别预测,支持多标签
我曾经在一个工业质检项目里用Yolo v3检测PCB板上的微小缺陷。说实话,v3的多尺度检测帮了大忙,0.5mm的焊点缺陷都能准确检出。当时客户问"这模型怎么这么准",我笑着说"因为它看了三个不同大小的你"。
Yolo v4 & v5:工程化的胜利
2020年,Yolo v4和v5几乎同时出现。v4是Alexey Bochkovskiy在Darknet上改进的,v5是Ultralytics用PyTorch实现的。这两个版本在工程化上做得特别好:
| 特性 | Yolo v4 | Yolo v5 |
|---|---|---|
| 骨干网络 | CSPDarknet-53 | CSPDarknet |
| Neck | SPP + PANet | SPPF + PANet |
| 训练技巧 | Mish激活、CutMix、Mosaic | AutoAnchor、超参数进化 |
| 部署友好度 | 中等 | 极高(PyTorch导出方便) |
我个人更偏爱Yolo v5,原因很简单——PyTorch生态太香了。转ONNX、转TensorRT,一条龙服务。我在RK3588上部署Yolo v5s,INT8量化后只有4MB,跑起来60 FPS稳稳的。
Yolo v6 & v7 & v8:百花齐放
2022到2023年,Yolo家族进入了爆发期:
- Yolo v6(美团):面向工业场景,强调部署效率
- Yolo v7:提出E-ELAN和Model Scaling,精度速度双提升
- Yolo v8(Ultralytics):目前最火的版本,支持检测、分割、姿态估计
避坑指南:我曾经在选型时纠结过v7还是v8。后来发现,如果你的项目需要同时做检测和分割,直接上v8。如果只做检测且对延迟要求极高,v7的tiny版本可能更合适。别盲目追新,适合的才是最好的。
Yolo的核心思想:单阶段检测
Yolo为什么快?说白了就一句话:一步到位。
传统的两阶段检测器(比如Faster R-CNN)分两步走:
- 第一步:用RPN生成候选区域(Region Proposal)
- 第二步:对候选区域进行分类和回归
Yolo的做法就粗暴多了:
- 把图片分成网格
- 每个网格直接预测边界框和类别
- 一次前向传播,搞定所有
你想想看,两阶段检测器就像"先圈出可疑区域,再仔细检查",Yolo则是"扫一眼全图,直接说哪里有东西"。速度差距自然就出来了。
Yolo检测流程(简化版):
输入图片 → 特征提取 → 网格划分 → 每个网格预测:
- 边界框 (x, y, w, h)
- 置信度 (objectness)
- 类别概率 (class probabilities)
→ NMS去重 → 输出检测结果
我在部署时经常跟团队说:Yolo的网格设计天然适合并行计算。每个网格的预测是独立的,GPU可以同时处理所有网格。这也是为什么Yolo在边缘设备上能跑得这么溜。
Yolo与其他检测模型的对比
做嵌入式部署,选模型就像选工具。我整理了个对比表,你看看:
| 模型 | 类型 | 速度 | 精度 | 小目标 | 部署难度 |
|---|---|---|---|---|---|
| Yolo v8 | 单阶段 | ★★★★★ | ★★★★ | ★★★ | ★(简单) |
| Faster R-CNN | 两阶段 | ★★ | ★★★★★ | ★★★★★ | ★★★★(复杂) |
| SSD | 单阶段 | ★★★★ | ★★★ | ★★ | ★★(较简单) |
| RetinaNet | 单阶段 | ★★★ | ★★★★ | ★★★ | ★★★(中等) |
说说我的实际感受:
- Faster R-CNN:精度确实高,小目标检测也强。但速度嘛...我在Jetson Nano上试过,跑一次要500ms,做实时检测基本没戏。
- SSD:速度不错,但精度比Yolo差一截。特别是小目标,SSD的底层特征图分辨率不够,容易漏检。
- RetinaNet:用Focal Loss解决了正负样本不平衡问题,精度接近两阶段。但模型体积大,边缘设备上跑起来有点吃力。
- Yolo系列:速度精度平衡得最好。特别是v8,在边缘设备上做INT8量化后,精度损失控制在1-2%以内,速度却能翻倍。
我的选型建议:
如果你做的是边缘计算设备部署,优先考虑Yolo v5或v8。v5的生态最成熟,各种部署工具链都支持。v8功能更全,但有些边缘设备上的算子优化还不够完善。选型时先确认你的目标平台对哪个版本支持更好。
好了,Yolo的简介就聊到这儿。下一章我会带你手把手搭建Yolo的部署环境,从模型导出到边缘设备上跑起来,咱们一步步来。有什么问题,欢迎在课程群里交流。