TAO v5.5.0

部署到 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 集成:

  • 选项 1:将模型(.onnx)与加密密钥直接集成到 DeepStream 应用程序中。模型文件由 tao model multitask_classification export 生成。

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

要将模型与 DeepStream 集成,您需要以下内容:

  1. 下载并安装 DeepStream SDK。DeepStream 的安装说明在 DeepStream 开发指南中提供。

  2. 导出的 .onnx 模型文件和可选的 INT8 精度校准缓存。

  3. 一个 labels.txt 文件,其中包含类别的标签,顺序与网络生成输出的顺序相同。

  4. 一个示例 config_infer_*.txt 文件,用于配置 DeepStream 中的 nvinfer 元素。nvinfer 元素处理与 DeepStream 中的 TensorRT 优化和引擎创建相关的所有内容。

DeepStream SDK 附带一个端到端参考应用程序,该应用程序是完全可配置的。您可以配置输入源、推理模型和输出接收器。该应用程序需要一个主要对象检测模型,然后是一个可选的辅助分类模型。参考应用程序安装为 deepstream-app。下图显示了参考应用程序的架构:

arch_ref_appl.png

通常,此应用程序使用两个或多个配置文件。在安装目录中,配置文件位于 samples/configs/deepstream-appsample/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.txtconfig_infer_secondary_*.txt

集成多任务图像分类模型

有关如何导出 TAO 模型的更多详细信息,请参阅导出模型。模型生成后,还需要两个额外的文件:

  1. 标签文件

  2. DeepStream 配置文件

标签文件

标签文件是一个文本文件,其中包含 TAO 模型训练用于分类的类别的名称。类别列表的顺序必须与模型预测输出的顺序匹配。此顺序可以从 TAO 生成的 classmap.json 文件中推断出来。此文件是一个简单的字典,其中包含“class_name”到“index map”。从 TAO 教程笔记本生成的模型生成的示例 classmap.json 文件如下:

复制
已复制!
            

{ "tasks": ["base_color", "category", "season"], "class_mapping": { "base_color": { "0": "Black", "1": "Blue", "2": "Brown", "3": "Green", "4": "Grey", "5": "Navy Blue", "6": "Pink", "7": "Purple", "8": "Red", "9": "Silver", "10": "White"}, "category": { "0": "Bags", "1": "Bottomwear", "2": "Eyewear", "3": "Fragrance", "4": "Innerwear", "5": "Jewellery", "6": "Sandal", "7": "Shoes", "8": "Topwear", "9": "Watches"}, "season": { "0": "Fall", "1": "Spring", "2": "Summer", "3": "Winter" } } }

给定此示例 class_map.json` 文件,以下是一个示例 multitask_classification_labels.txt 文件,按索引顺序排列:

复制
已复制!
            

Fall;Spring;Summer;Winter Bags;Bottomwear;Eyewear;Fragrance;Innerwear;Jewellery;Sandal;Shoes;Topwear;Watches Black;Blue;Brown;Green;Grey;Navy Blue;Pink;Purple;Red;Silver;White

DeepStream 配置文件

视频分析的典型用例是首先进行对象检测,然后裁剪检测到的对象并将其进一步发送以进行分类或多任务分类。deepstream-app 支持此功能,并且可以在上面看到应用程序架构。pgie_multi_task_tao_config.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 应用程序集成。

  1. 使用 TAO Deploy 生成特定于设备的 TensorRT 引擎。

  2. 引擎文件生成后,修改以下参数以将此引擎与 DeepStream 一起使用:

    复制
    已复制!
                

    model-engine-file=<PATH to generated TensorRT engine>

所有其他参数在两种方法之间是通用的。net-scale-factoroffsetsmodel-color-format 参数必须根据训练规范文件中的 preprocessing_mode 进行更新。

  • 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=<Multitask classification labels>

对于所有选项,请参阅以下配置文件。要了解有关所有参数的更多信息,请参阅 DeepStream 开发指南

复制
已复制!
            

[property] gpu-id=0 net-scale-factor=1.0 offsets=103.939;116.779;123.68 model-color-format=1 labelfile-path=multi_task_labels.txt onnx-file=../../../models/multi_task/abc.onnx model-engine-file=../../../models/multi_task/abc.etlt_b1_gpu0_fp16.engine infer-dims=3;80;60 batch-size=1 ## 0=FP32, 1=INT8, 2=FP16 mode network-mode=2 interval=0 gie-unique-id=1 network-type=1 scaling-filter=1 scaling-compute-hw=1 output-blob-names=base_color/Softmax;category/Softmax;season/Softmax classifier-threshold=0.5

上一篇 部署到 DeepStream 以进行分类 TF1/TF2/PyTorch
下一篇 部署到 DeepStream 以进行 DetectNet_v2
© 版权所有 2024, NVIDIA。 上次更新时间:2024 年 10 月 15 日。