YOLOv10,由清华大学的研究人员基于 Ultralytics Python 包构建,引入了一种全新的实时目标检测方法,该方法解决了以往 YOLO 版本中后处理和模型架构方面的不足。通过消除非极大值抑制(NMS)并优化各种模型组件,YOLOv10 在显著降低计算开销的同时,达到了最先进的性能水平。广泛的实验证明了其在多个模型规模下,在准确性与延迟之间的卓越权衡能力。
一、概述
实时目标检测旨在以低延迟准确预测图像中的物体类别和位置。YOLO 系列因其性能与效率的平衡而一直处于该研究领域的前沿。然而,对 NMS(非极大值抑制)的依赖以及架构上的低效性阻碍了其达到最佳性能。YOLOv10 通过引入针对无 NMS 训练的一致双重分配策略以及全面的效率-精度驱动模型设计策略,解决了这些问题。
二、架构
YOLOv10 的架构在继承以往 YOLO 模型优势的基础上,引入了多项关键创新。模型架构由以下组件构成:
- 主干网络(Backbone):负责特征提取,YOLOv10 采用增强的 CSPNet(跨阶段部分网络)版本,以改善梯度流动并减少计算冗余。
- 颈部(Neck):设计用于聚合不同尺度的特征并将其传递给头部。它包括 PAN(路径聚合网络)层,以实现有效的多尺度特征融合。
- 一对多头部(One-to-Many Head):在训练过程中为每个物体生成多个预测,以提供丰富的监督信号并提高学习准确性。
- 一对一头部(One-to-One Head):在推理过程中为每个物体生成单个最佳预测,从而消除对NMS的需求,减少延迟并提高效率。
三、关键特性
- 无 NMS 训练:利用一致双重分配策略消除对 NMS 的需求,降低推理延迟。
- 整体模型设计:从效率和精度两个角度对各个组件进行全面优化,包括轻量级分类头部、空间-通道解耦下采样以及基于排名的块设计。
- 增强的模型能力:融入大核卷积和部分自注意力模块,以不显著增加计算成本的方式提升性能。
四、模型变体
YOLOv10提供多种模型规模,以满足不同的应用需求:
- YOLOv10-N:纳米版,专为资源极度受限的环境设计。
- YOLOv10-S:小型版,在速度和准确性之间取得平衡。
- YOLOv10-M:中型版,适用于通用用途。
- YOLOv10-B:平衡版,通过增加宽度来提高准确性。
- YOLOv10-L:大型版,以增加计算资源为代价,换取更高的准确性。
- YOLOv10-X:超大型版,追求最高准确度和性能。
五、性能
YOLOv10 在准确性和效率方面均超越了以往的 YOLO 版本以及其他最先进的模型。例如,在COCO 数据集上,YOLOv10-S 在达到与 RT-DETR-R18 相似平均精度(AP)的同时,速度是其 1.8 倍;而 YOLOv10-B 在保持与 YOLOv9-C 相同性能的情况下,延迟降低了 46%,参数减少了 25%。
Model | Input Size | APval | FLOPs (G) | Latency (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 测量的。
1. 实验与结果
YOLOv10 已在 COCO 等标准基准测试集上进行了广泛测试,展示了卓越的性能和效率。该模型在不同变体上均取得了最先进的成果,与以往版本和其他当代检测器相比,在延迟和准确性方面均实现了显著提升。
2.对比
3.与其他最先进的检测器相比:
- YOLOv10-S / X 在相似精度下,分别比 RT-DETR-R18 / R101 快 1.8 倍 / 1.3 倍。
- YOLOv10-B 在相同精度下,比 YOLOv9-C 的参数少 25%,延迟低 46%。
- YOLOv10-L / X 在参数比 YOLOv8-L / X 少 1.8 倍 / 2.3 倍的情况下,平均精度(AP)高出0.3 / 0.5。
Model | Params (M) | FLOPs (G) | mAPval 50-95 | Latency (ms) | Latency-forward (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 |
YOLOv9t | 2.0 | 7.7 | 38.3 | ||
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 |
YOLOv9s | 7.2 | 26.7 | 46.8 | ||
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 |
YOLOv9m | 20.1 | 76.8 | 51.4 | ||
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 |
YOLOv9c | 25.5 | 102.8 | 53.0 | ||
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 |
YOLOv9e | 58.1 | 192.5 | 55.6 | ||
YOLOv10-X | 29.5 | 160.4 | 54.4 | 10.70 | 10.60 |
六、使用示例
1.使用 YOLOv10 预测新图像:
- 命令行:
# 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
- Python 编程:
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()
2.在自定义数据集上训练 YOLOv10:
- 命令行:
# 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
- 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)
七、结论
YOLOv10 通过解决之前 YOLO 版本的不足并融入创新的设计策略,在实时目标检测领域树立了新的标准。它以低计算成本实现高准确度的能力,使其成为众多实际应用场景中的理想选择。
老徐,2024/9/21