部署到 DeepStream 以用于 DetectNet_v2
您训练的深度学习和计算机视觉模型可以部署在边缘设备上,例如 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 模型的更多详细信息,请参阅导出模型部分。
标签文件是一个文本文件,其中包含 DetectNet_v2 模型训练用于检测的类名称。此处列出类的顺序必须与模型预测输出的顺序相匹配。当启用 --gen_ds_config
标志运行时,DetectNet_v2 中的导出子任务会生成此文件。
检测模型通常用作主要推理引擎。它也可以用作辅助推理引擎。要在示例 deepstream-app
中运行此模型,您必须修改现有的 config_infer_primary.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=<TLT exported .etlt>
tlt-model-key=<Model export key>
int8-calib-file=<Calibration cache file>
tlt-encoded-model
参数指向从 TAO 导出的模型 (.etlt
)。tlt-model-key
是模型导出期间使用的加密密钥。
选项 2:将 TensorRT 引擎文件与 DeepStream 应用程序集成。
使用 TAO Deploy 生成特定于设备的 TensorRT 引擎。
生成引擎文件后,修改以下参数以将此引擎与 DeepStream 一起使用
model-engine-file=<PATH to generated TensorRT engine>
所有其他参数在两种方法之间是通用的。使用在 导出 时生成的 labels.txt
的路径更新配置文件中的 label-file-path
参数。
labelfile-path=<Classification labels>
对于所有选项,请参阅下面的配置文件。要了解有关所有参数的更多信息,请参阅 DeepStream 开发指南 中的 GsT-nvinfer 部分。
[property]
gpu-id=0
# preprocessing parameters.
net-scale-factor=0.0039215697906911373
model-color-format=0
# model paths.
int8-calib-file=<Path to optional INT8 calibration cache>
labelfile-path=<Path to detectNet_v2_labels.txt>
onnx-file=<Path to DetectNet_v2 onnx model>
batch-size=4
## 0=FP32, 1=INT8, 2=FP16 mode
network-mode=0
num-detected-classes=3
interval=0
gie-unique-id=1
is-classifier=0
#enable_dbscan=0
[class-attrs-all]
threshold=0.2
group-threshold=1
## Set eps=0.7 and minBoxes for enable-dbscan=1
eps=0.2
#minBoxes=3
roi-top-offset=0
roi-bottom-offset=0
detected-min-w=0
detected-min-h=0
detected-max-w=0
detected-max-h=0