跳至内容

Ultralytics YOLOv8 在 NVIDIA Jetson 上使用 DeepStream SDK 和 TensorRT

本综合指南提供了使用 DeepStream SDK 和TensorRT 在英伟达 Jetson设备上部署Ultralytics YOLOv8 的详细攻略。在此,我们使用TensorRT 来最大限度地提高 Jetson 平台上的推理性能。

NVIDIA Jetson 上的 DeepStream

备注

本指南已在基于NVIDIA Jetson Orin NX 16GB运行JetPack版本JP5.1.3Seeed Studio reComputer J4012和基于NVIDIA Jetson Nano 4GB运行JetPack版本JP4.6.4Seeed Studio reComputer J1020 v2上进行了测试。预计它将适用于所有英伟达™(NVIDIA®)Jetson 硬件阵容,包括最新和传统硬件。

什么是 NVIDIA DeepStream?

英伟达™(NVIDIA®)的DeepStream SDK是基于GStreamer的完整流分析工具包,适用于基于人工智能的多传感器处理、视频、音频和图像理解。它是视觉 AI 开发人员、软件合作伙伴、初创企业和原始设备制造商构建 IVA(智能视频分析)应用和服务的理想选择。现在,您可以创建包含神经网络和其他复杂处理任务(如跟踪、视频编码/解码和视频渲染)的流处理管道。这些管道可对视频、图像和传感器数据进行实时分析。DeepStream 的多平台支持让您可以更快、更轻松地在内部、边缘和云中开发视觉人工智能应用和服务。

先决条件

在开始遵循本指南之前:

提示

在本指南中,我们使用 Debian 软件包方法将 DeepStream SDK 安装到 Jetson 设备。您也可以访问Jetson 上的 DeepStream SDK(已存档),访问 DeepStream 的旧版本。

DeepStream 配置 YOLOv8

在这里,我们使用marcoslucianops/DeepStream-YoloGitHub 存储库,其中包含英伟达 DeepStream SDK 对YOLO 模型的支持。我们对 marcoslucianops 的贡献表示感谢!

  1. 安装依赖项

    pip install cmake
    pip install onnxsim
    
  2. 克隆以下存储库

    git clone https://github.com/marcoslucianops/DeepStream-Yolo
    cd DeepStream-Yolo
    
  3. 下载Ultralytics YOLOv8 检测模型 (.pt) ,请从YOLOv8 版本中选择。这里我们使用yolov8s.pt

    wget https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8s.pt
    

    备注

    您还可以使用自定义训练的YOLOv8 模型

  4. 将模型转换为 ONNX

    python3 utils/export_yoloV8.py -w yolov8s.pt
    

    将以下参数传递给上述命令

    对于 DeepStream 6.0.1,请使用 opset 12 或更低版本。默认操作集为 16。

    --opset 12
    

    更改推理大小(默认:640)

    -s SIZE
    --size SIZE
    -s HEIGHT WIDTH
    --size HEIGHT WIDTH
    

    1280 示例:

    -s 1280
    or
    -s 1280 1280
    

    为了简化 ONNX 模型 (DeepStream >= 6.0)

    --simplify
    

    使用动态批处理大小 (DeepStream >= 6.1)

    --dynamic
    

    使用静态 batch-size(batch-size = 4 的示例)

    --batch 4
    
  5. 根据安装的 JetPack 版本设置 CUDA 版本

    对于 JetPack 4.6.4:

    export CUDA_VER=10.2
    

    对于 JetPack 5.1.3:

    export CUDA_VER=11.4
    
  6. 编译库

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
    
  7. 编辑 config_infer_primary_yoloV8.txt 根据您的模型提交文件(对于 YOLOv8s 有80个班级)

    [property]
    ...
    onnx-file=yolov8s.onnx
    ...
    num-detected-classes=80
    ...
    
  8. 编辑 deepstream_app_config 文件

    ...
    [primary-gie]
    ...
    config-file=config_infer_primary_yoloV8.txt
    
  9. 您还可以更改视频源 deepstream_app_config 文件。这里加载了一个默认的视频文件

    ...
    [source0]
    ...
    uri=file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4
    

运行推理

deepstream-app -c deepstream_app_config.txt

备注

生成 TensorRT 引擎文件,然后开始推理。所以请耐心等待。

YOLOv8 与深流

提示

如果要将模型转换为FP16精度,只需设置 model-engine-file=model_b1_gpu0_fp16.enginenetwork-mode=2 里面 config_infer_primary_yoloV8.txt

INT8 校准

如果要使用 INT8 精度进行推理,需要按照以下步骤操作

  1. 设置 OPENCV 环境变量

    export OPENCV=1
    
  2. 编译库

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
    
  3. 有关 COCO 数据集,请下载 val2017提取,并移至 DeepStream-Yolo 文件夹

  4. 为校准图像创建一个新目录

    mkdir calibration
    
  5. 运行以下命令,从COCO数据集中随机选择1000张图像进行校准

    for jpg in $(ls -1 val2017/*.jpg | sort -R | head -1000); do \
        cp ${jpg} calibration/; \
    done
    

    备注

    英伟达™(NVIDIA®)建议至少使用 500 张图像才能获得较高的精度。在本例中,我们选择了 1000 张图像来获得更高的精度(更多图像 = 更高精度)。您可以从头-1000 开始设置。例如,对于 2000 张图像,头部为 -2000。这个过程可能需要很长时间。

  6. 创建 calibration.txt 包含所有选定图像的文件

    realpath calibration/*jpg > calibration.txt
    
  7. 设置环境变量

    export INT8_CALIB_IMG_PATH=calibration.txt
    export INT8_CALIB_BATCH_SIZE=1
    

    备注

    更高的INT8_CALIB_BATCH_SIZE值将带来更高的精度和更快的校准速度。根据您的GPU内存进行设置。

  8. 更新 config_infer_primary_yoloV8.txt 文件

    来自

    ...
    model-engine-file=model_b1_gpu0_fp32.engine
    #int8-calib-file=calib.table
    ...
    network-mode=0
    ...
    

    ...
    model-engine-file=model_b1_gpu0_int8.engine
    int8-calib-file=calib.table
    ...
    network-mode=1
    ...
    

运行推理

deepstream-app -c deepstream_app_config.txt

多流设置

要在单个 deepstream 应用程序下设置多个流,您可以对 deepstream_app_config.txt 文件

  1. 更改行和列以根据要拥有的流数构建网格显示。例如,对于 4 个流,我们可以添加 2 行和 2 列。

    [tiled-display]
    rows=2
    columns=2
    
  2. 设置 num-sources=4 并添加 uri 所有 4 个流

    [source0]
    enable=1
    type=3
    uri=<path_to_video>
    uri=<path_to_video>
    uri=<path_to_video>
    uri=<path_to_video>
    num-sources=4
    

运行推理

deepstream-app -c deepstream_app_config.txt
多数据流设置

基准测试结果

下表总结了如何 YOLOv8s 模型在不同的性能下 TensorRT 精度级别,输入大小为 640x640,在 NVIDIA Jetson Orin NX 16GB 上。

型号名称 精度 推理时间(毫秒/分钟) FPS
YOLOv8s FP32 15.63 64
FP16 7.94 126
INT8 5.53 181

确认

本指南最初是由我们在 Seeed Studio、Lakshantha 和 Elaine 的朋友创建的。



创建于 2024-07-01,更新于 2024-07-01
作者:lakshanthad(1)

评论