YOLO
📅 文档更新时间:2025 年 11 月 2 日
参考资料
-
You Only Look Once: Unified, Real-Time Object Detection (Redmon et al., CVPR 2016)
概述
简介
YOLO(You Only Look Once) 是一类基于深度学习的 实时目标检测 算法
自 2015 年首次提出以来,已经历多次迭代,衍生出多条发展路线,每一次都在 速度‑精度‑易用性 之间实现更好的平衡
- 核心思想
- 在单次前向传递过程中同时完成物体分类和定位
- 将输入图像划分为 $S \times S$ 的网格(grid),每个网格负责预测该区域内的目标
与 R‑CNN 系列的 两阶段 检测不同,YOLO 采用 单阶段回归,不需要进行多次区域生成和分类操作,因此在推理速度上拥有显著优势
网络结构
YOLO 通常 通常包括以下几个主要组成部分:
-
Backbone(骨干网络)
负责 特征提取。从简单的定制卷积网络 Darknet 到引入 ResNet 思想的 Darknet-53,再到优化梯度流的 CSPDarknet53,其趋势是 更深、更高效、信息流动更顺畅
-
Neck(颈部)
负责 多尺度特征融合。主流结构演进如下:
- FPN:引入 自上而下 的路径,将高层语义强的特征与底层位置精确的特征结合,大大改善了小目标检测
- PANet:在 FPN 基础上增加了 自下而上 的路径,进一步加强了位置信息的传递
- (后续演进):出现了如 BiFPN 等结构,通过加权方式更高效地融合不同分辨率的特征
-
Head(头部)
输出层。其 预测范式 发生了根本性变革:
-
Anchor-Based (v2-v7)
基于预定义锚框,让网络学习偏移量。优点是 降低学习难度,训练稳定;缺点是 引入超参数,计算复杂
-
Anchor-Free (v8, v10)
直接预测目标中心点或边界框顶点,使 Pipeline 更简洁,是当前的主流方向
-
损失函数
-
分类损失
衡量 预测类别概率 与 真实标签 的差距(常用 Cross Entropy 或 Focal Loss)
-
坐标损失
衡量预测框与真实框的几何误差(从 MSE 发展到 IoU 系列 (GIoU, DIoU, CIoU))
- MSE:独立优化四个坐标,未考虑相关性,且对尺度敏感
- IoU Loss:直接反映检测效果的度量,但无法处理不相交的情况
- GIoU Loss:解决了不相交时无法优化的问题
- DIoU/CIoU Loss:进一步考虑了中心点距离和宽高比,收敛更快、定位更准
-
置信度损失
衡量预测框中是否真的包含 目标物体(通常也用二元交叉熵损失)
应用领域
- 自动驾驶: 实时监控路况和识别障碍物
- 视频监控: 实时检测和跟踪多个目标
- 机器人: 导航、避障和物体抓取
- 手机应用: 实时摄像头辅助的增强现实应用(AR)
优势和不足
-
优势
- 速度快,适合实时性要求高的应用
- 端到端训练,结构相对简单、易于工程化部署
-
劣势
- 对 小物体 和 密集物体 的检测性能曾是瓶颈(后续版本已大幅改进)
- 定位精度在早期版本中略逊于两阶段方法
迭代时间线以及主要改进点
| 版本 | 发表年份 | 核心贡献者/机构 | 关键创新与特点 |
|---|---|---|---|
| v1 | 2015 | Joseph Redmon, etc. | 开创性工作:将检测定义为单一回归问题。速度快,但定位不准,召回率低。 |
| v2 | 2016 | Joseph Redmon, etc. | 迈向实用:引入 BN、Anchor 机制、多尺度训练。在速度和精度间取得更好平衡。 |
| v3 | 2018 | Joseph Redmon, etc. | 成熟之作:更深的主干网络 Darknet-53(含残差连接)、多尺度预测(类似 FPN)。成为当时最均衡的选择。 |
| v4 | 2020 | Alexey Bochkovskiy, etc. | “工程集大成者”:CSPDarknet53 主干、PANet 颈部、Mosaic 数据增强、CIoU Loss、SAT 自对抗训练等,整合了大量 SOTA 技巧。 |
| v5 | 2020 | Ultralytics | “易用性之王”:基于 PyTorch,提供极其友好的训练/部署流水线。优化了数据增强、超参数等。 |
| v6 | 2022 | 美团 | 工业导向:重新设计的网络(RepVGG 风格 backbone),并推出了 Anchor-Free 的范式。 |
| v7 | 2022 | Chien-Yao Wang, etc. | 效率革新:提出 E-ELAN 架构、复合模型缩放、计划重参数化 等,在不增加推理成本下提升精度。 |
| v8 | 2023 | Ultralytics | 新一代标杆:彻底抛弃 Anchor 机制,转为 Anchor-Free;使用 解耦头(Decoupled Head) 和 C2f 模块。 |
| 发展主线 | 代表版本与关键技术 | 核心目标 |
|---|---|---|
| Backbone 强化 | v3 (Darknet-53), v4 (CSPDarknet53) | 提升特征提取能力 |
| Neck 结构优化 | v3 (FPN-like), v4 (PANet), 后续(BI-FPN) | 优化多尺度特征融合 |
| Loss 函数精细化 | v4 (CIoU) | 提升边框回归精度 |
| 训练策略 & 数据增强 | v4 (Mosaic, SAT), v5 (自适应锚框) | 提升模型鲁棒性与泛化能力 |
| Head & 预测范式革命 | v1-v7 (Anchor-Based) -> v8, v10 (Anchor-Free) | 简化流程,摆脱超参数,更接近本质回归 |
| 工程化与部署便利 | v5, v8, v11 (Ultralytics 框架) | 降低使用门槛,促进落地 |
YOLOv1 (2015)
将目标检测问题转换为一个单次回归问题
相较于之前的 Region Proposal-based 方法(例如 R-CNN 系列),YOLOv1 显著提升了检测速度,能够实现实时处理
- 主要改进点
- 将图片划分成 $S \times S$ 的网格,每个格子预测两个边界框和相应的置信度评分
- 每个格子还预测固定数量的类别概率
- 简化的网络结构,使用 24 层卷积层和 2 层全连接层
YOLOv2 (2016)
在保持速度的同时,显著提升了检测精度
引入了多尺度训练,提高了模型对不同尺度物体的检测能力
- 主要改进点
- 引入了 Batch Normalization,稳定了训练过程并减少了过拟合
- 使用了高分辨率分类器进行微调
- Anchor 机制:引入了 预定义的 Anchor Box 以改善物体定位
- 使用了更快的 Backbone 网络(Darknet-19)
YOLOv3 (2018)
利用 残差连接 和更深的网络,提升了模型的特征提取能力
通过多尺度特征融合,进一步改善了对不同尺度物体的检测效果
- 主要改进点
- 引入了 Darknet-53 作为新的 Backbone,具有更深的网络和残差连接
- 使用了 三尺度预测 结构(类似 FPN),实现了多尺度特征融合
- 分类器改用多个独立的 Logistic 分类器代替 Softmax,解决多标签分类(一个物体属于多个类别)的问题,而非传统的互斥多分类
YOLOv4 (2020)
在模型精度和速度之间找到了更好的权衡点,进一步提升了实时性能
吸收多种前沿技术,是一个“免费大礼包(Bag of Freebies)”和“特殊技巧库(Bag of Specials)”的集大成者
- 主要改进点
- 使用了 CSPDarknet53 作为 Backbone,增强了特征提取能力并减少了计算量
- 引入了 CIoU(Complete IoU)损失函数,改善了边界框回归效果
- 数据增强方法:采用了 Mosaic 和 Self-Adversarial Training (SAT) 等先进的数据增强技术
- 采用了 DropBlock 正则化和 Label Smoothing 等技术提高模型的泛化能力
YOLOv5 (2020)
由 Ultralytics 公司 于 2020 年发布的 PyTorch 实现,以其 极致的易用性和工程化水平 闻名
- 主要改进点
- 工程化优先:提供了完整的训练、验证、导出和部署管道,代码非常友好
- 优化了数据增强策略,如 Mosaic 和 自适应锚框计算
- 使用更高效的优化器和学习率调度器
- 提供了多种预设的模型规模(n, s, m, l, x),满足不同性能和速度的需求
YOLOv6 (2022)
由 美团 团队提出,专注于工业应用的高效检测器
- 主要改进点
- 引入了新的 Anchor-Free 检测机制
- 使用了 RepVGG/CSPBep 风格的 Backbone,兼顾表现与速度
- 设计了更高效的 Rep-PAN Neck 结构
| 对比 | Anchor | Anchor-Free |
|---|---|---|
| 思想 | 预先设定一系列不同大小、比例的候选框(Anchors),让网络去学习修正这些候选框的位置和判断其内是否有物体 | 不依赖预定义 Anchors,直接预测目标中心点或边界框相对于网格点的偏移量 |
| 优点 | 简化了学习难度,训练更稳定 | 简化 pipeline,减少超参数,更适合形状怪异的目标 |
| 不足 | 需要聚类分析数据来确定 Anchor 尺寸,引入了超参数,计算量大 |
YOLOv7 (2022)
由 Chien-Yao Wang 和 Alexey Bochkovskiy 等人发布,在精度和速度上达到了新的 state-of-the-art
- 主要改进点
- 提出了 E-ELAN 架构,通过分组卷积和通道 shuffle 来提升网络的学习能力
- 引入了 计划重参数化(Planned Re-parameterization) 来创建无需额外推理成本的更强大模型
- 采用了 复合模型缩放(Compound Model Scaling) 方法
YOLOv8 (2023)
Ultralytics 公司发布的新一代标杆模型,在设计理念上做了根本性的改变,旨在提供最佳的速度-精度权衡和最友好的用户体验
- 主要改进点
- Anchor-Free 设计:彻底移除了复杂的 Anchor 机制,简化了训练流程并减少了超参数
- 解耦头(Decoupled Head):将分类和边界框回归任务分开,提升了训练效率和最终精度
- 新的骨干网络和 Neck:使用更高效的 C2f 模块 替换了 C3 模块,在保持性能的同时丰富了梯度流
- 先进的标签分配策略:采用 Task-Aligned Assigner,动态选择高质量的正样本
- 损失函数优化:结合使用了 Distribution Focal Loss 和 CIoU Loss
- 开发者友好:提供了从分类、检测、分割到姿态估计的统一框架
标签分配策略
用于决定 哪个预测框负责匹配哪个真实物体 的规则,对性能至关重要
早期使用静态规则,如 IoU 阈值
现代 (如 v8 的 Task-Aligned Assigner) 使用动态策略,同时考虑分类得分和预测框质量(IoU),为每个真值框选择综合分数最高的预测框作为正样本
YOLOv9 (2024 年 2 月)
-
核心创新
- 可编程梯度信息 (PGI):解决深度网络中信息丢失 的关键问题,通过生成可靠的梯度,确保模型能够有效学习并产出准确的预测
- 广义高效层聚合网络 (GELAN):一种高效轻量的网络架构,优化了参数利用率与计算效率
- 高性能表现:其最大变体 YOLOv9-E 在 COCO 数据集上取得了领先的 mAP 分数,树立了高精度的新标准
-
理想应用场景
适用于对 检测精度要求极高 的场合,例如精密机器人、卫星图像分析以及自动驾驶等关键安全系统
YOLOv10 (2024 年 5 月)
- 核心创新
- 在训练中采用 一致性双重分配 策略,无需非极大值抑制 NMS 后处理,简化了部署流程,降低了推理延迟
- 对模型进行了自上而下的全面优化,包括使用 轻量级分类头、空间通道解耦下采样 以及 秩引导块设计,旨在消除计算冗余
YOLOv11 (2024 年 10 月)
作为 Ultralytics 在 2024 年推出的收官之作,同样是集成了目标检测、图像分割、姿态估计等多种任务的统一框架
YOLOv8.3.133 (2025 年 5 月)
这个版本是 YOLOv8 分支的一个重要的 工程化维护更新,着重于提升开发体验和部署稳定性
- 关键改进点
- 更严格的数据集校验:当数据集中没有发现有效图片或标注时,会 直接抛出错误并停止训练,有效避免了在无效数据上浪费时间与算力
- NVIDIA Jetson 设备支持强化:通过了官方的持续集成测试,显著提升在边缘设备上的兼容性与运行稳定性
- 模型导出与训练优化:为 Intel CPU 用户增加了 OpenVINO 导出建议提示
实际应用
迁移训练
官方给出的 YOLO 模型(如 YOLOv8)默认使用 COCO 数据集预训练,能识别 80 种物体
要识别其他物体,我们需要进行迁移学习(Transfer Learning)或自定义训练
基本流程如下:
1、准备数据集:收集包含目标物体的图片
2、数据标注:使用工具(如 LabelImg, CVAT, Roboflow)对图片中的物体进行框选标注,生成标准的格式(如 YOLO 格式的 .txt 文件)
3、组织数据结构:按照要求划分训练集、验证集和测试集(images 和 labels 文件夹)
4、配置模型:选择一个预训练的权重文件(如 yolov8n.pt)并根据需求修改配置文件(如指定类别数)
5、执行训练:使用官方提供的训练脚本启动训练过程
6、获得模型:训练完成后会生成新的模型权重文件(如 best.pt),其中包含了针对你的任务学到的参数
如何选择合适的 YOLO 版本?
| 考量维度 | 推荐选择 | 理由 |
|---|---|---|
| 快速上手/教学 | YOLOv8 | 文档最完善,API 最统一,社区活跃。 |
| 工业部署/平衡 | YOLOv5 / YOLOv8 | 历经考验,生态成熟,资源和精度平衡性好。 |
| 移动端/边缘设备 | YOLOv8n, YOLOv5n | 参数量少,计算量小,延迟低。 |
| 追求极致精度、研究与追踪 | 关注最新论文和官方库 | 吸收了更多前沿的架构和训练技巧,算法领域迭代飞快,SOTA 不断被刷新。 |
- 关于 “落地首选 v5/v8” 的原因
- 生态与易用性:完善的文档、清晰的 API、丰富的教程
- 经过实践检验:v5/v8 经过大量公司和项目的实战考验,稳定性和可靠性有保障
- 性价比:对于大多数业务场景,v5/v8 系列提供的精度已经足够,而它们的速度和资源消耗更为友好