YOLOv10:实时端到端目标检测
YOLOv10 由清华大学的研究人员基于 Ultralytics Python 包构建,它引入了一种新的实时对象检测方法,解决了之前 YOLO 版本中存在的后处理和模型架构缺陷。通过消除非极大值抑制 (NMS) 并优化各种模型组件,YOLOv10 以显著降低的计算开销实现了最先进的性能。大量实验表明,它在多个模型规模上都具有卓越的精度-延迟权衡。
观看: 如何使用 Ultralytics 在 SKU-110k 数据集上训练 YOLOv10 | 零售数据集
概述
实时对象检测旨在以低延迟准确预测图像中的对象类别和位置。由于 YOLO 系列在性能和效率之间取得了平衡,因此一直处于这项研究的最前沿。然而,对 NMS 的依赖和架构效率低下阻碍了最佳性能。YOLOv10 通过引入一致的对偶分配来实现无 NMS 训练和整体效率-精度驱动的模型设计策略,从而解决了这些问题。
架构
YOLOv10 的架构建立在之前 YOLO 模型的优势之上,同时引入了多项关键创新。该模型架构包括以下组件:
- Backbone: YOLOv10 中的 Backbone 负责特征提取,它使用了 CSPNet(Cross Stage Partial Network)的增强版本,以改善梯度流并减少计算冗余。
- Neck:Neck 的设计目的是聚合来自不同尺度的特征,并将它们传递到 Head。它包括 PAN(路径聚合网络)层,用于有效的多尺度特征融合。
- One-to-Many Head:在训练期间为每个对象生成多个预测,以提供丰富的监督信号并提高学习准确性。
- One-to-One Head:在推理期间为每个对象生成单个最佳预测,从而无需 NMS,从而减少延迟并提高效率。
主要功能
- 无NMS训练: 采用一致的对偶分配来消除对NMS的需求,从而减少推理延迟。
- 整体模型设计:从效率和准确性的角度对各种组件进行全面优化,包括轻量级分类 Head、空间通道解耦下采样和秩引导块设计。
- 增强的模型功能: 结合了大内核卷积和部分自注意力模块,以提高性能,而无需显着的计算成本。
模型变体
YOLOv10 具有多种模型规模,以满足不同的应用需求:
- YOLOv10n: 适用于资源极其受限环境的 Nano 版本。
- YOLOv10s: 平衡速度和精度的小型版本。
- YOLOv10m: 适用于通用用途的中型版本。
- YOLOv10b: 平衡版本,宽度增加,精度更高。
- YOLOv10l: 大型版本,精度更高,但会增加计算资源消耗。
- YOLOv10x: 超大型版本,可实现最高的精度和性能。
性能
YOLOv10 在准确性和效率方面优于以前的 YOLO 版本和其他最先进的模型。例如,在 COCO 数据集上,YOLOv10s 比 RT-DETR-R18 快 1.8 倍,具有相似的 AP,并且 YOLOv10b 比 YOLOv9-C 的延迟减少 46%,参数减少 25%,但性能相同。
性能
在 T4 GPU 上使用 TensorRT FP16 测量的延迟。
模型 | 输入尺寸 | APval | FLOPs (G) | 延迟 (ms) |
---|---|---|---|---|
YOLOv10n | 640 | 38.5 | 6.7 | 1.84 |
YOLOv10s | 640 | 46.3 | 21.6 | 2.49 |
YOLOv10m | 640 | 51.1 | 59.1 | 4.74 |
YOLOv10b | 640 | 52.5 | 92.0 | 5.74 |
YOLOv10l | 640 | 53.2 | 120.3 | 7.28 |
YOLOv10x | 640 | 54.4 | 160.4 | 10.70 |
方法
NMS-Free 训练的一致 Dual Assignments
YOLOv10 采用双重标签分配,在训练期间结合了一对多和一对一策略,以确保丰富的监督和高效的端到端部署。一致的匹配指标对齐了两种策略之间的监督,从而提高了推理期间预测的质量。
整体效率-准确性驱动的模型设计
效率提升
- 轻量级分类 Head:通过使用深度可分离卷积来减少分类 Head 的计算开销。
- 空间通道解耦下采样:解耦空间缩减和通道调制,以最大限度地减少信息丢失和计算成本。
- 秩引导块设计:基于内在阶段冗余调整块设计,确保最佳参数利用率。
精度提升
- 大卷积核:扩大感受野以增强特征提取能力。
- Partial Self-Attention (PSA):结合自注意力模块以提高全局表示学习能力,同时最大限度地减少开销。
实验与结果
YOLOv10 已经在 COCO 等标准基准上进行了广泛的测试,展示了卓越的性能和效率。该模型在不同的变体中实现了最先进的结果,与之前的版本和其他当代检测器相比,在延迟和准确性方面都显示出显著的改进。
对比
与其他最先进的检测器相比:
- 在相似的精度下,YOLOv10s / x 比 RT-DETR-R18 / R101 快 1.8 倍 / 1.3 倍
- 在相同精度下,YOLOv10b 的参数比 YOLOv9-C 少 25%,延迟降低 46%
- YOLOv10l / x 的性能优于 YOLOv8l / x,AP 分别高出 0.3 和 0.5,而参数分别减少了 1.8 倍和 2.3 倍
性能
以下是 YOLOv10 变体与其他最先进模型的详细比较:
模型 | 参数量 (M) |
FLOPs (G) |
mAPval 50-95 |
延迟 (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 |
使用示例
使用 YOLOv10 预测新图像:
示例
from ultralytics import YOLO
# Load a pre-trained YOLOv10n model
model = YOLO("yolov10n.pt")
# Perform object detection on an image
results = model("image.jpg")
# Display the results
results[0].show()
# Load a COCO-pretrained YOLOv10n model and run inference on the 'bus.jpg' image
yolo detect predict model=yolov10n.pt source=path/to/bus.jpg
在自定义数据集上训练 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)
# Build a YOLOv10n model from scratch and train it on the COCO8 example dataset for 100 epochs
yolo train model=yolov10n.yaml data=coco8.yaml epochs=100 imgsz=640
# Build a YOLOv10n model from scratch and run inference on the 'bus.jpg' image
yolo predict model=yolov10n.yaml source=path/to/bus.jpg
支持的任务和模式
YOLOv10 模型系列提供了一系列模型,每个模型都针对高性能目标检测进行了优化。这些模型满足不同的计算需求和精度要求,使其能够广泛应用于各种应用。
模型 | 文件名 | 任务 | 推理 | 验证 | 训练 | 导出 |
---|---|---|---|---|---|---|
YOLOv10 | yolov10n.pt yolov10s.pt yolov10m.pt yolov10l.pt yolov10x.pt |
目标检测 | ✅ | ✅ | ✅ | ✅ |
导出 YOLOv10
由于 YOLOv10 引入了新的操作,因此 Ultralytics 提供的并非所有导出格式目前都受支持。下表概述了哪些格式已使用 Ultralytics 成功转换为 YOLOv10。如果您能够提供贡献变更以添加对 YOLOv10 的其他格式的导出支持,请随时打开 pull request。
导出格式 | 导出支持 | 导出的模型推理 | 备注 |
---|---|---|---|
TorchScript | ✅ | ✅ | 标准 PyTorch 模型格式。 |
ONNX | ✅ | ✅ | 被广泛支持用于部署。 |
OpenVINO | ✅ | ✅ | 针对 Intel 硬件进行了优化。 |
TensorRT | ✅ | ✅ | 针对 NVIDIA GPU 进行了优化。 |
CoreML | ✅ | ✅ | 仅限于苹果设备。 |
TF SavedModel | ✅ | ✅ | TensorFlow 的标准模型格式。 |
TF GraphDef | ✅ | ✅ | 传统的 TensorFlow 格式。 |
TF Lite | ✅ | ✅ | 针对移动和嵌入式设备优化。 |
TF Edge TPU | ✅ | ✅ | 专门用于 Google 的 Edge TPU 设备。 |
TF.js | ✅ | ✅ | 用于浏览器的 JavaScript 环境。 |
PaddlePaddle | ❌ | ❌ | 在中国很受欢迎;但全球支持较少。 |
NCNN | ✅ | ❌ | 层 torch.topk 不存在或未注册 |
结论
YOLOv10 通过解决以前 YOLO 版本中的缺点并结合创新的设计策略,为实时目标检测树立了新标准。它能够以低计算成本提供高精度,使其成为包括制造业、零售业和自动驾驶汽车在内的各种实际应用的理想选择。
引用与致谢
我们要感谢清华大学的 YOLOv10 作者们,感谢他们对 Ultralytics 框架的广泛研究和重大贡献:
@article{THU-MIGyolov10,
title={YOLOv10: Real-Time End-to-End Object Detection},
author={Ao Wang, Hui Chen, Lihao Liu, et al.},
journal={arXiv preprint arXiv:2405.14458},
year={2024},
institution={Tsinghua University},
license = {AGPL-3.0}
}
有关详细的实现、架构创新和实验结果,请参阅清华大学团队发布的 YOLOv10 研究论文 和 GitHub 仓库。
常见问题
什么是 YOLOv10,它与之前的 YOLO 版本有何不同?
YOLOv10 由清华大学的研究人员开发,为实时对象检测引入了多项关键创新。它通过在训练期间采用一致的 dual assignments,并优化模型组件,从而在减少计算开销的同时获得卓越的性能,从而消除了对非极大值抑制 (NMS) 的需求。有关其架构和主要功能的更多详细信息,请查看YOLOv10 概述部分。
如何开始使用 YOLOv10 运行推理?
为了方便推理,您可以使用 Ultralytics YOLO Python 库或命令行界面(CLI)。以下是使用 YOLOv10 预测新图像的示例:
示例
from ultralytics import YOLO
# Load the pre-trained YOLOv10n model
model = YOLO("yolov10n.pt")
results = model("image.jpg")
results[0].show()
yolo detect predict model=yolov10n.pt source=path/to/image.jpg
有关更多使用示例,请访问我们的使用示例部分。
YOLOv10 提供了哪些模型变体,它们的使用场景是什么?
YOLOv10 提供了多种模型变体,以满足不同的使用场景:
- YOLOv10n: 适用于资源极其受限的环境
- YOLOv10s: 平衡速度和精度
- YOLOv10m: 通用
- YOLOv10b: 宽度增加,精度更高
- YOLOv10l: 高精度,但会消耗计算资源
- YOLOv10x: 最高的精度和性能
每个变体都针对不同的计算需求和精度要求而设计,使其能够适用于各种应用。请浏览模型变体部分以获取更多信息。
YOLOv10 中无 NMS 方法如何提高性能?
YOLOv10 通过采用一致的 dual assignments 进行训练,从而消除了推理期间对非极大值抑制 (NMS) 的需求。这种方法减少了推理延迟并提高了预测效率。该架构还包括一个用于推理的一对一 head,确保每个对象获得一个最佳预测。有关详细说明,请参阅用于无 NMS 训练的一致 Dual Assignments部分。
在哪里可以找到 YOLOv10 模型的导出选项?
YOLOv10 支持多种导出格式,包括 TorchScript、ONNX、OpenVINO 和 TensorRT。但是,由于 YOLOv10 的新操作,并非 Ultralytics 提供的所有导出格式目前都受支持。有关支持的格式和导出说明的详细信息,请访问导出 YOLOv10部分。
YOLOv10 模型的性能基准是什么?
YOLOv10 在准确性和效率方面均优于以前的 YOLO 版本和其他最先进的模型。例如,YOLOv10s 比 RT-DETR-R18 快 1.8 倍,并且在 COCO 数据集上具有相似的 AP。YOLOv10b 比 YOLOv9-C 的延迟减少 46%,参数减少 25%,并且具有相同的性能。详细的基准测试可以在比较部分找到。