跳转至内容

YOLOv10:实时端到端目标检测

YOLOv10 由清华大学的研究人员基于 Ultralytics Python 包构建,它引入了一种新的实时对象检测方法,解决了之前 YOLO 版本中存在的后处理和模型架构缺陷。通过消除非极大值抑制 (NMS) 并优化各种模型组件,YOLOv10 以显著降低的计算开销实现了最先进的性能。大量实验表明,它在多个模型规模上都具有卓越的精度-延迟权衡。

YOLOv10 一致的 NMS-free 训练双重分配



观看: 如何使用 Ultralytics 在 SKU-110k 数据集上训练 YOLOv10 | 零售数据集

概述

实时对象检测旨在以低延迟准确预测图像中的对象类别和位置。由于 YOLO 系列在性能和效率之间取得了平衡,因此一直处于这项研究的最前沿。然而,对 NMS 的依赖和架构效率低下阻碍了最佳性能。YOLOv10 通过引入一致的对偶分配来实现无 NMS 训练和整体效率-精度驱动的模型设计策略,从而解决了这些问题。

架构

YOLOv10 的架构建立在之前 YOLO 模型的优势之上,同时引入了多项关键创新。该模型架构包括以下组件:

  1. Backbone: YOLOv10 中的 Backbone 负责特征提取,它使用了 CSPNet(Cross Stage Partial Network)的增强版本,以改善梯度流并减少计算冗余。
  2. Neck:Neck 的设计目的是聚合来自不同尺度的特征,并将它们传递到 Head。它包括 PAN(路径聚合网络)层,用于有效的多尺度特征融合。
  3. One-to-Many Head:在训练期间为每个对象生成多个预测,以提供丰富的监督信号并提高学习准确性。
  4. One-to-One Head:在推理期间为每个对象生成单个最佳预测,从而无需 NMS,从而减少延迟并提高效率。

主要功能

  1. 无NMS训练: 采用一致的对偶分配来消除对NMS的需求,从而减少推理延迟
  2. 整体模型设计:从效率和准确性的角度对各种组件进行全面优化,包括轻量级分类 Head、空间通道解耦下采样和秩引导块设计。
  3. 增强的模型功能: 结合了大内核卷积和部分自注意力模块,以提高性能,而无需显着的计算成本。

模型变体

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 采用双重标签分配,在训练期间结合了一对多和一对一策略,以确保丰富的监督和高效的端到端部署。一致的匹配指标对齐了两种策略之间的监督,从而提高了推理期间预测的质量。

整体效率-准确性驱动的模型设计

效率提升

  1. 轻量级分类 Head:通过使用深度可分离卷积来减少分类 Head 的计算开销。
  2. 空间通道解耦下采样:解耦空间缩减和通道调制,以最大限度地减少信息丢失和计算成本。
  3. 秩引导块设计:基于内在阶段冗余调整块设计,确保最佳参数利用率。

精度提升

  1. 大卷积核:扩大感受野以增强特征提取能力。
  2. Partial Self-Attention (PSA):结合自注意力模块以提高全局表示学习能力,同时最大限度地减少开销。

实验与结果

YOLOv10 已经在 COCO 等标准基准上进行了广泛的测试,展示了卓越的性能和效率。该模型在不同的变体中实现了最先进的结果,与之前的版本和其他当代检测器相比,在延迟和准确性方面都显示出显著的改进。

对比

YOLOv10 与 SOTA 对象检测器的比较

与其他最先进的检测器相比:

  • 在相似的精度下,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%,并且具有相同的性能。详细的基准测试可以在比较部分找到。



📅 创建于 1 年前 ✏️ 更新于 5 个月前

评论