YOLO

You Only Look Once
AI/ML#目标检测#深度学习#计算机视觉
实时目标检测算法,将检测任务转化为回归问题,速度极快。

// 详细解释

YOLO (You Only Look Once)

YOLO(你只看一次) 是由 Joseph Redmon 等人于 2016 年提出的实时目标检测算法。它开创性地将目标检测转化为一个回归问题——一次性预测出所有边界框及其类别,无需传统的两阶段提案 + 分类流程,从而实现了端到端的检测。

YOLO 的核心创新

传统目标检测(如 R-CNN 系列)采用两阶段架构:

  1. Region Proposal:用选择性搜索或 RPN 在图片中提出若干候选区域
  2. Classification:对每个候选区域进行分类 + 边界框回归

这导致:

  • 速度慢:两次处理,每张图片需要 2~5 秒
  • 流程复杂:多个独立步骤难以端到端优化

YOLO 的思路非常直接:

把整张图片划分为 S × S 的网格,每个网格负责预测物体的中心点是否落在其中,同时回归出边界框和类别概率。

整个检测过程只需要一次前向传播——因此得名「You Only Look Once」。

YOLO 是如何工作的?

Step 1:网格划分

以 448 × 448 的输入为例,划分为 7 × 7 的网格(每个网格约 64 × 64 像素)。

code13 lines
┌────┬────┬────┬────┬────┬────┬────┐ │ │ │ │ │ │ │ │ ├────┼────┼────┼────┼────┼────┼────┤ │ │ │ │ ⬤│ │ │ │ ← 物体中心点落在这个网格 ├────┼────┼────┼────┼────┼────┼────┤ │ │ │ │ │ │ │ │ ├────┼────┼────┼────┼────┼────┼────┤ │ │ │ │ │ │ ⬤│ │ ← 另一个物体 ├────┼────┼────┼────┼────┼────┼────┤ │ │ │ │ │ │ │ │ ├────┼────┼────┼────┼────┼────┼────┤ │ │ │ │ │ │ │ │ └────┴────┴────┴────┴────┴────┴────┘

每个网格预测:

  • B 个边界框:(x, y, w, h) 的坐标 + 置信度
  • C 个类别概率:物体是什么类别

Step 2:一次前向传播

整个网络一次前向传播输出一个 S × S × (B × 5 + C) 的张量:

  • 5:每个边界框的 (x, y, w, h, confidence)
  • B:每个网格预测的边界框数量(通常 B=2)
  • C:类别数量(PASCAL VOC = 20,COCO = 80)

Step 3:后处理

  1. 过滤低置信度:丢弃置信度低于阈值的框
  2. NMS (Non-Maximum Suppression):对重叠的框只保留置信度最高的那一个

各版本 YOLO 的演进

版本年份关键改进FPSmAP
YOLOv12016首次提出一阶段检测框架4563.4
YOLOv22017BatchNorm、Anchor Boxes、更高分辨率6776.8
YOLOv32018多尺度检测、Darknet-53、逻辑回归
YOLOv42020大量 Bag-of-Freebies(无代价技巧)、Mosaic 增强6543.5 (COCO)
YOLOv52020PyTorch 重写、模块化、易用性改进140+~37 (n) ~50 (x)
YOLOv62022美团、硬件友好设计、RepVGG 模块
YOLOv72022结构重参数化、辅助头、E-ELAN16151.2
YOLOv82023Ultralytics、统一框架、无 Anchor53.9
YOLOv92024GELAN、PGI、Progressive Learning53.0+
YOLOv102025清华 + ByteDance、End-to-End 检测、去 NMS44853.3+

YOLOv8 的架构

YOLOv8(Ultralytics 出品)是目前最主流的版本,其架构包括:

Backbone(主干网络)

  • CSPDarknet:跨阶段局部网络,减少计算量并保持精度
  • 负责从输入图像中提取多尺度特征

Neck(特征融合)

  • PAN-FPN:Path Aggregation Network + Feature Pyramid Network
  • 融合不同层的特征,让网络既能看到细节也能看到整体

Head(检测头)

  • 基于 Anchor-free 的检测头
  • 分类分支 + 检测分支解耦
  • 输出多尺度的检测结果(通常为 8×, 16×, 32× 下采样)

在 PyTorch 中使用 YOLO

使用 Ultralytics 库可以非常简单地调用 YOLO:

python16 lines
from ultralytics import YOLO # 加载预训练模型(n/s/m/l/x 不同大小) model = YOLO("yolov8n.pt") # 最小最快 model = YOLO("yolov8x.pt") # 最大最准 # 推理 results = model("image.jpg") # 训练自定义数据集 results = model.train( data="coco128.yaml", epochs=100, imgsz=640, batch=16, )

为什么 YOLO 在工业界如此成功?

1. **真正的实时性**

  • 在一张消费级 GPU 上可以达到 100+ FPS
  • 甚至可以在嵌入式设备(Jetson、树莓派 + NPU)上实时运行

2. **精度足够高**

  • 现代 YOLO 版本在 COCO 上达到 ~50 mAP
  • 对于大多数工业应用(自动驾驶、工业质检、安防),精度和速度的平衡点恰到好处

3. **端到端,易部署**

  • 单一模型文件,无需复杂的多步骤后处理
  • 可直接导出 ONNX、TensorRT、CoreML 等格式
  • 社区工具链极其完善

4. **开源生态繁荣**

  • 海量预训练模型
  • 丰富的教程和社区支持
  • 大量基于 YOLO 的变种(用于分割、姿态估计、分类)

YOLO 的常见应用场景

领域应用
自动驾驶车辆、行人、交通标志检测
工业质检产品缺陷检测、计数、定位
安防监控异常行为识别、人流统计
农业作物病害识别、成熟度评估
医疗影像病灶检测(X光、CT)
无人机目标跟踪、避障、落点识别
零售货架商品识别、无人收银

实践技巧

1. 根据场景选择模型大小

型号参数速度 (RTX 3090)mAP (COCO)适用场景
yolov8n3.2M512 FPS37.3实时性优先、边缘设备
yolov8s11.2M286 FPS44.9平衡场景
yolov8m25.9M160 FPS50.2通用
yolov8l43.7M115 FPS52.9精度优先
yolov8x68.2M96 FPS53.9最高精度

2. 数据增强策略

  • Mosaic:把 4 张图片组合在一起,强制模型学习多物体场景
  • MixUp:图片线性混合,提高模型鲁棒性
  • CutMix:剪切拼接,迫使模型关注边缘区域
  • Random Perspective:随机仿射变换,模拟不同视角

3. 模型部署优化

python8 lines
# 导出为 ONNX 格式 model.export(format="onnx") # 导出为 TensorRT(Nvidia GPU 最优) model.export(format="engine") # 导出为 CoreML(iOS/macOS) model.export(format="coreml")

YOLO 的未来方向

  • 实时 + 语义分割统一:YOLO 已经扩展到分割(YOLOv8-seg)
  • 多模态目标检测:结合文本描述的开放词汇检测
  • 轻量化 + 边缘 AI:为嵌入式场景持续优化
  • 视频目标检测:利用时序信息提升检测稳定性
  • 视觉语言模型集成:YOLO + LLM = 视觉推理(如 Grounding DINO)

相关术语:CNNResNetPyTorchDocker

// 关联内容

📰 关联情报
🧰 关联工具
🗺️ 关联路线图

// 关联术语

// 参考资料