跳至内容

快速入门指南:英伟达™ Jetson®处理器Ultralytics YOLOv8

本综合指南提供了在英伟达 Jetson设备上部署Ultralytics YOLOv8 的详细攻略。此外,它还展示了性能基准,以证明YOLOv8 在这些小巧而功能强大的设备上的性能。

英伟达™ Jetson™ 生态系统

备注

本指南使用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 设备有几种不同的方法。

  1. 如果你拥有官方的英伟达开发套件(如 Jetson Orin Nano 开发套件),可以访问此链接下载映像,并准备一张装有 JetPack 的 SD 卡以启动设备。
  2. 如果您拥有其他英伟达™(NVIDIA®)开发套件,可以访问此链接,使用SDK 管理器将 JetPack 闪存到设备。
  3. 如果你拥有 Seeed Studio reComputer J4012 设备,可以访问此链接将 JetPack 闪存到附带的固态硬盘中。
  4. 如果您拥有任何其他由英伟达™(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 设备中获得最高性能。

  1. 更新软件包列表,安装 pip 并升级到最新版本

    sudo apt update
    sudo apt install python3-pip -y
    pip install -U pip
    
  2. 安装 ultralytics pip 软件包与可选依赖项

    pip install ultralytics[export]
    
  3. 重启设备

    sudo reboot
    

安装PyTorch 和 Torchvision

上述ultralytics 安装程序将安装Torch 和 Torchvision。但是,通过 pip 安装的这两个软件包无法在基于 ARM64 架构的 Jetson 平台上兼容运行。因此,我们需要手动安装预编译的PyTorch pip wheel,并从源代码编译/安装 Torchvision。

  1. 卸载当前安装的PyTorch 和 Torchvision

    pip uninstall torch torchvision
    
  2. 根据 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
    
  3. 根据PyTorch v2.1.0 安装 Torchvision v0.16.2

    sudo apt install -y libjpeg-dev zlib1g-dev
    git clone https://github.com/pytorch/vision torchvision
    cd torchvision
    git checkout v0.16.2
    python3 setup.py install --user
    

请访问PyTorch for Jetson 页面,访问针对不同 JetPack 版本的所有不同版本的PyTorch 。有关PyTorch Torchvision 兼容性的更详细列表,请访问PyTorch 和 Torchvision 兼容性页面

安装 onnxruntime-gpu

"(《世界人权宣言》) onnxruntime-gpu 在 PyPI 中托管的软件包没有 aarch64 二进制文件。因此,我们需要手动安装这个软件包。某些输出需要这个软件包。

所有不同 onnxruntime-gpu 列出了不同 JetPack 和Python 版本对应的软件包 这里.不过,在这里我们将下载并安装 onnxruntime-gpu 1.17.0Python3.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')
# Export a YOLOv8n PyTorch model to TensorRT format
yolo export model=yolov8n.pt format=engine  # creates 'yolov8n.engine'

# Run inference with the exported model
yolo predict model=yolov8n.engine source='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,性能不如上述三种。您可以在本图表后的部分找到所有输出的基准测试。

英伟达™ Jetson™ 生态系统

详细对照表

下表列出了 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 基准,请运行此代码:

示例

from ultralytics import YOLO

# Load a YOLOv8n PyTorch model
model = YOLO('yolov8n.pt')

# Benchmark YOLOv8n speed and accuracy on the COCO8 dataset for all all export formats
results = model.benchmarks(data='coco8.yaml', imgsz=640)
# Benchmark YOLOv8n speed and accuracy on the COCO8 dataset for all all export formats
yolo benchmark model=yolov8n.pt data=coco8.yaml imgsz=640

请注意,基准测试结果可能会因系统的具体硬件和软件配置以及运行基准测试时系统的当前工作量而有所不同。为获得最可靠的结果,请使用包含大量图像的数据集,即 data='coco8.yaml' (4 val images), ordata='coco.yaml'` (5000 val images)。

使用英伟达™ Jetson 时的最佳实践

在使用英伟达™(NVIDIA®)Jetson 时,需要遵循一些最佳实践,以便在运行YOLOv8 的英伟达™(NVIDIA®)Jetson 上实现最高性能。

  1. 启用 MAX 功率模式

    在 Jetson 上启用 MAX Power 模式将确保所有 CPU 和 GPU 内核都处于开启状态。

    sudo nvpmodel -m 0
    
  2. 启用 Jetson 时钟

    启用 Jetson Clocks 可确保所有 CPU 和 GPU 内核都以最高频率运行。

    sudo jetson_clocks
    
  3. 安装 Jetson Stats 应用程序

    我们可以使用 jetson stats 应用程序监控系统组件的温度,检查其他系统细节,如查看 CPU、GPU、RAM 利用率,更改电源模式,设置为最大时钟,检查 JetPack 信息等。

    sudo apt update
    sudo pip install jetson-stats
    sudo reboot
    jtop
    

杰特森统计

下一步工作

恭喜您在 NVIDIA Jetson 上成功设置YOLOv8 !如需进一步学习和支持,请访问Ultralytics YOLOv8 Docs 获取更多指南!



创建于 2024-04-02,更新于 2024-05-08
作者:Burhan-Q(2),lakshanthad(2),glenn-jocher(2)

评论