快速入门指南:英伟达™ Jetson®处理器Ultralytics YOLOv8
本综合指南提供了在英伟达 Jetson设备上部署Ultralytics YOLOv8 的详细攻略。此外,它还展示了性能基准,以证明YOLOv8 在这些小巧而功能强大的设备上的性能。
备注
本指南使用Seeed Studio reComputer J4012进行测试,它基于运行最新稳定JetPack版本JP5.1.3的NVIDIA Jetson Orin NX 16GB。对于较旧的 Jetson 设备,如 Jetson Nano(仅支持 JP4.6.4 之前的版本),可能无法保证使用本指南。不过,本指南有望在所有运行 JP5.1.3 的 Jetson Orin、Xavier NX 和 AGX Xavier 设备上运行。
什么是 NVIDIA Jetson?
英伟达™(NVIDIA®)Jetson 是一系列嵌入式计算板卡,旨在为边缘设备带来加速的 AI(人工智能)计算。这些小巧而功能强大的设备围绕英伟达™(NVIDIA®)的GPU架构打造,能够直接在设备上运行复杂的人工智能算法和深度学习模型,而无需依赖云计算资源。Jetson 板卡通常用于机器人、自动驾驶汽车、工业自动化和其他需要在本地以低延迟和高效率执行人工智能推理的应用中。此外,这些板卡基于 ARM64 架构,与传统 GPU 计算设备相比运行功耗更低。
英伟达 Jetson 系列对比
Jetson Orin是英伟达 Jetson 系列的最新迭代产品,基于英伟达安培架构,与前几代产品相比,人工智能性能大幅提升。下表比较了生态系统中的几款 Jetson 设备。
Jetson AGX Orin 64GB | Jetson Orin NX 16GB | Jetson Orin Nano 8GB | Jetson AGX Xavier | Jetson Xavier NX | Jetson Nano | |
---|---|---|---|---|---|---|
人工智能性能 | 275 TOPS | 100 TOPS | 40 TOPs | 32 TOPS | 21 TOPS | 472 GFLOPS |
GPU | 2048 核英伟达安培架构 GPU,64 个Tensor 内核 | 1024 核英伟达安培架构图形处理器,配备 32 个Tensor 内核 | 1024 核英伟达安培架构图形处理器,配备 32 个Tensor 内核 | 512 核英伟达 Volta 架构 GPU,64 个Tensor 内核 | 384 核英伟达 Volta™ 架构 GPU,配备 48 个Tensor 内核 | 128 核英伟达™(NVIDIA®)Maxwell™ 架构图形处理器 |
图形处理器最高频率 | 1.3 千兆赫 | 918 兆赫 | 625 兆赫 | 1377 兆赫 | 1100 兆赫 | 921MHz |
中央处理器 | 12 核 NVIDIA Arm® Cortex A78AE v8.2 64 位 CPU 3MB L2 + 6MB L3 | 8 核 NVIDIA Arm® Cortex A78AE v8.2 64 位 CPU 2MB L2 + 4MB L3 | 6 核 Arm® Cortex®-A78AE v8.2 64 位 CPU 1.5MB L2 + 4MB L3 | 8 核 NVIDIA Carmel Arm®v8.2 64 位 CPU 8MB L2 + 4MB L3 | 6 核 NVIDIA Carmel Arm®v8.2 64 位 CPU 6MB L2 + 4MB L3 | 四核 Arm® Cortex®-A57 MPCore 处理器 |
CPU 最高频率 | 2.2 千兆赫 | 2.0 千兆赫 | 1.5 千兆赫 | 2.2 千兆赫 | 1.9 千兆赫 | 1.43GHz |
内存 | 64GB 256 位 LPDDR5 204.8GB/s | 16GB 128 位 LPDDR5 102.4GB/s | 8GB 128 位 LPDDR5 68 GB/s | 32GB 256 位 LPDDR4x 136.5GB/s | 8GB 128 位 LPDDR4x 59.7GB/s | 4GB 64 位 LPDDR4 25.6GB/s" |
如需更详细的比较表,请访问NVIDIA Jetson 官方网页的技术规格部分。
什么是 NVIDIA JetPack?
英伟达™(NVIDIA®)JetPack SDK为Jetson模块提供动力,是最全面的解决方案,为构建端到端加速人工智能应用提供了完整的开发环境,缩短了产品上市时间。JetPack 包括带有引导加载器的 Jetson Linux、Linux 内核、Ubuntu 桌面环境以及一整套用于加速 GPU 计算、多媒体、图形和计算机视觉的库。它还包括用于主机和开发者工具包的示例、文档和开发者工具,并支持更高级别的 SDK,如用于流媒体视频分析的 DeepStream、用于机器人技术的 Isaac 和用于对话式人工智能的 Riva。
将 Flash JetPack 插入英伟达™ Jetson
拿到 NVIDIA Jetson 设备后,第一步就是将 NVIDIA JetPack 闪存到设备上。闪存英伟达™ Jetson 设备有几种不同的方法。
- 如果你拥有官方的英伟达开发套件(如 Jetson Orin Nano 开发套件),可以访问此链接下载映像,并准备一张装有 JetPack 的 SD 卡以启动设备。
- 如果您拥有其他英伟达™(NVIDIA®)开发套件,可以访问此链接,使用SDK 管理器将 JetPack 闪存到设备。
- 如果你拥有 Seeed Studio reComputer J4012 设备,可以访问此链接将 JetPack 闪存到附带的固态硬盘中。
- 如果您拥有任何其他由英伟达™(NVIDIA®)Jetson 模块驱动的第三方设备,建议访问此链接进行命令行闪存。
备注
对于上述方法 3 和 4,在刷新系统并启动设备后,请在设备终端输入 "sudo apt update && sudo apt install nvidia-jetpack-y",以安装所需的所有剩余 JetPack 组件。
设置Ultralytics
在英伟达™(NVIDIA®)Jetson 上设置Ultralytics 软件包以构建下一个计算机视觉项目有两种方法。您可以任选其一。
从 Docker 开始
在英伟达™(NVIDIA®)Jetson 上开始使用Ultralytics YOLOv8 的最快方法是使用为 Jetson 预制的 docker 镜像。
执行下面的命令调出 Docker 容器并在 Jetson 上运行。这是基于l4t-pytorch的 docker 映像,其中包含 Python3 环境中的PyTorch 和 Torchvision。
t=ultralytics/ultralytics:latest-jetson && sudo docker pull $t && sudo docker run -it --ipc=host --runtime=nvidia $t
完成上述操作后,跳转至在 NVIDIA Jetson 上使用TensorRT 部分。
不使用 Docker 启动
安装Ultralytics 软件包
在这里,我们将在 Jetson 上安装 ultralyics 软件包和可选依赖项,以便将PyTorch 模型导出为其他不同格式。我们将主要关注英伟达TensorRT 导出,因为 TensoRT 将确保我们能从 Jetson 设备中获得最高性能。
-
更新软件包列表,安装 pip 并升级到最新版本
-
安装
ultralytics
pip 软件包与可选依赖项 -
重启设备
安装PyTorch 和 Torchvision
上述ultralytics 安装程序将安装Torch 和 Torchvision。但是,通过 pip 安装的这两个软件包无法在基于 ARM64 架构的 Jetson 平台上兼容运行。因此,我们需要手动安装预编译的PyTorch pip wheel,并从源代码编译/安装 Torchvision。
-
卸载当前安装的PyTorch 和 Torchvision
-
根据 JP5.1.3 安装PyTorch 2.1.0
sudo apt-get install -y libopenblas-base libopenmpi-dev wget https://developer.download.nvidia.com/compute/redist/jp/v512/pytorch/torch-2.1.0a0+41361538.nv23.06-cp38-cp38-linux_aarch64.whl -O torch-2.1.0a0+41361538.nv23.06-cp38-cp38-linux_aarch64.whl pip install torch-2.1.0a0+41361538.nv23.06-cp38-cp38-linux_aarch64.whl
-
根据PyTorch v2.1.0 安装 Torchvision v0.16.2
请访问PyTorch for Jetson 页面,访问针对不同 JetPack 版本的所有不同版本的PyTorch 。有关PyTorch和 Torchvision 兼容性的更详细列表,请访问PyTorch 和 Torchvision 兼容性页面。
安装 onnxruntime-gpu
"(《世界人权宣言》) onnxruntime-gpu 在 PyPI 中托管的软件包没有 aarch64
二进制文件。因此,我们需要手动安装这个软件包。某些输出需要这个软件包。
所有不同 onnxruntime-gpu
列出了不同 JetPack 和Python 版本对应的软件包 这里.不过,在这里我们将下载并安装 onnxruntime-gpu 1.17.0
与 Python3.8
支持我们在本指南中使用的 JetPack。
wget https://nvidia.box.com/shared/static/zostg6agm00fb6t5uisw51qi6kpcuwzd.whl -O onnxruntime_gpu-1.17.0-cp38-cp38-linux_aarch64.whl
pip install onnxruntime_gpu-1.17.0-cp38-cp38-linux_aarch64.whl
备注
onnxruntime-gpu
会自动将 numpy 恢复到最新版本。因此,我们需要重新安装 numpy 到 1.23.5
通过执行
pip install numpy==1.23.5
在 NVIDIA Jetson 上使用TensorRT
在Ultralytics 支持的所有模型导出格式中,TensorRT 在使用英伟达 Jetson 设备时推理性能最佳,我们建议在使用 Jetson 时使用TensorRT 。我们还在此处提供了有关TensorRT 的详细文档。
将模型转换为TensorRT 并运行推理
PyTorch 格式的YOLOv8n 模型转换为TensorRT 格式,以便使用导出的模型进行推理。
示例
from ultralytics import YOLO
# Load a YOLOv8n PyTorch model
model = YOLO('yolov8n.pt')
# Export the model
model.export(format='engine') # creates 'yolov8n.engine'
# Load the exported TensorRT model
trt_model = YOLO('yolov8n.engine')
# Run inference
results = trt_model('https://ultralytics.com/images/bus.jpg')
备注
访问 "导出 "页面,获取将模型导出为不同模型格式时的其他参数
英伟达 Jetson OrinYOLOv8 基准测试
YOLOv8 Ultralytics 团队在 10 种不同的模型格式上运行了基准测试,测量速度和精度: , , , , , , , Lite, , 。基准测试在搭载 Jetson Orin NX 16GB 设备的 Seeed Studio reComputer J4012 上运行,精度为 FP32,默认输入图像大小为 640。PyTorch TorchScript ONNX OpenVINO TensorRT TF SavedModel TF Graphdef TF PaddlePaddle NCNN
对比图表
尽管所有输出模型都使用英伟达™(NVIDIA®)Jetson® 处理器,但我们只将PyTorch, TorchScript, TensorRT 列入下面的比较图表中,因为它们使用了 Jetson® 处理器上的 GPU,并保证能产生最佳效果。其他所有输出都只使用 CPU,性能不如上述三种。您可以在本图表后的部分找到所有输出的基准测试。
详细对照表
下表列出了 10 种不同格式(PyTorch,TorchScript,ONNX,OpenVINO,TensorRT,TF SavedModel ,TF Graphdef ,TF Lite,PaddlePaddle,NCNN )的 5 种不同模型(YOLOv8n,YOLOv8s,YOLOv8m,YOLOv8l,YOLOv8x )的基准结果,并给出了每种组合的状态、大小、mAP50-95(B) 指标和推理时间。
性能
格式 | 现状 | 磁盘大小(MB) | mAP50-95(B) | 推理时间(毫秒/分钟) |
---|---|---|---|---|
PyTorch | ✅ | 6.2 | 0.6381 | 14.3 |
TorchScript | ✅ | 12.4 | 0.6117 | 13.3 |
ONNX | ✅ | 12.2 | 0.6092 | 70.6 |
OpenVINO | ✅ | 12.3 | 0.6092 | 104.2 |
TensorRT | ✅ | 13.6 | 0.6117 | 8.9 |
TF SavedModel | ✅ | 30.6 | 0.6092 | 141.74 |
TF GraphDef | ✅ | 12.3 | 0.6092 | 199.93 |
TF 轻型 | ✅ | 12.3 | 0.6092 | 349.18 |
PaddlePaddle | ✅ | 24.4 | 0.6030 | 555 |
NCNN | ✅ | 12.2 | 0.6092 | 32 |
格式 | 现状 | 磁盘大小(MB) | mAP50-95(B) | 推理时间(毫秒/分钟) |
---|---|---|---|---|
PyTorch | ✅ | 21.5 | 0.6967 | 18 |
TorchScript | ✅ | 43.0 | 0.7136 | 23.81 |
ONNX | ✅ | 42.8 | 0.7136 | 185.55 |
OpenVINO | ✅ | 42.9 | 0.7136 | 243.97 |
TensorRT | ✅ | 44.0 | 0.7136 | 14.82 |
TF SavedModel | ✅ | 107 | 0.7136 | 260.03 |
TF GraphDef | ✅ | 42.8 | 0.7136 | 423.4 |
TF 轻型 | ✅ | 42.8 | 0.7136 | 1046.64 |
PaddlePaddle | ✅ | 85.5 | 0.7140 | 1464 |
NCNN | ✅ | 42.7 | 0.7200 | 63 |
格式 | 现状 | 磁盘大小(MB) | mAP50-95(B) | 推理时间(毫秒/分钟) |
---|---|---|---|---|
PyTorch | ✅ | 49.7 | 0.7370 | 36.4 |
TorchScript | ✅ | 99.2 | 0.7285 | 53.58 |
ONNX | ✅ | 99 | 0.7280 | 452.09 |
OpenVINO | ✅ | 99.1 | 0.7280 | 544.36 |
TensorRT | ✅ | 100.3 | 0.7285 | 33.21 |
TF SavedModel | ✅ | 247.5 | 0.7280 | 543.65 |
TF GraphDef | ✅ | 99 | 0.7280 | 906.63 |
TF 轻型 | ✅ | 99 | 0.7280 | 2758.08 |
PaddlePaddle | ✅ | 197.9 | 0.7280 | 3678 |
NCNN | ✅ | 98.9 | 0.7260 | 135 |
格式 | 现状 | 磁盘大小(MB) | mAP50-95(B) | 推理时间(毫秒/分钟) |
---|---|---|---|---|
PyTorch | ✅ | 83.7 | 0.7768 | 61.3 |
TorchScript | ✅ | 167.2 | 0.7554 | 87.9 |
ONNX | ✅ | 166.8 | 0.7551 | 852.29 |
OpenVINO | ✅ | 167 | 0.7551 | 1012.6 |
TensorRT | ✅ | 168.4 | 0.7554 | 51.23 |
TF SavedModel | ✅ | 417.2 | 0.7551 | 990.45 |
TF GraphDef | ✅ | 166.9 | 0.7551 | 1649.86 |
TF 轻型 | ✅ | 166.9 | 0.7551 | 5652.37 |
PaddlePaddle | ✅ | 333.6 | 0.7551 | 7114.67 |
NCNN | ✅ | 166.8 | 0.7685 | 231.9 |
格式 | 现状 | 磁盘大小(MB) | mAP50-95(B) | 推理时间(毫秒/分钟) |
---|---|---|---|---|
PyTorch | ✅ | 130.5 | 0.7759 | 93 |
TorchScript | ✅ | 260.7 | 0.7472 | 135.1 |
ONNX | ✅ | 260.4 | 0.7479 | 1296.13 |
OpenVINO | ✅ | 260.6 | 0.7479 | 1502.15 |
TensorRT | ✅ | 261.8 | 0.7469 | 84.53 |
TF SavedModel | ✅ | 651.1 | 0.7479 | 1451.76 |
TF GraphDef | ✅ | 260.5 | 0.7479 | 4029.36 |
TF 轻型 | ✅ | 260.4 | 0.7479 | 8772.86 |
PaddlePaddle | ✅ | 520.8 | 0.7479 | 10619.53 |
NCNN | ✅ | 260.4 | 0.7646 | 376.38 |
请访问此链接,查看 Seeed Studio 在不同版本的英伟达™(NVIDIA®)Jetson 硬件上运行的更多基准测试结果。
复制我们的结果
要在所有导出格式上重现上述Ultralytics 基准,请运行此代码:
示例
请注意,基准测试结果可能会因系统的具体硬件和软件配置以及运行基准测试时系统的当前工作量而有所不同。为获得最可靠的结果,请使用包含大量图像的数据集,即 data='coco8.yaml' (4 val images), or
data='coco.yaml'` (5000 val images)。
使用英伟达™ Jetson 时的最佳实践
在使用英伟达™(NVIDIA®)Jetson 时,需要遵循一些最佳实践,以便在运行YOLOv8 的英伟达™(NVIDIA®)Jetson 上实现最高性能。
-
启用 MAX 功率模式
在 Jetson 上启用 MAX Power 模式将确保所有 CPU 和 GPU 内核都处于开启状态。
-
启用 Jetson 时钟
启用 Jetson Clocks 可确保所有 CPU 和 GPU 内核都以最高频率运行。
-
安装 Jetson Stats 应用程序
我们可以使用 jetson stats 应用程序监控系统组件的温度,检查其他系统细节,如查看 CPU、GPU、RAM 利用率,更改电源模式,设置为最大时钟,检查 JetPack 信息等。
下一步工作
恭喜您在 NVIDIA Jetson 上成功设置YOLOv8 !如需进一步学习和支持,请访问Ultralytics YOLOv8 Docs 获取更多指南!