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三大改进:

  1. 多尺度检测:在3个不同尺度的特征图上做预测,小目标检测能力大幅提升
  2. Darknet-53:借鉴ResNet的残差结构,53层卷积,性能更强
  3. 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)分两步走:

  1. 第一步:用RPN生成候选区域(Region Proposal)
  2. 第二步:对候选区域进行分类和回归

Yolo的做法就粗暴多了:

  1. 把图片分成网格
  2. 每个网格直接预测边界框和类别
  3. 一次前向传播,搞定所有

你想想看,两阶段检测器就像"先圈出可疑区域,再仔细检查",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的部署环境,从模型导出到边缘设备上跑起来,咱们一步步来。有什么问题,欢迎在课程群里交流。