Skip to content

YOLOv10: 实时端到端目标检测

YOLOv10由清华大学的研究人员基于UltralyticsPython包构建,引入了实时目标检测的新方法,解决了之前YOLO版本中存在的后处理和模型架构缺陷。通过消除非极大值抑制(NMS)并优化各种模型组件,YOLOv10以显著降低的计算开销实现了最先进的性能。广泛的实验证明了其在多个模型规模上的优越准确率-延迟权衡。

YOLOv10一致的双重分配用于无NMS训练



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

概述

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

架构

YOLOv10的架构在继承之前YOLO模型的优势的同时,引入了几项关键创新。模型架构包括以下组件:

  1. 骨干网络: 负责特征提取,YOLOv10中的骨干网络使用增强版的CSPNet(跨阶段部分网络)以改善梯度流并减少计算冗余。
  2. 颈部: 设计用于聚合不同尺度的特征并传递给头部。它包括PAN(路径聚合网络)层,用于有效的多尺度特征融合。
  3. 一对多头部: 在训练期间为每个对象生成多个预测,以提供丰富的监督信号并提高学习准确性。
  4. 一对一头部: 在推理期间为每个对象生成单个最佳预测,以消除对NMS的需求,从而减少延迟并提高效率。

关键特性

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

模型变体

YOLOv10提供多种模型规模,以满足不同的应用需求:

  • YOLOv10-N: 适用于极度资源受限环境的Nano版本。
  • YOLOv10-S: 平衡速度和准确性的小版本。
  • YOLOv10-M: 适用于通用用途的中等版本。
  • YOLOv10-B: 增加宽度的平衡版本,以提高准确性。
  • YOLOv10-L: 以增加计算资源为代价提高准确性的大版本。
  • YOLOv10-X: 最大准确性和性能的特大版本。

性能

YOLOv10在准确性和效率方面优于之前的YOLO版本和其他最先进的模型。例如,YOLOv10-S在COCO数据集上的AP相似的情况下比RT-DETR-R18快1.8倍,而YOLOv10-B在相同性能下比YOLOv9-C的延迟减少46%,参数减少25%。

模型 输入尺寸 APval FLOPs (G) 延迟 (ms)
YOLOv10-N 640 38.5 6.7 1.84
YOLOv10-S 640 46.3 21.6 2.49
YOLOv10-M 640 51.1 59.1 4.74
YOLOv10-B 640 52.5 92.0 5.74
YOLOv10-L 640 53.2 120.3 7.28
YOLOv10-X 640 54.4 160.4 10.70

在T4 GPU上使用TensorRT FP16测量的延迟。

方法论

无NMS训练的一致双重分配

YOLOv10在训练过程中采用双重标签分配,结合一对多和一对一策略,以确保丰富的监督和高效的端到端部署。一致的匹配度量标准使两种策略之间的监督保持一致,提高了推理过程中预测的质量。

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

效率提升

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

准确性提升

  1. 大核卷积:扩大感受野以增强特征提取能力。
  2. 部分自注意力(PSA):引入自注意力模块,以最小的开销改善全局表示学习。

实验与结果

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

比较

YOLOv10与SOTA目标检测器的比较

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

  • YOLOv10-S / X比RT-DETR-R18 / R101快1.8× / 1.3×,且准确性相似
  • YOLOv10-B在相同准确性下比YOLOv9-C少25%的参数和46%的延迟
  • YOLOv10-L / X在参数少1.8× / 2.3×的情况下,比YOLOv8-L / X高出0.3 AP / 0.5 AP

以下是YOLOv10变体与其他最先进模型的详细比较:

模型 参数
(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
YOLOv8-N 3.2 8.7 37.3 6.16 1.77
YOLOv10-N 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
YOLOv8-S 11.2 28.6 44.9 7.07 2.33
YOLOv10-S 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
YOLOv8-M 25.9 78.9 50.6 9.50 5.09
YOLOv10-M 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
YOLOv8-L 43.7 165.2 52.9 12.39 8.06
RT-DETR-R50 42.0 136.0 53.1 9.20 9.07
YOLOv10-L 24.4 120.3 53.4 7.28 7.21
YOLOv8-X 68.2 257.8 53.9 16.86 12.83
RT-DETR-R101 76.0 259.0 54.3 13.71 13.58
YOLOv10-X 29.5 160.4 54.4 10.70 10.60

使用示例

使用YOLOv10预测新图像:

示例

from ultralytics import YOLO

# 加载预训练的YOLOv10n模型
model = YOLO("yolov10n.pt")

# 对图像进行目标检测
results = model("image.jpg")

# 显示结果
results[0].show()
# 加载COCO预训练的YOLOv10n模型并对'bus.jpg'图像进行推理
yolo detect predict model=yolov10n.pt source=path/to/bus.jpg

在自定义数据集上训练YOLOv10:

示例

from ultralytics import YOLO

# 从头开始加载YOLOv10n模型
model = YOLO("yolov10n.yaml")

# 训练模型
model.train(data="coco8.yaml", epochs=100, imgsz=640)
# 从头开始构建YOLOv10n模型并在COCO8示例数据集上训练100个epoch
yolo train model=yolov10n.yaml data=coco8.yaml epochs=100 imgsz=640

# 从头开始构建YOLOv10n模型并对'bus.jpg'图像进行推理
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的额外格式的导出支持,欢迎提交拉取请求。

导出格式 导出支持 导出模型推理 备注
TorchScript 标准PyTorch模型格式。
ONNX 广泛支持部署。
OpenVINO 针对英特尔硬件优化。
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由清华大学的研究人员开发,引入了多项关键创新以实现实时目标检测。它通过在训练期间采用一致的双重分配来消除非极大值抑制(NMS)的需求,并优化模型组件以实现更高的性能和更低的计算开销。有关其架构和关键功能的更多详细信息,请查看YOLOv10概述部分。

如何开始使用YOLOv10进行推理?

为了方便推理,您可以使用Ultralytics YOLO Python库或命令行界面(CLI)。以下是使用YOLOv10预测新图像的示例:

Example

from ultralytics import YOLO

# 加载预训练的YOLOv10-N模型
model = YOLO("yolov10n.pt")
results = model("image.jpg")
results[0].show()
yolo detect predict model=yolov10n.pt source=path/to/image.jpg

有关更多使用示例,请访问我们的使用示例部分。

YOLOv10提供哪些模型变体,它们的用途是什么?

YOLOv10提供了多个模型变体以满足不同的使用场景:

  • YOLOv10-N: 适用于资源极度受限的环境
  • YOLOv10-S: 平衡速度和精度
  • YOLOv10-M: 通用用途
  • YOLOv10-B: 更高的精度,增加宽度
  • YOLOv10-L: 高精度,但计算资源消耗较大
  • YOLOv10-X: 最大精度和性能

每个变体都设计用于不同的计算需求和精度要求,使其适用于各种应用。探索模型变体部分以获取更多信息。

YOLOv10中的NMS-free方法如何提升性能?

YOLOv10通过在训练中采用一致的双重分配,消除了推理过程中对非极大值抑制(NMS)的需求。这种方法减少了推理延迟,并提高了预测效率。架构中还包括一个一对一的推理头,确保每个对象都能获得一个最佳预测。详细解释请参见NMS-Free训练的一致双重分配部分。

我可以在哪里找到YOLOv10模型的导出选项?

YOLOv10支持多种导出格式,包括TorchScript、ONNX、OpenVINO和TensorRT。然而,由于YOLOv10的新操作,Ultralytics提供的所有导出格式目前并不都支持YOLOv10。有关支持的格式和导出说明的详细信息,请访问导出YOLOv10部分。

YOLOv10模型的性能基准是什么?

YOLOv10在准确性和效率方面均优于之前的YOLO版本和其他最先进的模型。例如,在COCO数据集上,YOLOv10-S比RT-DETR-R18快1.8倍,且AP相似。YOLOv10-B的延迟减少了46%,参数减少了25%,而性能与YOLOv9-C相同。详细的基准测试可以在比较部分找到。


📅 Created 4 months ago ✏️ Updated 20 days ago

Comments