物体检测一直是计算机视觉领域的一项长期挑战。YOLO(You Only Look Once)系列一直站在这一挑战的最前沿,不断突破实时物体检测的极限。最新推出的 YOLOv10 将再次掀起这一领域的革命。在这里我们详细介绍 NVIDIA RTX 5880 上的 YOLOv10。
YOLOv10 有哪些新功能?
YOLOv10 在其前身成功的基础上,解决了 YOLOv8 和 YOLOv9 的局限性。最重要的创新是消除了后处理中的非最大抑制 (NMS),实现了端到端的部署并减少了推理延迟。这是通过为无 NMS 训练引入一致的双重分配来实现的。
此外,YOLOv10 还采用了以效率和精度为导向的整体模型设计策略,从效率和精度两个角度对模型的各个组成部分进行优化。这种综合方法可减少计算开销,提高模型能力。
YOLOv10 提供了多种模型规模,确保用户能够根据其具体应用需求选择最佳模型。这种灵活性使其能够更好地适应各种实际场景,从适用于移动应用的轻量级模型到用于高性能任务的较大模型。YOLOv10 提供了六种模型:
Nano (n): 230万参数
Small (s): 720万参数
Medium (m): 1540万参数
Big (b): 1910万参数
Large (l): 2440万参数
Extra Large (x): 2950万参数
NVIDIA RTX 5880
NVIDIA RTX™ 5880 Ada Generation 提供的功能、能力和性能可应对当今专业工作流程的挑战。RTX 5880 基于 NVIDIA Ada Lovelace GPU 架构构建,结合了第三代 RT 核心、第四代 Tensor 核心和下一代 CUDA® 核心以及 48GB 显存,可实现前所未有的渲染、图形和计算性能。搭载 NVIDIA RTX 5880 的工作站可为您提供在当今极具挑战性的商业环境中取得成功所需的一切。
RTX 5880 性能指标
YOLOv10 架构
YOLOv10 架构图
Backbone:
负责特征提取,YOLOv10 的骨干网络使用了增强版的 CSPNet(跨阶段部分网络)。这种改进促进了更好的梯度流动并减少了计算冗余,使模型更加高效。
Neck:
Neck 组件聚合来自不同尺度的特征并将其传递给头部。它包括用于有效多尺度特征融合的 PAN(路径聚合网络)层,确保各个层次的特征能够有效结合,从而提高目标检测效果。
无 NMS 训练的持续双重分配:
传统的 YOLO 模型依赖于非极大值抑制(NMS)进行后处理,这可能会增加推理延迟。YOLOv10 采用了一种持续双重分配策略,消除了推理过程中对 NMS 的需求。
该模型在训练过程中采用了双重标签分配:一对多用于丰富监督,一对一用于高效推理。这种方法在不增加推理开销的情况下实现了监督的和谐,提升了性能。
整体效率驱动设计
整体效率驱动设计包括以下提到的修改。
YOLOv10 整体效率-准确率驱动模型设计
无 NMS 训练:
传统的物体检测模型通常使用非最大抑制(NMS)来去除重复的边界框。但是,这种方法的计算成本很高,尤其是在检测到大量边框的情况下。YOLOv10 通过对模型进行训练,自然避免为同一物体生成多个边框,从而解决了这一问题。这是通过一致的双重分配来实现的,确保在训练和推理过程中,每个对象都分配到一个唯一的边界框。
通过取消 NMS 后处理步骤,YOLOv10 大幅减少了推理延迟、计算成本和推理时间。此外,YOLOv10 还能确保每个对象都由一个高质量的边界框来表示,从而提高了准确性。
轻量级分类头:
分类头是神经网络的最后一层,负责为检测到的对象分配标签。YOLOv10 引入了轻量级分类头,旨在提高效率的同时不降低准确性。这是通过减少分类头中的参数和操作数量来实现的。它在保持性能的同时,通过简化分类头减少了计算开销。
空间-通道解耦降采样:
下采样可以减少特征图的空间维度,同时增加通道维度。使用步长为 2 的 3x3 卷积的标准方法计算成本很高。YOLOv10 通过分离空间和通道操作改进了这一点。点向卷积调整通道维度,而不改变空间维度;深度卷积减少空间维度,同时保持调整后的通道维度。空间缩减与信道转换的分离,降低了计算成本,最大限度地保留了信息。
秩引导块设计:
以前的 YOLO 模型在所有阶段都使用相同的基本构件,导致效率低下。YOLOv10 引入了等级引导模块设计,可识别出冗余度较高的阶段,从而降低复杂性,并用更紧凑的倒置模块(CIB)取而代之,从而有效去除不必要的信息,提高效率。它利用内在等级分析来优化不同阶段的复杂性,在提高效率的同时不降低准确性。
主要亮点和改进
YOLOV10 性能
提升效率:
YOLOv10 的架构改进在各种模型规模(N/S/M/B/L/X)上显著减少了参数、FLOPs(浮点运算)和延迟。例如,YOLOv10-S 比 RT-DETR-R18 快 1.8 倍,但平均精度(AP)相似,而 YOLOv10-B 的延迟减少了 46%,参数减少了 25%,与 YOLOv9-C 相比。
卓越准确性:
该模型在不同基准测试中实现了最先进的性能,相较于之前的 YOLO 版本,在 AP 上有显著提升。YOLOv10-L 比 YOLOv8-L 提高了 0.3 AP,但参数减少了 1.8 倍,展示了高效的参数利用。
性能:
YOLOv10 处理图像速度令人瞩目,在 (1, 3, 384, 640) 分辨率下,每张图像的预处理时间为 2.0 毫秒,推理时间为 13.4 毫秒,后处理时间为 1.3 毫秒。这种快速处理时间使 YOLOv10 非常适合需要快速且准确的目标检测应用,同时保持高精度。
最小尺寸的模型每张图像处理时间仅为 1 毫秒(1000fps),使其成为边缘设备上实时视频处理的理想选择。
入门指南
我们在 RTX 5880 上用自定义数据集来训练 YOLOv10 ,以下是操作步骤和执行代码:
检查 GPU 状态
显示当前目录
安装 YOLOv10 和 Supervision 依赖
下载 YOLOv10 预训练权重
确保有一个合适的图像路径
下载和准备 Roboflow 数据集
训练 YOLOv10 模型
显示混淆矩阵
显示训练结果
通过这些步骤,你可以在自定义数据集上成功训练 YOLOv10 模型,并进行有效的目标检测。以下为参考代码:
# 检查GPU状态!nvidia-smi# 显示当前目录import osHOME = os.getcwd()print(HOME)# 安装YOLOv10和Supervision依赖!pip install -q supervision!pip install -q git+https://github.com/THU-MIG/yolov10.git# 下载YOLOv10预训练权重!mkdir -p {HOME}/weights!wget -P {HOME}/weights -q https://github.com/jameslahm/yolov10/releases/download/v1.0/yolov10n.pt!wget -P {HOME}/weights -q https://github.com/jameslahm/yolov10/releases/download/v1.0/yolov10s.pt!wget -P {HOME}/weights -q https://github.com/jameslahm/yolov10/releases/download/v1.0/yolov10m.pt!wget -P {HOME}/weights -q https://github.com/jameslahm/yolov10/releases/download/v1.0/yolov10b.pt!wget -P {HOME}/weights -q https://github.com/jameslahm/yolov10/releases/download/v1.0/yolov10x.pt!wget -P {HOME}/weights -q https://github.com/jameslahm/yolov10/releases/download/v1.0/yolov10l.pt!ls -lh {HOME}/weights# 加载YOLOv10模型from ultralytics import YOLOv10model = YOLOv10(f'{HOME}/weights/yolov10n.pt')# 对图像进行推理和标注import cv2import supervision as svimage = cv2.imread(f'{HOME}/data/dog.jpeg') # 确保您有一个合适的图像路径results = model(image)[0]detections = sv.Detections.from_ultralytics(results)bounding_box_annotator = sv.BoundingBoxAnnotator()label_annotator = sv.LabelAnnotator()annotated_image = bounding_box_annotator.annotate(scene=image, detections=detections)annotated_image = label_annotator.annotate(scene=annotated_image, detections=detections)sv.plot_image(annotated_image)# 下载和准备Roboflow数据集!mkdir {HOME}/datasets%cd {HOME}/datasets!pip install -q roboflowfrom roboflow import Roboflowrf = Roboflow(api_key="YOUR_API_KEY")project = rf.workspace("roboflow-100").project("road-traffic")version = project.version(4)dataset = version.download("yolov8")# 训练YOLOv10模型%cd {HOME}!yolo task=detect mode=train epochs=25 batch=32 plots=True model={HOME}/weights/yolov10n.pt data=/content/datasets/road-traffic-4/data.yaml# 显示混淆矩阵from IPython.display import Image%cd {HOME}Image(filename=f'{HOME}/runs/detect/train/confusion_matrix_normalized.png', width=600)# 显示训练结果%cd {HOME}Image(filename=f'{HOME}/runs/detect/train10/results.png', width=600)
在 RTX 5880 上运行上述代码,我们得到验证集的图像:
欢迎扫码关注,
获取更多精彩资讯!

