将 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 中支持的各种开放架构以及与相应版本的 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.x
和 7.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 构建的。

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。
为 Jetson 设备安装 Jetpack 4.6。
注意:对于 Jetson 设备,使用以下命令手动增加 Jetson 功率模式,并通过使用 Jetson 时钟模式 进一步最大化性能
sudo nvpmodel -m 0 sudo /usr/bin/jetson_clocks
安装 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 模型
下载模型
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
运行应用程序
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 模型
下载模型
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
运行应用程序
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 作为辅助分类器
下载模型
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
运行应用程序
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 模型
下载模型
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
运行应用程序
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 模型
下载存储库
git clone https://github.com/NVIDIA-AI-IOT/deepstream_tlt_apps.git
下载模型
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
构建 TRT OSS 插件
TRT-OSS 说明在 https://github.com/NVIDIA-AI-IOT/deepstream_tlt_apps/tree/master#1-build-trt-oss-plugin 中提供
构建应用程序
export CUDA_VER=xy.z // xy.z is CUDA version, e.g. 10.2 make
运行应用程序
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 模型
下载 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"
运行应用程序
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
遵循 Deepstream-TAO 其他应用程序 README 的先决条件,例如安装 DeepStream SDK 6.0。
下载相关平台的 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
下载 Deepstream-TAO 其他应用程序 存储库。
使用提供的实用程序脚本下载所有预训练模型。这将把 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
按照 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 说明在此处提供。
有关每个单独模型架构的更多信息,请参阅以下部分。
- 部署到 DeepStream 进行 DetectNet_v2
- 部署到 DeepStream 进行 Deformable DETR
- 部署到 DeepStream 进行 DINO
- 部署到 DeepStream 进行 DSSD
- 部署到 DeepStream 进行 EfficientDet
- 部署到 DeepStream 进行 FasterRCNN
- 部署到 DeepStream 进行 RetinaNet
- 部署到 DeepStream 进行 SSD
- 部署到 DeepStream 进行 YOLOv3
- 部署到 DeepStream 进行 YOLOv4
- 部署到 DeepStream 进行 YOLOv4-tiny