• 正文
  • 相关推荐
申请入驻 产业图谱

如何在 NVIDIA Jetson 设备上部署 YOLOv12

09/11 08:09
425
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

简 介

在前面的文章中,我们深入探讨了最新YOLOv12的特性和功能。

YOLOv12:重新定义实时目标检测(介绍+使用教程)

如何使用 YOLOv12 实现目标检测

今天我们将探索在 NVIDIA Jetson 等紧凑但功能强大的平台上设置 YOLOv12 的复杂性,分析其性能,并将其与其前身 YOLO11 进行比较。

使用 Docker Over Virtualenvs 进行部署

为什么我不使用虚拟环境来快速实现?使用 NVIDIA Jetson 设备时,您遇到的第一个挑战之一就是为 YOLO 等深度学习模型设置适当的环境。这些紧凑但功能强大的边缘计算设备在 ARM 架构上运行,这会导致与标准 Python 软件包(尤其是 PyTorch)的严重兼容性问题。

就我而言,我有一台 NVIDIA Jetson Xavier NX,配备 8GB 共享 RAM 和Jetpack 5.1 ,并且可以根据NVIDIA 文档提供的兼容性矩阵安装某些版本的 PyTorch 。

ARM 架构挑战

NVIDIA Jetson 设备采用 ARM 架构,这与大多数台式机和服务器计算机中的 x86 架构有着根本区别。这种架构差异意味着并非所有 Python 软件包都直接兼容,安装 PyTorch 等框架变得特别困难。

如果您尝试创建虚拟环境并运行的典型方法pip install ultralytics,那么您很快就会遇到问题。安装的 PyTorch 版本与 Jetson GPU 不兼容,导致模型仅在 CPU 上运行 - 大大减慢了推理速度。

# 这在 Jetson 设备上无法正常工作pip install ultralytics # 将安装不兼容的 PyTorch 版本

使用 Jetson 设备时,在容器外安装 PyTorch 会出现一些问题。例如,您需要torchvision从头开始编译,这可能需要花费大量时间,并且您可能会在torch版本兼容性方面犯一些错误。

Docker:卓越的解决方案

NVIDIA Jetpack 预装了完全兼容的 docker 版本,因此这种方法对于某些目的来说更快捷、更高效。使用 Docker 容器有几个优点:

预配置环境:Ultralytics 团队维护专门为不同 Jetpack 版本设计的Docker 镜像

GPU 兼容性:这些容器附带 PyTorch 版本,这些版本经过正确编译,可利用 Jetson 的 GPU

隔离:您的部署与系统保持隔离,从而防止发生冲突

可重复性:同一个容器将在具有相同 Jetpack 版本的不同 Jetson 设备上一致地工作。

因此,在使用 ssh 协议连接到我们的 Jetson 设备后,我们需要确定哪个 Docker 映像与我们的 Jetpack 版本匹配,如果您遵循这个问题,这很容易。然后我们必须克隆我们将在本教程中使用的存储库。

https://github.com/hdnh2006/ultralyticsAPI.git

对于 Jetpack 5.x,我们将使用:

git clone https://github.com/hdnh2006/ultralyticsAPI.gitt=ultralytics/ultralytics:latest-jetson-jetpack5 &&sudo docker pull $t &&sudo docker run -it --nerwork=host --ipc=host --runtime=nvidia -v "$(pwd)/ultralyticsAPI:/ultralyticsAPI" $t

在这个容器中,PyTorch 已经正确配置为与 Jetson 的 GPU 一起工作,你可以通过运行一个简单的推理来验证这一点:

cd /ultralyticsAPIyolo predict detect

你会看到类似这样的内容:

root@JetsonXavierNX:/ultralyticsAPI yolo predict detectWARNING ⚠️ 'source' argument is missing, using default 'source=/ultralytics/ultralytics/assets'.Ultralytics 0.3.4  Python-3.8.10 CUDA:0 (Xavier, 6857MB)YOLOv11 summary (fused): 180 layers, 2,616,240 parameters, 0 gradients, 6.5 GFLOPs
image 1/2 /ultralytics/ultralytics/assets/bus.jpg: 640x480 4 persons, 1 bus, 370.8msimage 2/2 /ultralytics/ultralytics/assets/zidane.jpg: 384x640 2 persons, 1 tie, 389.7msSpeed: 95.1ms preprocess, 380.2ms inference, 8.3ms postprocess per image at shape (1, 3, 384, 640)Results saved to /ultralytics/runs/detect/predict2 Learn more at https://docs.ultralytics.com/modes/predict

当推理运行时,您应该看到输出日志中提到的“CUDA”,确认 GPU 正在被利用。

要使用 Flask API,只需运行python3 predict_api.py --weights yolo12s.pt。进入浏览器后,http://nvidiajetsonip:5000 您将看到如下界面:

现在你可以上传视频,你会看到如下内容:

YOLO11 与 YOLOv12:NVIDIA Jetson 上的性能比较

成功使用 Docker 设置环境后,是时候检查 YOLO11 和 YOLOv12 在 NVIDIA Jetson Xavier NX 上的表现了。此比较揭示了一些有关模型效率的有趣见解,这些见解可能与流行的说法相矛盾。

初始基准测试结果

使用相同配置测试两种模型,我们观察到:

YOLOv12-S(未优化):

推理时间:最佳情况下约为 55 毫秒

帧率:~18 FPS

处理时间变化很大(55-200毫秒)

YOLO11-S(未优化):

推理时间:最佳情况下约为 36 毫秒

帧率:~27 FPS

更一致的处理时间

这一点尤其值得注意,因为 YOLOv12 被宣传为比其前代产品更快。然而,我们在 Jetson 设备上进行的实际测试表明,YOLOv11 的性能明显更好——在相同条件下比 YOLOv12 快约 9 FPS。

使用 TensorRT 让您的推理速度加倍

在比较了 YOLO11 和 YOLOv12 的基准性能后,很明显优化对于 NVIDIA Jetson 设备上的实时应用至关重要。这就是NVIDIA TensorRT发挥作用的地方——这是一款功能强大的 SDK,专为优化 NVIDIA 硬件的神经网络模型而设计。

了解 TensorRT 优化

TensorRT不仅仅是一个库;它是一个高性能神经网络推理优化器,可以显著提高推理速度。它的工作原理是:

模型剪枝与权重精度校准

层融合以减少计算开销

针对特定 GPU 架构的内存优化

针对您所使用的硬件进行内核自动调整

TensorRT 的主要优势在于它可以根据模型运行的具体 GPU 来定制模型。缺点是什么?针对一台设备优化的模型无法转移到另一台设备 — 它是专门为您的硬件编译的。

将 YOLO 导出到 TensorRT

值得庆幸的是,Ultralytics 使曾经复杂的 TensorRT 转换过程变得非常简单。以下是如何将 YOLO 模型导出为 TensorRT 格式:

yolo export format=engine imgsz=480,640 half=True simplify=True device=0 batch=1 model=yolo11s.pt

参数解释:

format=engine:指定 TensorRT 作为输出格式

imgsz=480,640:设置输入图像尺寸(高度、宽度)

half=True:启用 FP16 精度以实现更快的推理

simplify=True:使用微软的 ONNX 简化来精简模型架构

device=0:针对 GPU

batch=1:针对单幅图像处理进行优化(适合实时应用)

model=yolo11s.pt:需要优化的模型。

此导出过程计算量很大,尤其是在 Jetson 设备上。在我们使用 Jetson Xavier NX 进行的测试中,总导出时间约为 34 分钟(2,057 秒)

对于 YOLO-X 变体等较大的模型,这个过程可能需要更长的时间。不过,这种一次性投资可以带来显著的性能提升。

加速结果

经过TensorRT优化后,我们再次对YOLO11-S进行了测试,结果非常出色:

YOLOv11-S(TensorRT 之前):

~27 帧每秒

处理时间变化很大(30-200毫秒)

YOLOv11-S(带有 TensorRT):

~55 帧每秒

处理时间始终保持在 20 毫秒以下

偶尔会飙升至 43 毫秒,但总体而言更加稳定

这意味着仅用几行代码就能使性能提高 100%!

结 论

我们在 NVIDIA Jetson 设备上部署 YOLO 模型的过程揭示了挑战传统观点的重要见解。虽然 YOLOv12 被誉为新的最先进模型,但我们的实际测试表明,YOLO11 在 NVIDIA Jetson 硬件上的表现实际上优于它——提供约 27 FPS,而 YOLOv12 为 18 FPS。这凸显了已发布的基准测试通常反映特定硬件配置的性能,而这些性能可能无法转化为边缘设备部署。

最重要的发现是 TensorRT 优化带来的变革性效果,它将我们的推理速度从 27 FPS 提高到 55 FPS,同时保持了检测准确率。此优化步骤与 Docker 容器相结合,解决了 ARM 架构兼容性难题,为希望在边缘设备上部署计算机视觉模型的从业者提供了一条清晰的途径。随着 YOLO 架构的不断发展,成功的边缘部署将需要理论理解和实际工程知识,而对目标硬件进行严格测试对于实现最佳性能仍然至关重要。

相关推荐