部署到 DeepStream 以进行分类 TF1/TF2/PyTorch
您训练的深度学习和计算机视觉模型可以部署在边缘设备上,例如 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 版本开始弃用,但仍是部署到 Jetson 设备所必需的。
请参阅导出模型部分,了解有关如何导出 TAO 模型的更多详细信息。
为了将模型与 DeepStream 集成,您需要以下内容:
DeepStream SDK。 DeepStream 的安装说明在 DeepStream 开发指南中提供。
导出的
.onnx
模型文件和可选的 INT8 精度校准缓存labels.txt
文件,其中包含类别的标签,标签顺序与网络生成输出的顺序一致。示例
config_infer_*.txt
文件,用于配置 DeepStream 中的 nvinfer 元素。 nvinfer 元素处理与 DeepStream 中的 TensorRT 优化和引擎创建相关的所有内容。
DeepStream SDK 附带一个端到端参考应用程序,该应用程序是完全可配置的。 您可以配置输入源、推理模型和输出接收器。 该应用程序需要一个主要对象检测模型,然后是一个可选的辅助分类模型。 参考应用程序安装为 deepstream-app
。 下图显示了参考应用程序的架构。

此应用程序通常使用两个或多个配置文件。 在安装目录中,配置文件位于 samples/configs/deepstream-app
或 sample/configs/tlt_pretrained_models
中。 主配置文件配置上述管道中的所有高级参数,设置输入源和分辨率、推理数量、跟踪器和输出接收器。 支持配置文件用于每个单独的推理引擎。 推理特定的配置文件用于指定模型、推理分辨率、批量大小、类别数量和其他自定义项。 主配置文件将调用所有支持配置文件。 以下是 samples/configs/deepstream-app
中的一些参考配置文件:
source4_1080p_dec_infer-resnet_tracker_sgie_tiled_display_int8.txt
:主配置文件config_infer_primary.txt
:上述管道中主检测器的支持配置文件config_infer_secondary_*.txt
:上述管道中辅助分类器的支持配置文件
deepstream-app
仅适用于主配置文件。 此文件对于所有模型很可能保持不变,可以直接从 DeepStream SDK 中使用,几乎无需更改。 您只需要修改或创建 config_infer_primary.txt
和 config_infer_secondary_*.txt
。
集成分类模型
请参阅导出模型,了解有关如何导出 TAO 模型的更多详细信息。 生成模型后,还需要两个额外的文件:
标签文件
DeepStream 配置文件
标签文件
标签文件是一个文本文件,其中包含 TAO 模型训练用于分类的类别的名称。 类别列表的顺序必须与模型预测输出的顺序匹配。 此顺序可以从 TAO 生成的 classmap.json
文件中推断出来。 此文件是一个简单的字典,其中包含“class_name”到“index map”。 例如,在 TAO 软件包中包含的示例分类示例笔记本文件中,为 Pascal Visual Object Classes (VOC) 生成的 classmap.json
文件将如下所示:
{"sheep": 16,"horse": 12,"bicycle": 1, "aeroplane": 0, "cow": 9,
"sofa": 17, "bus": 5, "dog": 11, "cat": 7, "person": 14, "train": 18,
"diningtable": 10, "bottle": 4, "car": 6, "pottedplant": 15,
"tvmonitor": 19, "chair": 8, "bird": 2, "boat": 3, "motorbike": 13}
第 0 个索引对应于 aeroplane
,第 1 个索引对应于 bicycle
,依此类推,直到 19,对应于 tvmonitor
。 以下是一个示例 classification_labels.txt
文件,按索引顺序排列:
aeroplane;bicycle;bird;boat;bottle;bus;....;tvmonitor
DeepStream 配置文件
视频分析的典型用例是首先进行对象检测,然后裁剪检测到的对象并将其进一步发送以进行分类。 deepstream-app
支持此功能,并且可以在上面看到应用程序架构。 例如,要对道路上的汽车模型进行分类,首先需要检测帧中的所有汽车。 完成检测后,您将对裁剪后的汽车图像执行分类。 在示例 DeepStream 应用程序中,分类器配置为主要检测之后的辅助推理引擎。 如果配置正确,deepstream-app
将自动裁剪检测到的图像并将帧发送到辅助分类器。 config_infer_secondary_*.txt
用于配置分类模型。
选项 1:将模型 (.onnx
) 直接集成到 DeepStream 应用程序中。 对于此选项,您需要在配置文件中添加以下参数。 int8-calib-file
仅在 INT8 精度时才需要。
onnx-file=<TAO exported .onnx>
int8-calib-file=<Calibration cache file>
从 TAO 5.0.0 开始,.etlt
已弃用。 要将 .etlt
直接集成到 DeepStream 应用程序中,您需要在配置文件中使用以下参数。
tlt-encoded-model=<TAO exported .etlt>
tlt-model-key=<Model export key>
int8-calib-file=<Calibration cache file>
选项 2:将 TensorRT 引擎文件与 DeepStream 应用程序集成。
使用 TAO Deploy 生成特定于设备的 TensorRT 引擎。
生成引擎文件后,修改以下参数以将此引擎与 DeepStream 一起使用:
model-engine-file=<PATH to generated TensorRT engine>
所有其他参数在两种方法之间是通用的。 必须根据训练规范文件中的 preprocessing_mode
更新 net-scale-factor
、offsets
和 model-color-format
参数。
preprocessing_mode: "caffe"
:net-scale-factor=1.0 offsets=B;G;R model-color-format=1
其中
B;G;R
应替换为image_mean
参数。 如果未设置image_mean
,则将使用默认的 ImageNet 均值 (103.939;116.779;123.68)。preprocessing_mode: "torch"
:net-scale-factor=0.017507 offsets=123.675;116.280;103.53 model-color-format=0
preprocessing_mode: "tf"
:net-scale-factor=0.0078 offsets=127.5;127.5;127.5 model-color-format=0
使用以下内容添加上面生成的标签文件:
labelfile-path=<Classification labels>
对于所有选项,请参阅以下配置文件。 要了解有关所有参数的更多信息,请参阅 DeepStream 开发指南。
[property]
gpu-id=0
# preprocessing parameters
net-scale-factor=1.0
offsets=103.939;116.779;123.68
model-color-format=1
batch-size=30
# Model specific paths. These need to be updated for every classification model.
int8-calib-file=<Path to optional INT8 calibration cache>
labelfile-path=<Path to classification_labels.txt>
onnx-file=<Path to Classification onnx model>
## 0=FP32, 1=INT8, 2=FP16 mode
network-mode=0
# process-mode: 2 - inferences on crops from primary detector, 1 - inferences on whole frame
process-mode=2
interval=0
network-type=1 # defines that the model is a classifier.
gie-unique-id=1
classifier-threshold=0.2