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

观看: 如何使用 Ultralytics 在 SKU-110k 数据集上训练 YOLOv10 | 零售数据集
实时目标检测旨在以低延迟准确预测图像中的对象类别和位置。YOLO 系列因其在性能和效率之间的平衡而一直处于这项研究的前沿。然而,对 NMS 的依赖和架构效率低下阻碍了最佳性能。YOLOv10 通过引入用于无 NMS 训练的一致双重分配和整体效率-准确性驱动的模型设计策略来解决这些问题。
YOLOv10 的架构建立在之前 YOLO 模型优势的基础上,同时引入了几项关键创新。该模型架构由以下组件组成:
YOLOv10 提供多种模型规模,以满足不同的应用需求:
YOLOv10 在精度和效率方面均优于之前的 YOLO 版本和其他最先进模型。例如,YOLOv10s 在 COCO 数据集上与 RT-DETR-R18 具有相似的 AP,但速度快 1.8 倍;YOLOv10b 与 YOLOv9-C 性能相同,但延迟降低 46%,参数减少 25%。
!!! tip "性能"
=== "检测 (COCO)"
在 T4 GPU 上使用 TensorRT FP16 测量的延迟。
| 模型 | 输入尺寸 | AP<sup>val</sup> | 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 |YOLOv10 采用双重标签分配,在训练过程中结合了一对多和一对一策略,以确保丰富的监督和高效的端到端部署。一致的匹配度量使两种策略之间的监督保持一致,从而提高推理期间的预测质量。
YOLOv10 已在 COCO 等标准基准上进行了广泛测试,展现出卓越的性能和效率。该模型在不同变体上均取得了最先进的成果,与以前的版本和其他当代检测器相比,在延迟和准确性方面均有显著提升。

与其他最先进的检测器相比:
!!! tip "性能"
=== "检测 (COCO)"
以下是 YOLOv10 变体与其他最先进模型的详细比较:
| 模型 | 参数量<br><sup>(M)</sup> | FLOPs<br><sup>(G)</sup> | mAP<sup>val<br>50-95</sup> | 延迟<br><sup>(ms)</sup> | 延迟-前向<br><sup>(ms)</sup> |
| ----------------- | ------------------------ | ----------------------- | -------------------------- | ----------------------- | ---------------------------- |
| 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][1]** | **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][2]** | **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][3]** | **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][5]** | **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][6]** | **29.5** | **160.4** | **54.4** | **10.70** | **10.60** |
[1]: https://github.com/ultralytics/assets/releases/download/v8.4.0/yolov10n.pt
[2]: https://github.com/ultralytics/assets/releases/download/v8.4.0/yolov10s.pt
[3]: https://github.com/ultralytics/assets/releases/download/v8.4.0/yolov10m.pt
[4]: https://github.com/ultralytics/assets/releases/download/v8.4.0/yolov10b.pt
[5]: https://github.com/ultralytics/assets/releases/download/v8.4.0/yolov10l.pt
[6]: https://github.com/ultralytics/assets/releases/download/v8.4.0/yolov10x.pt参数和 FLOPs 值适用于融合模型在 model.fuse() 之后,它合并了 Conv 和 BatchNorm 层,并移除了辅助的一对多检测头。预训练检查点保留了完整的训练架构,并可能显示更高的计数。
若要使用 YOLOv10 预测新图像,也可通过 Ultralytics Platform 云端 GPU 上训练模型:
!!! example "示例"
=== "Python"
```python
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()
```
=== "CLI"
```bash
# 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:
!!! example "示例"
=== "Python"
```python
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)
```
=== "CLI"
```bash
# 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 引入了新操作,Ultralytics 提供的所有导出格式目前并非都受支持。下表概述了哪些格式已使用 Ultralytics 成功转换为 YOLOv10。如果您能够提供贡献更改以增加对 YOLOv10 其他格式的导出支持,请随时提交拉取请求。
| 导出格式 | 导出支持 | 导出的模型推理 | 备注 |
|---|---|---|---|
| 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 版本的缺点并整合创新设计策略,为实时目标检测设定了新标准。其无 NMS 方法开创了 YOLO 系列中的端到端目标检测。有关具有改进性能和无 NMS 推理的最新 Ultralytics 模型,请参阅 YOLO26。
我们感谢来自清华大学的 YOLOv10 作者,感谢他们对 Ultralytics 框架的广泛研究和重大贡献:
!!! quote ""
=== "BibTeX"
```bibtex
@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 由清华大学研究人员开发,为实时目标检测引入了多项关键创新。它通过在训练期间采用一致的双重分配和优化的模型组件,消除了对非极大值抑制 (NMS) 的需求,从而以更低的计算开销实现了卓越的性能。有关其架构和关键特性的更多详细信息,请查阅 YOLOv10 概述部分。
为了方便推理,您可以使用 Ultralytics YOLO Python 库或命令行界面 (CLI)。以下是使用 YOLOv10 预测新图像的示例:
!!! example "示例"
=== "Python"
```python
from ultralytics import YOLO
# Load the pretrained YOLOv10n model
model = YOLO("yolov10n.pt")
results = model("image.jpg")
results[0].show()
```
=== "CLI"
```bash
yolo detect predict model=yolov10n.pt source=path/to/image.jpg
```有关更多使用示例,请访问我们的使用示例部分。
YOLOv10 提供多种模型变体以适应不同的用例:
每个变体都针对不同的计算需求和精度要求而设计,使其能够适用于各种应用。请浏览模型变体部分以获取更多信息。
YOLOv10 通过在训练中采用一致的双重分配,消除了在推理过程中对非极大值抑制 (NMS) 的需求。这种方法降低了推理延迟,并提高了预测效率。该架构还包含一个用于推理的一对一头部,确保每个对象获得一个最佳预测。有关详细说明,请参阅免 NMS 训练的一致双重分配部分。
YOLOv10 支持多种导出格式,包括 TorchScript、ONNX、OpenVINO 和 TensorRT。然而,由于 YOLOv10 的新操作,Ultralytics 提供的并非所有导出格式目前都受支持。有关支持格式的详细信息和导出说明,请访问导出 YOLOv10 部分。
YOLOv10 在精度和效率方面均优于之前的 YOLO 版本和其他最先进模型。例如,YOLOv10s 在 COCO 数据集上与 RT-DETR-R18 具有相似的 AP,但速度快 1.8 倍。YOLOv10b 与 YOLOv9-C 性能相同,但延迟降低 46%,参数减少 25%。详细的基准测试可在对比部分找到。