1. YOLO前世今生:目标检测发展史与核心思想

大家好,我是你们这门课的主讲。今天咱们聊聊YOLO——这个在嵌入式视觉圈里几乎无人不知的名字。

说实话,我第一次接触YOLO是在2016年。那时候我还在做传统的目标检测,用HOG+SVM跑行人检测,一帧图像要处理几百毫秒。后来看到YOLOv1的,第一反应是:这玩意儿靠谱吗?结果一跑,嗯,真香。

1.1 目标检测的“史前时代”

在YOLO出现之前,目标检测走过了两条技术路线。我简单梳理一下,你心里就有谱了。

阶段 代表方法 核心思路 我遇到的坑
传统方法 HOG+SVM、DPM 手工特征 + 滑动窗口 速度慢,泛化差
两阶段检测 R-CNN、Fast R-CNN、Faster R-CNN 先提候选框,再分类回归 精度高,但实时性不够
单阶段检测 YOLO、SSD 一步到位,直接回归 速度起飞,精度后来追上

传统方法我就不多说了,现在基本没人用了。两阶段检测里,Faster R-CNN在2015年是个里程碑——它用RPN网络替代了Selective Search,真正实现了端到端训练。但问题也很明显:在GPU上跑也就5-10 FPS,放到嵌入式设备上?想都别想。

关键转折点:2016年,Joseph Redmon提出了YOLOv1。它的口号是“You Only Look Once”——只看一次,就能知道图像里有什么、在哪里。这个思路彻底改变了目标检测的游戏规则。

1.2 YOLO核心思想:为什么“只看一次”就够了?

YOLO的核心思想,说白了就是把目标检测当成一个回归问题来处理。

你想想看,传统方法是怎么做的?先提取候选区域,再对每个区域做分类。这就像你找东西,先圈出几个可能的位置,再一个个仔细看。YOLO呢?它直接把整张图喂进网络,一次前向传播,同时输出所有目标的类别和位置。

具体来说,YOLO做了三件事:

  1. 划分网格:把输入图像分成S×S的网格。每个网格负责检测中心点落在它里面的目标。
  2. 预测张量:每个网格输出B个边界框(每个框包含x, y, w, h, confidence)和C个类别概率。
  3. 非极大抑制:用NMS去掉重复的检测框,保留最靠谱的那个。

我在做嵌入式移植时,最深的体会是:YOLO的“单次推理”特性太适合硬件加速了。你不需要复杂的后处理流水线,一个模型推理完,直接拿结果就行。

我的经验:YOLO的网格大小直接影响检测精度和速度的平衡。在嵌入式设备上,我通常把S设为7或13,B设为2。再大,算力就扛不住了。

1.3 YOLOv1到YOLOv8:八年进化史

从2016到2024,YOLO家族经历了八代更迭。我挑几个关键版本说说,你感受一下这个演进脉络。

YOLO演进时间线 v1 2016 开山之作 v2 2017 Anchor Box v3 2018 多尺度 v4 2020 CSPNet v5 2020 工程巅峰 v8 2023 全能框架 关键演进节点 • v1: 开创性提出单阶段检测,45 FPS • v2: 引入Anchor Box,解决多目标重叠问题 • v3: 多尺度预测 + Darknet53,小目标检测提升 • v4: CSPNet + PANet,精度速度双提升 • v5: 工程化最成功,PyTorch生态,部署友好 • v8: 支持分类/检测/分割/姿态,统一框架

我重点说说几个版本的实际体验:

  • YOLOv1:45 FPS,但定位不准,小目标基本漏检。我在一个交通标志项目里试过,路牌稍微远一点就检测不到。
  • YOLOv3:这是我最喜欢的版本之一。多尺度预测让小目标检测好了很多。我在安防项目里用v3跑人车检测,效果比v1强了不止一个档次。
  • YOLOv5:工程化做得最好。PyTorch生态,导出ONNX、TensorRT都很方便。我现在做嵌入式部署,首选就是v5。
  • YOLOv8:2023年Ultralytics推出的全能框架。支持检测、分割、姿态估计、分类。但说实话,在嵌入式设备上,我目前还是用v5更多——v8的模型太大了。

避坑指南:我曾经在一个项目中直接拿YOLOv8替换v5,结果在Jetson Nano上推理速度从30 FPS掉到了12 FPS。后来发现v8的模型参数量是v5的2倍多。所以选版本一定要看你的硬件平台。

1.4 为什么YOLO适合嵌入式实时检测?

这个问题我经常被问到。其实原因很简单:

  1. 单次推理:不需要候选框提取、特征重计算等复杂流水线,一次前向传播搞定所有。
  2. 端到端训练:损失函数直接优化检测精度,不需要分阶段训练。
  3. 模型轻量化:YOLO的骨干网络(如CSPDarknet)设计时就考虑了计算效率。
  4. 硬件友好:卷积操作占主导,非常适合GPU/NPU加速。

我在RK3588上部署YOLOv5s,用NPU推理可以达到60 FPS以上。这个性能在安防、工业检测、自动驾驶等场景里完全够用。

我的建议:如果你是第一次在嵌入式设备上跑YOLO,先从YOLOv5s或YOLOv5n开始。这两个模型在精度和速度之间取得了很好的平衡。等跑通了,再尝试v8或者自己魔改。

1.5 本章小结

好了,这一章我们聊了YOLO的前世今生。从传统方法到两阶段检测,再到YOLO的“只看一次”思想,最后到v1到v8的演进脉络。你心里应该有个大致的框架了。