TAO v5.5.0

将 TAO 模型集成到 DeepStream

您训练的深度学习和计算机视觉模型可以部署在边缘设备(如 Jetson Xavier 或 Jetson Nano)、独立 GPU 或 NVIDIA GPU 云端。TAO 旨在与 DeepStream SDK 集成,因此使用 TAO 训练的模型可以与 DeepStream SDK 开箱即用。

DeepStream SDK 是一种流分析工具包,用于加速构建基于 AI 的视频分析应用程序。本节将介绍如何将您训练的模型部署到 DeepStream SDK。

要将 TAO 训练的模型部署到 DeepStream,我们有两种选择

  • 选项 1:将 .etlt 模型直接集成到 DeepStream 应用程序中。模型文件由导出生成。

  • 选项 2:使用 TAO Deploy 生成特定于设备的优化 TensorRT 引擎。生成的 TensorRT 引擎文件也可以被 DeepStream 摄取。

  • 选项 3(x86 设备已弃用): 使用 TAO Converter 生成特定于设备的优化 TensorRT 引擎。

特定于机器的优化在引擎创建过程中完成,因此应为每个环境和硬件配置生成不同的引擎。如果推理环境的 TensorRT 或 CUDA 库已更新(包括次要版本更新),或者如果生成了新模型,则需要生成新引擎。不支持运行使用不同版本的 TensorRT 和 CUDA 生成的引擎,这将导致影响推理速度、准确性和稳定性的未知行为,或者可能根本无法运行。

选项 1 非常简单。.etlt 文件和校准缓存由 DeepStream 直接使用。DeepStream 将自动生成 TensorRT 引擎文件,然后运行推理。TensorRT 引擎生成可能需要一些时间,具体取决于模型大小和硬件类型。

引擎生成可以提前完成,使用选项 2:TAO Deploy 用于将 .etlt 文件转换为 TensorRT;然后将此文件直接提供给 DeepStream。TAO Deploy 工作流程类似于 TAO Converter,后者已从 TAO 4.0.x 版本开始弃用于 x86 设备,但仍是部署到 Jetson 设备所必需的。

有关如何导出 TAO 模型的更多详细信息,请参阅导出模型部分。

tao_overview.png

下表列出了 TAO 中支持的各种开放架构以及与相应版本的 DeepStream SDK 部署的 TAO 预训练模型的兼容性。

开放模型部署

模型

模型输出格式

可剪枝

INT8

与 DS5.1 兼容

与 DS6.0 兼容

需要 TRT-OSS

图像分类 加密 UFF
多任务分类 加密 UFF
DetectNet_v2 加密 UFF
EfficientDet 加密 ONNX
FasterRCNN 加密 UFF
SSD 加密 UFF
YOLOv3 加密 ONNX 是(使用 TRT 7.1)
YOLOv4 加密 ONNX 是(使用 TRT 7.1)
YOLOv4-tiny 加密 ONNX 是(使用 TRT 7.1)
DSSD 加密 UFF
RetinaNet 加密 UFF
MaskRCNN 加密 UFF
UNET 加密 ONNX
字符识别 加密 ONNX
PointPillars 加密 ONNX
预训练模型部署

模型名称

模型架构

模型输出格式

可剪枝

INT8

与 DS5.1 兼容

与 DS6.0 兼容

需要 TRT-OSS

PeopleNet DetectNet_v2 加密 UFF
TrafficCamNet DetectNet_v2 加密 UFF
DashCamNet DetectNet_v2 加密 UFF
FaceDetect-IR DetectNet_v2 加密 UFF
FaceDetect DetectNet_v2 加密 UFF
VehicleMakeNet 图像分类 加密 UFF
VehicleTypeNet 图像分类 加密 UFF
LPDNet DetectNet_v2 加密 UFF
LPRNet 字符识别 加密 ONNX
PeopleSegNet MaskRCNN 加密 UFF
PeopleSemSegNet UNET 加密 ONNX
BodyPoseNet 带有自定义细化阶段的 VGG Backbone 加密 ONNX
EmotionNet 5 个全连接层 加密 ONNX
FPENet Recombinator networks 加密 ONNX
GazeNet 基于四分支 AlexNet 的模型 加密 ONNX
GestureNet ResNet18 加密 ONNX
HeartRateNet 带有注意力的双分支模型 加密 ONNX
Action Recognition Net Action Recognition Net 加密 ONNX
OCDNet 光学字符检测 ONNX
OCRNet 光学字符识别 ONNX
光学检测 光学检测 ONNX
PCBInspection 图像分类 ONNX
零售对象识别 度量学习识别 ONNX
注意

由于 TensorRT API 在版本 8.0.x7.2.x 之间发生了更改,因此使用 TAO 3.0-21.11+ 中的 export 任务生成的部署模型只能在 DeepStream 6.0 版本中部署。为了部署与 DeepStream 5.1 表中兼容的模型,您需要使用 TAO 3.0-21.08 软件包运行相应的 tao model <model> export 任务,以重新生成与 TensorRT 7.2 兼容的部署模型和校准缓存文件。

同样,如果您有一个使用 TAO 3.0-21.08 软件包训练的模型,并且想要部署到 DeepStream 6.0,请使用 TAO 3.0-21.11+ 中的相应 tao model <model> export 任务重新生成可部署的 model.etlt 和 int8 校准文件。

TAO 3.0-21.11+ 是使用 TensorRT 8.0.1.6 构建的。

ds_tao_interoperability.png

TAO -> DeepStream 版本互操作性

要降级到 3.0-21.08 或 3.0-21.11 软件包,请按照快速入门指南中的说明实例化新的虚拟环境,并运行以下命令

复制
已复制!
            

pip3 install nvidia-pyindex pip3 install nvidia-tao==0.1.19 # for 3.0-21.08 pip3 install nvidia-tao==0.1.20 # for 3.0-21.11

请按照以下说明将 TAO 模型部署到 DeepStream。

  1. 为 Jetson 设备安装 Jetpack 4.6

    注意:对于 Jetson 设备,使用以下命令手动增加 Jetson 功率模式,并通过使用 Jetson 时钟模式 进一步最大化性能

    复制
    已复制!
                

    sudo nvpmodel -m 0 sudo /usr/bin/jetson_clocks

  1. 安装 Deepstream

以下文件是使用 Deepstream 运行每个 TAO 模型所必需的

  • ds_tlt.c:应用程序主文件

  • nvdsinfer_custombboxparser_tlt:推理结束节点上的自定义解析器函数

  • 模型:来自 NGC 的 TAO 模型

  • 模型配置文件:Deepstream 推理配置文件

我们在 GitHub 上提供了几个参考应用程序。

YOLOv3/YOLOv4/YOLOv4-tiny、FasterRCNN、SSD/DSSD、RetinaNet、EfficientDet、MaskRCNN、UNet 的参考应用程序 - DeepStream TAO 参考应用程序

车牌检测和识别的参考应用程序 - DeepStream LPR 应用程序

预训练模型 - 车牌检测 (LPDNet) 和识别 (LPRNet)

以下步骤概述了如何运行车牌检测和识别应用程序:DeepStream LPR 应用程序

下载存储库

复制
已复制!
            

git clone https://github.com/NVIDIA-AI-IOT/deepstream_lpr_app.git

下载模型

复制
已复制!
            

cd deepstream_lpr_app mkdir -p ./models/tlt_pretrained_models/trafficcamnet cd ./models/tlt_pretrained_models/trafficcamnet wget https://api.ngc.nvidia.com/v2/models/nvidia/tao/trafficcamnet/versions/pruned_v1.0/files/trafficnet_int8.txt wget https://api.ngc.nvidia.com/v2/models/nvidia/tao/trafficcamnet/versions/pruned_v1.0/files/resnet18_trafficcamnet_pruned.etlt cd - mkdir -p ./models/LP/LPD cd ./models/LP/LPD wget https://api.ngc.nvidia.com/v2/models/nvidia/tao/lpdnet/versions/pruned_v1.0/files/usa_pruned.etlt wget https://api.ngc.nvidia.com/v2/models/nvidia/tao/lpdnet/versions/pruned_v1.0/files/usa_lpd_cal.bin wget https://api.ngc.nvidia.com/v2/models/nvidia/tao/lpdnet/versions/pruned_v1.0/files/usa_lpd_label.txt cd - mkdir -p ./models/LP/LPR cd ./models/LP/LPR wget https://api.ngc.nvidia.com/v2/models/nvidia/tao/lprnet/versions/deployable_v1.0/files/us_lprnet_baseline18_deployable.etlt touch labels_us.txt cd -

将模型转换为 TRT 引擎

请参阅 TAO Converter 部分。

复制
已复制!
            

./tao-converter -k nvidia_tlt -p image_input,1x3x48x96,4x3x48x96,16x3x48x96 models/LP/LPR/us_lprnet_baseline18_deployable.etlt -t fp16 -e models/LP/LPR/lpr_us_onnx_b16.engine

构建和运行

复制
已复制!
            

make cd deepstream-lpr-app

用于美国车牌识别

复制
已复制!
            

cp dict_us.txt dict.txt

开始运行应用程序

复制
已复制!
            

./deepstream-lpr-app <1:US car plate model|2: Chinese car plate model> <1: output as h264 file| 2:fakesink 3:display output> [0:ROI disable|1:ROI enable] [input mp4 file path and name] [input mp4 file path and name] ... [input mp4 file path and name] [output 264 file path and name]

有关运行此应用程序的详细说明,请参阅此 GitHub 存储库

预训练模型 - PeopleNet、TrafficCamNet、DashCamNet、FaceDetectIR、Vehiclemakenet、Vehicletypenet、PeopleSegNet、PeopleSemSegNet

PeopleNet

按照以下说明在 DeepStream 中运行 PeopleNet 模型

  1. 下载模型

    复制
    已复制!
                

    mkdir -p $HOME/peoplenet && \ wget https://api.ngc.nvidia.com/v2/models/nvidia/tao/peoplenet/versions/pruned_quantized_v2.3/files/resnet34_peoplenet_pruned_int8.etlt \ -O $HOME/peoplenet/resnet34_peoplenet_pruned_int8.etlt


  2. 运行应用程序

    复制
    已复制!
                

    xhost + docker run --gpus all -it --rm -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY -v $HOME:/opt/nvidia/deepstream/deepstream-6.0/samples/models/tao_pretrained_models \ -w /opt/nvidia/deepstream/deepstream-6.0/samples/configs/tao_pretrained_models nvcr.io/nvidia/deepstream:6.0-samples \ deepstream-app -c deepstream_app_source1_peoplenet.txt


TrafficCamNet

按照以下说明在 DeepStream 中运行 TrafficCamNet 模型

  1. 下载模型

    复制
    已复制!
                

    mkdir -p $HOME/trafficcamnet && \ wget https://api.ngc.nvidia.com/v2/models/nvidia/tao/trafficcamnet/versions/pruned_v1.0/files/resnet18_trafficcamnet_pruned.etlt \ -O $HOME/trafficcamnet/resnet18_trafficcamnet_pruned.etlt && \ wget https://api.ngc.nvidia.com/v2/models/nvidia/tao/trafficcamnet/versions/pruned_v1.0/files/trafficnet_int8.txt \ -O $HOME/trafficcamnet/trafficnet_int8.txt


  2. 运行应用程序

    复制
    已复制!
                

    xhost + docker run --gpus all -it --rm -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY -v $HOME:/opt/nvidia/deepstream/deepstream-6.0/samples/models/tao_pretrained_models \ -w /opt/nvidia/deepstream/deepstream-6.0/samples/configs/tao_pretrained_models nvcr.io/nvidia/deepstream:6.0-samples \ deepstream-app -c deepstream_app_source1_trafficcamnet.txt


DashCamNet + Vehiclemakenet + Vehicletypenet

按照以下说明在 DeepStream 中运行 DashCamNet 模型作为主检测器,Vehiclemakenet 和 Vehicletypenet 作为辅助分类器

  1. 下载模型

    复制
    已复制!
                

    mkdir -p $HOME/dashcamnet && \ wget https://api.ngc.nvidia.com/v2/models/nvidia/tao/dashcamnet/versions/pruned_v1.0/files/resnet18_dashcamnet_pruned.etlt \ -O $HOME/dashcamnet/resnet18_dashcamnet_pruned.etlt && \ wget https://api.ngc.nvidia.com/v2/models/nvidia/tao/dashcamnet/versions/pruned_v1.0/files/dashcamnet_int8.txt \ -O $HOME/dashcamnet/dashcamnet_int8.txt mkdir -p $HOME/vehiclemakenet && \ wget https://api.ngc.nvidia.com/v2/models/nvidia/tao/vehiclemakenet/versions/pruned_v1.0/files/resnet18_vehiclemakenet_pruned.etlt \ -O $HOME/vehiclemakenet/resnet18_vehiclemakenet_pruned.etlt && \ wget https://api.ngc.nvidia.com/v2/models/nvidia/tao/vehiclemakenet/versions/pruned_v1.0/files/vehiclemakenet_int8.txt \ -O $HOME/vehiclemakenet/vehiclemakenet_int8.txt mkdir -p $HOME/vehicletypenet && \ wget https://api.ngc.nvidia.com/v2/models/nvidia/tao/vehicletypenet/versions/pruned_v1.0/files/resnet18_vehicletypenet_pruned.etlt \ -O $HOME/vehicletypenet/resnet18_vehicletypenet_pruned.etlt && \ wget https://api.ngc.nvidia.com/v2/models/nvidia/tao/vehicletypenet/versions/pruned_v1.0/files/vehicletypenet_int8.txt \ -O $HOME/vehicletypenet/vehicletypenet_int8.txt


  2. 运行应用程序

    复制
    已复制!
                

    xhost + docker run --gpus all -it --rm -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY -v $HOME:/opt/nvidia/deepstream/deepstream-6.0/samples/models/tao_pretrained_models \ -w /opt/nvidia/deepstream/deepstream-6.0/samples/configs/tao_pretrained_models nvcr.io/nvidia/deepstream:6.0-samples \ deepstream-app -c deepstream_app_source1_dashcamnet_vehiclemakenet_vehicletypenet.txt


FaceDetectIR

按照以下说明在 DeepStream 中运行 FaceDetectIR 模型

  1. 下载模型

    复制
    已复制!
                

    mkdir -p $HOME/facedetectir && \ wget https://api.ngc.nvidia.com/v2/models/nvidia/tao/facedetectir/versions/pruned_v1.0/files/resnet18_facedetectir_pruned.etlt \ -O $HOME/facedetectir/resnet18_facedetectir_pruned.etlt && \ wget https://api.ngc.nvidia.com/v2/models/nvidia/tao/facedetectir/versions/pruned_v1.0/files/facedetectir_int8.txt \ -O $HOME/facedetectir/facedetectir_int8.txt


  2. 运行应用程序

    复制
    已复制!
                

    xhost + docker run --gpus all -it --rm -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY -v $HOME:/opt/nvidia/deepstream/deepstream-6.0/samples/models/tao_pretrained_models \ -w /opt/nvidia/deepstream/deepstream-6.0/samples/configs/tao_pretrained_models nvcr.io/nvidia/deepstream:6.0-samples \ deepstream-app -c deepstream_app_source1_facedetectir.txt


PeopleSegNet

按照以下说明在 DeepStream 中运行 PeopleSegNet 模型

  1. 下载存储库

    复制
    已复制!
                

    git clone https://github.com/NVIDIA-AI-IOT/deepstream_tlt_apps.git


  2. 下载模型

    复制
    已复制!
                

    ngc registry model download-version "nvidia/tao/peoplesegnet:deployable_v2.0"

    复制
    已复制!
                

    wget --content-disposition https://api.ngc.nvidia.com/v2/models/nvidia/tao/peoplesegnet/versions/deployable_v2.0/zip \ -O peoplesegnet_deployable_v2.0.zip


  3. 构建 TRT OSS 插件

    TRT-OSS 说明在 https://github.com/NVIDIA-AI-IOT/deepstream_tlt_apps/tree/master#1-build-trt-oss-plugin 中提供

  4. 构建应用程序

    复制
    已复制!
                

    export CUDA_VER=xy.z // xy.z is CUDA version, e.g. 10.2 make


  5. 运行应用程序

    复制
    已复制!
                

    SHOW_MASK=1 ./apps/ds-tlt -c configs/peopleSegNet_tlt/pgie_peopleSegNetv2_tlt_config.txt -i \ /opt/nvidia/deepstream/deepstream-5.1/samples/streams/sample_720p.h264 -d


PeopleSemSegNet

按照以下说明在 DeepStream 中运行 PeopleSemSegNet 模型

  1. 下载 tao-converter 和模型

    复制
    已复制!
                

    mkdir $HOME/deepstream cd $HOME/deepstream wget https://developer.nvidia.com/cuda111-cudnn80-trt72 unzip cuda111-cudnn80-trt72 cp cuda11.1_cudnn8.0_trt7.2/tao-converter ./ chmod 0777 tao-converter ngc registry model download-version "nvidia/tao/peoplesemsegnet:deployable_v1.0"


  2. 运行应用程序

    复制
    已复制!
                

    xhost + docker run --gpus all -it --rm -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY -v $HOME:$HOME -w $HOME/deepstream \ nvcr.io/nvidia/deepstream:5.1-21.02-devel ./tao-converter -k tlt_encode -p input_1,1x3x544x960,1x3x544x960,1x3x544x960 -t fp16 -e \ peoplesemsegnet_vdeployable_v1.0/unet_resnet18.etlt_b1_gpu0_fp16.engine peoplesemsegnet_vdeployable_v1.0/peoplesemsegnet.etlt ; \ git clone https://github.com/NVIDIA-AI-IOT/deepstream_tlt_apps.git ; cd deepstream_tlt_apps ; export CUDA_VER=11.1 ; export SHOW_MASK=1 ; make ; \ sed -i "s/..\/..\/models\/unet\/unet_resnet18.etlt_b1_gpu0_fp16.engine/..\/..\/..\/peoplesemsegnet_vdeployable_v1.0\/unet_resnet18.etlt_b1_gpu0_fp16.engine/g" \ configs/unet_tlt/pgie_unet_tlt_config.txt ; sed -i "s/infer-dims=3;608;960/infer-dims=3;544;960/g" configs/unet_tlt/pgie_unet_tlt_config.txt ; \ sed -i "s/unet_labels.txt/..\/..\/..\/peoplesemsegnet_vdeployable_v1.0\/labels.txt/g" configs/unet_tlt/pgie_unet_tlt_config.txt ; \ sed -i "s/num-detected-classes=3/num-detected-classes=2/g" configs/unet_tlt/pgie_unet_tlt_config.txt ; ./apps/ds-tlt -c configs/unet_tlt/pgie_unet_tlt_config.txt \ -i /opt/nvidia/deepstream/deepstream-5.1/samples/streams/sample_720p.h264 -d


预训练模型 - BodyPoseNet、EmotionNet、FPENet、GazeNet、GestureNet、HeartRateNet

  1. 遵循 Deepstream-TAO 其他应用程序 README 的先决条件,例如安装 DeepStream SDK 6.0。

  2. 下载相关平台的 TAO Converter 工具。例如,

    复制
    已复制!
                

    mkdir $HOME/deepstream cd $HOME/deepstream wget https://developer.nvidia.com/cuda111-cudnn80-trt72 unzip cuda111-cudnn80-trt72 cp cuda11.1_cudnn8.0_trt7.2/tao-converter ./ chmod 0777 tao-converter


  3. 下载 Deepstream-TAO 其他应用程序 存储库。

  4. 使用提供的实用程序脚本下载所有预训练模型。这将把 etlt 模型放置在预定位置,以便 DeepStream 配置可以正确找到它们。用自定义模型替换这些模型

    复制
    已复制!
                

    cd deepstream_tao_apps chmod 755 download_models.sh export TAO_CONVERTER=the file path of tao-converter export MODEL_PRECISION=fp16 ./download_models.sh


  5. 按照 Deepstream-TAO 其他应用程序 README 构建和运行示例应用程序。例如,要运行 BodyPoseNet 示例应用程序,

    复制
    已复制!
                

    cd deepstream-bodypose2d-app ./deepstream-bodypose2d-app [1:file sink|2:fakesink|3:display sink] \ <bodypose2d model config file> <input uri> ... <input uri> <out filename>


通用 CV 模型架构 - 分类、对象检测和分割

一个运行分类、对象检测以及语义和实例分割网络的 DeepStream 示例应用程序,以及 TRT-OSS 说明在此处提供。

有关每个单独模型架构的更多信息,请参阅以下部分。

上一步 TRTEXEC 与 Mask Grounding DINO
下一步 部署到 DeepStream 进行分类 TF1/TF2/PyTorch
© 版权所有 2024,NVIDIA。 最后更新于 2024 年 10 月 15 日。