YOLOv10: 实时端到端目标检测
YOLOv10由清华大学的研究人员基于Ultralytics的Python包构建,引入了实时目标检测的新方法,解决了之前YOLO版本中存在的后处理和模型架构缺陷。通过消除非极大值抑制(NMS)并优化各种模型组件,YOLOv10以显著降低的计算开销实现了最先进的性能。广泛的实验证明了其在多个模型规模上的优越准确率-延迟权衡。
观看: 如何使用Ultralytics在SKU-110k数据集上训练YOLOv10 | 零售数据集
概述
实时目标检测旨在以低延迟准确预测图像中的物体类别和位置。YOLO系列由于其在性能和效率之间的平衡,一直处于这一研究的前沿。然而,对NMS的依赖和架构的低效性阻碍了最佳性能。YOLOv10通过引入一致的双重分配用于无NMS训练和整体效率-准确性驱动的模型设计策略,解决了这些问题。
架构
YOLOv10的架构在继承之前YOLO模型的优势的同时,引入了几项关键创新。模型架构包括以下组件:
- 骨干网络: 负责特征提取,YOLOv10中的骨干网络使用增强版的CSPNet(跨阶段部分网络)以改善梯度流并减少计算冗余。
- 颈部: 设计用于聚合不同尺度的特征并传递给头部。它包括PAN(路径聚合网络)层,用于有效的多尺度特征融合。
- 一对多头部: 在训练期间为每个对象生成多个预测,以提供丰富的监督信号并提高学习准确性。
- 一对一头部: 在推理期间为每个对象生成单个最佳预测,以消除对NMS的需求,从而减少延迟并提高效率。
关键特性
- 无NMS训练: 利用一致的双重分配来消除对NMS的需求,减少推理延迟。
- 整体模型设计: 从效率和准确性两个角度对各种组件进行全面优化,包括轻量级分类头、空间-通道解耦下采样和秩引导块设计。
- 增强的模型能力: 结合大核卷积和部分自注意力模块,以在不显著增加计算成本的情况下提高性能。
模型变体
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在训练过程中采用双重标签分配,结合一对多和一对一策略,以确保丰富的监督和高效的端到端部署。一致的匹配度量标准使两种策略之间的监督保持一致,提高了推理过程中预测的质量。
整体效率-准确性驱动的模型设计
效率提升
- 轻量级分类头:通过使用深度可分离卷积减少分类头的计算开销。
- 空间-通道解耦下采样:解耦空间缩减和通道调制,以最小化信息损失和计算成本。
- 秩引导的块设计:根据内在阶段冗余调整块设计,确保最佳参数利用。
准确性提升
- 大核卷积:扩大感受野以增强特征提取能力。
- 部分自注意力(PSA):引入自注意力模块,以最小的开销改善全局表示学习。
实验与结果
YOLOv10已在COCO等标准基准上进行了广泛测试,展示了卓越的性能和效率。该模型在不同变体中实现了最先进的结果,与之前的版本和其他当代检测器相比,在延迟和准确性方面展示了显著的改进。
比较
与其他最先进检测器相比:
- 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预测新图像:
示例
在自定义数据集上训练YOLOv10:
示例
支持的任务和模式
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框架进行了广泛的研究并做出了重大贡献:
有关详细的实现、架构创新和实验结果,请参阅清华大学团队提供的YOLOv10研究论文和GitHub仓库。
常见问题
YOLOv10是什么,它与之前的YOLO版本有何不同?
YOLOv10由清华大学的研究人员开发,引入了多项关键创新以实现实时目标检测。它通过在训练期间采用一致的双重分配来消除非极大值抑制(NMS)的需求,并优化模型组件以实现更高的性能和更低的计算开销。有关其架构和关键功能的更多详细信息,请查看YOLOv10概述部分。
如何开始使用YOLOv10进行推理?
为了方便推理,您可以使用Ultralytics YOLO Python库或命令行界面(CLI)。以下是使用YOLOv10预测新图像的示例:
Example
有关更多使用示例,请访问我们的使用示例部分。
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相同。详细的基准测试可以在比较部分找到。