YOLOv10:实时端到端目标检测#
YOLOv10 于 2024 年 5 月发布,由清华大学的研究人员基于 Ultralytics Python 软件包构建,引入了一种全新的实时目标检测方法,解决了以往 YOLO 版本在后处理和模型架构方面存在的不足。通过移除非极大值抑制(NMS)并优化各种模型组件,YOLOv10 在发布时以显著降低的计算开销实现了出色的性能。其无 NMS 端到端设计开创了一种方法,并在YOLO26中得到进一步发展。

Watch: How to Train YOLOv10 on SKU-110k Dataset using Ultralytics | Retail Dataset
概述#
实时目标检测旨在以低延迟准确预测图像中的目标类别和位置。YOLO 系列凭借性能与效率之间的平衡,一直处于该研究领域的前沿。然而,对 NMS 的依赖以及架构效率低下限制了性能的进一步提升。YOLOv10 通过为无 NMS 训练引入一致性双重分配,以及采用以效率和准确率为导向的整体模型设计策略,解决了这些问题。
架构#
YOLOv10 的架构在继承以往 YOLO 模型优势的同时,还引入了多项关键创新。模型架构由以下组件组成:
- 骨干网络:骨干网络负责特征提取,YOLOv10 使用增强版 CSPNet(跨阶段部分网络)来改善梯度流并减少计算冗余。
- 颈部网络:颈部网络用于聚合不同尺度的特征,并将其传递给检测头。其中包括 PAN(路径聚合网络)层,可实现有效的多尺度特征融合。
- 一对多检测头:在训练期间为每个目标生成多个预测,以提供丰富的监督信号并提高学习准确率。
- 一对一检测头:在推理期间为每个目标生成单个最佳预测,从而无需使用 NMS,降低延迟并提高效率。
主要特性#
- 无 NMS 训练:利用一致性双重分配来消除对 NMS 的需求,降低推理延迟。
- 整体模型设计:从效率和准确率两个角度对各个组件进行全面优化,包括轻量级分类头、空间与通道解耦下采样以及秩引导的块设计。
- 增强的模型能力:引入大卷积核卷积和部分自注意力模块,在不显著增加计算成本的情况下提升性能。
模型变体#
YOLOv10 提供多种模型规模,以满足不同的应用需求:
- YOLOv10n:Nano 版本,适用于资源极其受限的环境。
- YOLOv10s:Small 版本,在速度和准确率之间取得平衡。
- YOLOv10m:Medium 版本,适用于通用场景。
- YOLOv10b:平衡版本,增加了网络宽度以获得更高准确率。
- YOLOv10l:Large 版本,以增加计算资源为代价获得更高准确率。
- YOLOv10x:Extra-large 版本,提供最高的准确率和性能。
性能#
YOLOv10 在准确率和效率方面均优于以往的 YOLO 版本及其他最先进模型。例如,在 COCO 数据集上,YOLOv10s 的速度是 RT-DETR-R18 的 1.8 倍,同时 AP 相近;YOLOv10b 在性能相同的情况下,比 YOLOv9-C 的延迟低 46%,参数量少 25%。
延迟使用 TensorRT FP16 在 T4 GPU 上测得。
| 模型 | 输入尺寸 | APval | FLOPs (G) | 延迟 (ms) |
|---|---|---|---|---|
| [YOLOv10n][1] | 640 | 38.5 | 6.7 | 1.84 |
| [YOLOv10s][2] | 640 | 46.3 | 21.6 | 2.49 |
| [YOLOv10m][3] | 640 | 51.1 | 59.1 | 4.74 |
| [YOLOv10b][4] | 640 | 52.5 | 92.0 | 5.74 |
| [YOLOv10l][5] | 640 | 53.2 | 120.3 | 7.28 |
| [YOLOv10x][6] | 640 | 54.4 | 160.4 | 10.70 |
方法#
用于无 NMS 训练的一致性双重分配#
YOLOv10 采用双重标签分配策略,在训练过程中结合了一对多和一对一策略,以确保丰富的监督和高效的端到端部署。Ultralytics 的预测和验证默认使用带 NMS 的一对多预测头;设置 nms=False 即可选择无 NMS 预测头。一致的匹配指标使两种策略的监督保持一致,从而在推理过程中提高预测质量。
以整体效率-准确率为导向的模型设计#
效率提升#
- 轻量级分类头:通过使用深度可分离卷积,降低分类头的计算开销。
- 空间与通道解耦下采样:将空间缩减与通道调制解耦,以最大程度减少信息丢失和计算成本。
- 排名引导的模块设计:根据固有的阶段冗余调整模块设计,确保参数得到最佳利用。
准确率提升#
- 大卷积核卷积:扩大感受野,增强特征提取能力。
- 部分自注意力(PSA):引入自注意力模块,以极低的额外开销改善全局表示学习。
实验与结果#
YOLOv10 已在 COCO 等标准基准上进行了广泛测试,展现出卓越的性能和效率。该模型的不同变体均取得了最先进的结果,相较于以往版本和其他当代检测器,在延迟和准确率方面均有显著提升。
对比#

与其他最先进的检测器相比:
- YOLOv10s / x 的速度分别比 RT-DETR-R18 / R101 快 1.8× / 1.3×,同时准确率相近
- 在准确率相同的情况下,YOLOv10b 比 YOLOv9-C 的参数量少 25%,延迟低 46%
- YOLOv10l / x 的性能比 YOLOv8l / x 高出 0.3 AP / 0.5 AP,参数量却少 1.8× / 2.3×
下图数据来自 YOLOv10 论文 的报告,并根据其自身协议测得,因此无法直接与 Ultralytics 模型页面上的数值进行比较:
| 模型 | 参数量 (M) | FLOPs (G) | mAPval 50-95 | 延迟 (ms) | 前向延迟 (ms) |
|---|---|---|---|---|---|
| YOLOv6-3.0-N | 4.7 | 11.4 | 37.0 | 2.69 | 1.76 |
| Gold-YOLO-N | 5.6 | 12.1 | 39.6 | 2.92 | 1.82 |
| YOLOv8n | 3.2 | 8.7 | 37.3 | 6.16 | 1.77 |
| YOLOv10n | 2.3 | 6.7 | 39.5 | 1.84 | 1.79 |
| YOLOv6-3.0-S | 18.5 | 45.3 | 44.3 | 3.42 | 2.35 |
| Gold-YOLO-S | 21.5 | 46.0 | 45.4 | 3.82 | 2.73 |
| YOLOv8s | 11.2 | 28.6 | 44.9 | 7.07 | 2.33 |
| YOLOv10s | 7.2 | 21.6 | 46.8 | 2.49 | 2.39 |
| RT-DETR-R18 | 20.0 | 60.0 | 46.5 | 4.58 | 4.49 |
| YOLOv6-3.0-M | 34.9 | 85.8 | 49.1 | 5.63 | 4.56 |
| Gold-YOLO-M | 41.3 | 87.5 | 49.8 | 6.38 | 5.45 |
| YOLOv8m | 25.9 | 78.9 | 50.6 | 9.50 | 5.09 |
| YOLOv10m | 15.4 | 59.1 | 51.3 | 4.74 | 4.63 |
| YOLOv6-3.0-L | 59.6 | 150.7 | 51.8 | 9.02 | 7.90 |
| Gold-YOLO-L | 75.1 | 151.7 | 51.8 | 10.65 | 9.78 |
| YOLOv8l | 43.7 | 165.2 | 52.9 | 12.39 | 8.06 |
| RT-DETR-R50 | 42.0 | 136.0 | 53.1 | 9.20 | 9.07 |
| YOLOv10l | 24.4 | 120.3 | 53.4 | 7.28 | 7.21 |
| YOLOv8x | 68.2 | 257.8 | 53.9 | 16.86 | 12.83 |
| RT-DETR-R101 | 76.0 | 259.0 | 54.3 | 13.71 | 13.58 |
| YOLOv10x | 29.5 | 160.4 | 54.4 | 10.70 | 10.60 |
参数量和 FLOPs 数值适用于经过 model.fuse() 处理后的融合模型,该过程会合并 Conv 和 BatchNorm 层并移除辅助的一对多检测头。预训练检查点保留完整的训练架构,因此显示的数值可能更高。
使用示例#
使用 YOLOv10 预测新图像。你也可以通过 Ultralytics Platform 在云端 GPU 上训练模型:
from ultralytics import YOLO
# Load a pretrained YOLOv10n model
model = YOLO("yolov10n.pt")
# Perform object detection on an image
results = model("image.jpg")
# Display the results
results[0].show()在自定义数据集上训练 YOLOv10:
from ultralytics import YOLO
# Load YOLOv10n model from scratch
model = YOLO("yolov10n.yaml")
# Train the model
model.train(data="coco8.yaml", epochs=100, imgsz=640)支持的任务和模式#
YOLOv10 模型系列提供了一系列模型,每个模型都针对高性能目标检测进行了优化。这些模型可满足不同的计算需求和准确率要求,因此适用于广泛的应用场景。
| 模型 | 文件名 | 任务 | 训练 | 验证 | 推理 | 导出 |
|---|---|---|---|---|---|---|
| YOLOv10 | yolov10n.pt yolov10s.pt yolov10m.pt yolov10b.pt yolov10l.pt yolov10x.pt | 对象检测 | ✅ | ✅ | ✅ | ✅ |
导出 YOLOv10#
由于 YOLOv10 引入了新的操作,Ultralytics 提供的导出格式目前并非全部受支持。下表列出了使用 Ultralytics 为 YOLOv10 成功转换的格式。如果你能够通过提交贡献变更来增加对 YOLOv10 其他导出格式的支持,欢迎提交 pull request。
| 导出格式 | 导出支持 | 导出模型推理 | 备注 |
|---|---|---|---|
| TorchScript | ✅ | ✅ | 标准 PyTorch 模型格式。 |
| ONNX | ✅ | ✅ | 广泛支持部署。 |
| OpenVINO | ✅ | ✅ | 针对 Intel 硬件进行了优化。 |
| TensorRT | ✅ | ✅ | 针对 NVIDIA GPU 进行了优化。 |
| CoreML | ✅ | ✅ | 仅限 Apple 设备。 |
| TF SavedModel | ✅ | ✅ | TensorFlow 的标准模型格式。 |
| TF GraphDef | ✅ | ✅ | 传统 TensorFlow 格式。 |
| LiteRT | ✅ | ✅ | 针对移动设备、嵌入式设备和浏览器(LiteRT.js)进行了优化。 |
| TF Edge TPU | ✅ | ✅ | 专用于 Google Edge TPU 设备。 |
| PaddlePaddle | ❌ | ❌ | 在中国很受欢迎;全球支持较少。 |
| NCNN | ✅ | ❌ | torch.topk 运算符不受 NCNN 运行时支持。 |
结论#
YOLOv10 在发布时通过解决之前 YOLO 版本的不足并融入创新的设计策略,为实时目标检测树立了新标准。其无需 NMS 的方法开创了 YOLO 系列中的端到端目标检测。有关性能改进且支持无需 NMS 推理的最新 Ultralytics 模型,请参阅 YOLO26。
引用和致谢#
我们谨向 清华大学 的 YOLOv10 作者致谢,感谢他们开展的大量研究以及对 Ultralytics 框架作出的重要贡献:
@inproceedings{wang2024yolov10,
title={YOLOv10: Real-Time End-to-End Object Detection},
author={Wang, Ao and Chen, Hui and Liu, Lihao and Chen, Kai and Lin, Zijia and Han, Jungong and Ding, Guiguang},
booktitle={Advances in Neural Information Processing Systems},
doi = {10.52202/079017-3429},
url = {https://proceedings.neurips.cc/paper_files/paper/2024/file/c34ddd05eb089991f06f3c5dc36836e0-Paper-Conference.pdf},
volume={37},
pages={107984--108011},
year={2024}
}有关详细实现、架构创新和实验结果,请参阅清华大学团队发布的 YOLOv10 研究论文 和 GitHub 代码库。
常见问题#
由 清华大学 研究人员开发的 YOLOv10,为实时目标检测引入了多项关键创新。它在训练过程中采用一致性双重分配,并优化模型组件,从而无需使用非极大值抑制 (NMS),以更低的计算开销实现更出色的性能。有关其架构和主要特性的更多详情,请查看 YOLOv10 概览 部分。
要轻松运行推理,你可以使用 Ultralytics YOLO Python 库或命令行界面 (CLI)。下面是使用 YOLOv10 预测新图像的示例:
示例from ultralytics import YOLO # Load the pretrained YOLOv10n model model = YOLO("yolov10n.pt") results = model("image.jpg") results[0].show()有关更多使用示例,请访问我们的 使用示例 部分。
YOLOv10 提供多种模型变体,以满足不同的使用场景:
- YOLOv10n:适用于资源极其受限的环境
- YOLOv10s:在速度和准确率之间取得平衡
- YOLOv10m:适用于通用场景
- YOLOv10b:通过增加宽度实现更高准确率
- YOLOv10l:以更多计算资源为代价实现高准确率
- YOLOv10x:最高准确率和性能
每种变体都针对不同的计算需求和准确率要求进行设计,因此适用于各种应用。请查看 模型变体 部分以了解更多信息。
YOLOv10 采用一致的双重分配进行训练,使其一对一预测头为每个对象生成单个最佳预测,从而在推理时无需进行非极大值抑制(NMS)。Ultralytics 预测和验证默认使用带 NMS 的一对多预测头;设置
nms=False以选择无 NMS 的预测头并去掉 NMS 步骤。有关详细解释,请参阅无 NMS 训练的一致双重分配一节。YOLOv10 支持多种导出格式,包括 TorchScript、ONNX、OpenVINO 和 TensorRT。不过,由于采用了新的操作,Ultralytics 提供的所有导出格式目前并不都支持 YOLOv10。有关支持格式和导出说明的详情,请访问 导出 YOLOv10 部分。
YOLOv10 在准确率和效率方面均优于之前的 YOLO 版本及其他先进模型。例如,在 COCO 数据集上,YOLOv10s 的速度比 RT-DETR-R18 快 1.8 倍,同时 AP 相近。YOLOv10b 在性能相同的情况下,比 YOLOv9-C 的延迟低 46%,参数少 25%。详细基准结果请参阅 对比 部分。