TAO v5.5.0

UNET

UNet 是一个语义分割模型,支持以下任务

  • 训练

  • 剪枝

  • 评估

  • 推理

  • 导出

这些任务可以通过 TAO Launcher 从命令行调用,遵循以下约定

复制
已复制!
            

tao model unet <sub_task> <args_per_subtask>

其中 args_per_subtask 是给定子任务所需的命令行参数。 每个子任务的详细说明如下。

有关 UNet 数据格式的更多信息,请参阅数据标注格式页面。

要对 Unet 执行训练、评估、剪枝和推理,您需要配置多个组件,每个组件都有自己的参数。UNet 实验的 trainevaluatepruneinference 任务共享同一个配置文件。

Unet 训练的规范文件配置了训练流程的这些组件

  • 模型

  • 训练器

  • 数据集

模型配置

可以使用规范文件中的 model_config 选项配置分割模型。

以下是示例模型配置,用于实例化一个 resnet18 模型,其中块 0 和 1 被冻结,所有快捷连接都设置为投影层

复制
已复制!
            

# Sample model config for to instantiate a resnet18 model freeze blocks 0, 1 # with all shortcuts having projection layers. model_config { num_layers: 18 all_projections: true arch: "resnet" freeze_blocks: 0 freeze_blocks: 1 use_batch_norm: true initializer: HE_UNIFORM training_precision { backend_floatx: FLOAT32 } model_input_height: 320 model_input_width: 320 model_input_channels: 3 }

下表描述了 model_config 参数

参数

数据类型

默认值

描述

支持的值

all_projections

Boolean

False

对于具有快捷连接的模板,此参数定义是否应使用 1x1 实例化所有快捷方式
投影层,无论输入和输出之间是否存在步幅变化。

True/False(仅在 resnet 模板中使用)

arch

string

resnet

用作训练的骨干特征提取器的架构

resnet、vgg、vanilla_unet、efficientnet_b0、vanilla_unet_dynamic

num_layers

int

18

可扩展模板的特征提取器的深度

* resnets: 10, 18, 34, 50, 101
* vgg: 16, 19

enable_qat

Boolean

False

启用使用量化感知训练 (QAT) 进行模型训练。有关
QAT 的更多信息,请参阅量化感知训练部分。

True/False

use_pooling

Boolean

False

一个布尔值,用于确定在下采样时是使用步幅卷积还是 MaxPooling。 当为 True 时,使用 MaxPooling 进行
下采样;但是,对于对象检测网络,我们建议将其设置为 False 并使用步幅卷积。

True/False

use_batch_norm Boolean False 一个布尔值,用于确定是否使用批归一化层 True/False
training precision Proto 字典 包含一个嵌套参数,用于设置后端训练框架的精度 backend_floatx: FLOAT32

load_graph

Boolean

False

对于剪枝模型,将此参数设置为 True。 剪枝会修改原始图,因此需要同时导入剪枝后的模型图和权重。
导入。

True/False

freeze_blocks

float
(repeated)

此参数定义可以从实例化的特征提取器模板中冻结哪些块,并且对于不同的
特征提取器模板是不同的。

* ResNet 系列:对于 ResNet 系列,可用于冻结的块 ID 是 [0, 1, 2, 3](含)的任何子集
* VGG 系列:对于 VGG 系列,可用于冻结的块 ID 是 [1, 2, 3, 4, 5](含)的任何子集

freeze_bn

Boolean

False

您可以选择在训练期间冻结模型中的批
归一化层。

True/False

initializer

enum

GLOROT_UNIFORM

卷积层的初始化。 支持的初始化是 He Uniform、He Normal 和 Glorot uniform。

HE_UNIFORM, HE_NORMAL, GLOROT_UNIFORM

model_input_height

int

模型的模型输入高度维度,应为 16 的倍数。

>100

model_input_width

int

模型的模型输入宽度维度,应为 16 的倍数。

>100

model_input_channels

int

模型的模型输入通道维度,对于 Resnet/VGG 骨干网络,应设置为 3。 对于基于 vanilla_unet 的模型,可以设置为 1 或 3
,具体取决于图像输入通道维度。 如果输入图像通道为 1 且模型输入通道设置为 3
对于标准 UNet,则输入灰度图像将转换为 RGB。

1/3

注意

vanilla_unet 模型最初在本文中提出:U-Net:用于生物医学图像分割的卷积网络。 此模型推荐用于二元分割用例。 标准 UNet 的输入尺寸固定为 572 x 572

训练

本节概述如何配置训练参数。 以下是 training_config 元素的示例

复制
已复制!
            

training_config { batch_size: 2 epochs: 3 log_summary_steps: 10 checkpoint_interval: 1 loss: "cross_dice_sum" learning_rate:0.0001 lr_scheduler { cosine_decay { alpha : 0.01 decay_steps: 500 } } regularizer { type: L2 weight: 3.00000002618e-09 } optimizer { adam { epsilon: 9.99999993923e-09 beta1: 0.899999976158 beta2: 0.999000012875 } } }

下表描述了 training_config 的参数。

参数

数据类型

默认值

描述

支持的值

batch_size int 1 每个 GPU 每个批次的图像数量 >= 1
epochs int 训练模型的 epoch 数。 一个 epoch 表示对整个数据集进行一次训练迭代。 > 1
log_summary_steps int 1 摘要步骤间隔,用于将训练详细信息打印到 stdout 1 - 每个 epoch 的步数
checkpoint_interval int 1 保存检查点的 epoch 间隔数 1 - 总 epoch 数
loss string cross_entropy 用于分割的损失。 任务支持的损失如下
  • 二元分割:交叉熵、Dice 损失、交叉熵 + dice 损失 (cross_dice_sum)
  • 多类分割:交叉熵损失
cross_entropy, cross_dice_sum, dice
learning_rate float 0.0001 学习率初始化值。 0 - 1
lr_scheduler lr_scheduler 原型配置 无(恒定学习率) 支持以下 lr_schedulers
  • cosine_decay: * alpha (float)(推荐:0 - 0.001)* decay_steps (int)(推荐:>500)
  • exponential_decay * decay_rate (float) * decay_steps (int)(推荐:>500)
weights_monitor bool False 指定是否记录权重范围的 tensorboard 可视化。 True/ False
visualizer visualizer 原型配置 此参数定义 Tensorboard 可视化器的功能。 可视化器配置包括以下参数:* save_summary_steps (int):需要在 Tensorboard 上可视化的损失的步数。 * infrequent_save_summary_steps (int):需要在其后可视化权重直方图、输入图像、训练预测掩码和 Groundtruth 掩码叠加的步数。 <= 每个 epoch 的步数 <= 整个训练的总步数
regularizer regularizer 原型配置 此参数配置训练期间要使用的正则化器的类型和权重。 两个参数包括
  • type:正在使用的正则化器的类型
  • weight:正则化器的浮点权重
type 支持的值为
  • L2、L1
optimizer optimizer 原型配置 此参数定义要用于训练的优化器,以及配置它的参数,即
  • adam * epsilon (float):一个非常小的数字,用于防止实现中出现任何除以零的情况 * beta1 (float) * beta2 (float)
activation string softmax sigmoid 要在最后一层上使用的激活函数。 任务支持的激活函数如下
  • softmax:二元分割、多类分割
  • sigmoid:二元分割
softmax, sigmoid
注意

Dice 损失目前仅支持二元分割。 不支持多类分割的通用 Dice 损失。

如果您的掩码以 COCO JSON 格式保存,则可以使用 UNet 数据集转换器将这些掩码转换为 UNet PNG 掩码图像。 以下部分详细介绍了如何使用 dataset_convert

COCO 到 UNet 格式数据集转换器工具的示例用法

dataset_convert 工具的描述如下

复制
已复制!
            

tao model unet dataset-convert [-h] -f <path_to_coco_json_file> -r <results dir to save mask images> [-n <number of images>]

您可以使用以下参数。

必需参数

  • -f, --coco_file:原始图像存储目录的路径

  • -r, --results_dir:PNG 掩码图像将保存到的结果目录的路径

可选参数

  • -n, --num_files:要从 COCO JSON 文件转换为掩码图像的前“n”个图像的数量。 如果未提供,则转换 COCO JSON 文件中的所有图像。

  • -h, --help:打印帮助消息。

    注意

    如果分割掩码的最紧密边界框超出图像帧的边界,则将在 results_dir 中生成名为 skipped_annotations_log.json 的日志文件。 日志文件记录与有问题的分割标注相关的 image_idannotation_id 值。 缺少分割的标注和缺少标注字段的图像也记录在 .json 文件中。 例如,以下日志行表示 id 562121 的分割在 image 226111 中超出边界。

    复制
    已复制!
                

    {"error": "The segmentation map is out of bounds or faulty.", "image_id": 226111, "annotation_id": 562121 }

以下示例显示了如何将命令与数据集一起使用

复制
已复制!
            

tao model unet dataset_convert -f /path/to/coco_json_file -r /path/to/results_dir/images -n 8

数据集

本节介绍如何配置 dataset_config 函数。 您可以将输入图像和相应的掩码以文件夹或文本文件的形式馈送。

以下是使用文件夹作为输入的 dataset_config 元素的示例

复制
已复制!
            

dataset_config { dataset: "custom" augment: True resize_padding: True resize_method: BILINEAR augmentation_config { spatial_augmentation { hflip_probability : 0.5 vflip_probability : 0.5 crop_and_resize_prob : 0.5 } brightness_augmentation { delta: 0.2 } } input_image_type: "grayscale" train_images_path:"/workspace/tao-experiments/data/unet/isbi/images/train" train_masks_path:"/workspace/tao-experiments/data/unet/isbi/masks/train" val_images_path:"/workspace/tao-experiments/data/unet/isbi/images/val" val_masks_path:"/workspace/tao-experiments/data/unet/isbi/masks/val" test_images_path:"/workspace/tao-experiments/data/unet/isbi/images/test" data_class_config { target_classes { name: "foreground" mapping_class: "foreground" label_id: 0 } target_classes { name: "background" mapping_class: "background" label_id: 1 } } }

请参阅结构化图像和掩码文件夹,其中提供了图像和掩码路径内容的描述。

以下是使用文本文件作为输入的 dataset_config 元素的示例

复制
已复制!
            

dataset_config { dataset: "custom" augment: True augmentation_config { spatial_augmentation { hflip_probability : 0.5 vflip_probability : 0.5 crop_and_resize_prob : 0.5 } brightness_augmentation { delta: 0.2 } } input_image_type: "color" train_data_sources: { data_source: { image_path: "/workspace/images_train/images_source1.txt" masks_path: "/workspace/labels_train/labels_source1.txt" } data_source: { image_path: "/workspace/images_train/images_source2.txt" masks_path: "/workspace/labels_train/labels_source2.txt" } } val_data_sources: { data_source: { image_path: "/workspace/images_val/images_source1.txt" masks_path: "/workspace/labels_val/labels_source1.txt" } data_source: { image_path: "/workspace/images_val/images_source2.txt" masks_path: "/workspace/labels_val/labels_source2.txt" } } test_data_sources: { data_source: { image_path: "/workspace/images_test/images_source1.txt" masks_path: "/workspace/labels_test/labels_source1.txt" } data_source: { image_path: "/workspace/images_test/images_source2.txt" masks_path: "/workspace/labels_test/labels_source2.txt" } } data_class_config { target_classes { name: "foreground" mapping_class: "foreground" label_id: 0 } target_classes { name: "background" mapping_class: "background" label_id: 1 } } }

请参阅图像和掩码文本文件,其中提供了文本文件内容的描述。

下表描述了用于配置 dataset_config 的参数

参数

数据类型

默认值

描述

支持的值

dataset string custom 使用的输入类型数据集。 当前支持的数据集是用户自定义的。 未来将添加开源数据集。 custom
augment bool False 如果应在训练时在线扩充输入,则以 0.5 的概率完成以下扩充。 可以修改扩充配置以更改每种扩充类型的概率。
  • 水平翻转
  • 垂直翻转
  • 随机裁剪和调整大小
  • 随机亮度
true / false
buffer_size integer 数据集大小 预取时将缓冲的最大元素数。 此参数对于大型数据集很有用 <= 训练数据集样本数
filter_data bool False 跳过训练期间不存在的那些图像/掩码 true/ fasle
augmentation_config Proto 消息 包含 spatial_augmentation 原型和 brightness_augmentation 原型,用于配置相应扩充的概率。
spatial_augmentation Proto 字典
  • 0.5
  • 0.5
  • 0.5
包含以下可配置字段。 如果 augment 参数设置为 True,则设置为默认值。
  • hflip_probability
  • vflip_probability
  • crop_and_resize_prob
brightness_augmentation Proto 字典 0.2 配置以下参数:delta:使用 delta 值调整亮度。 非负整数
input_image_type string color 输入图像类型,指示输入图像是灰度还是彩色 (RGB) color/ grayscale
resize_padding bool False 图像将在所有边上使用零填充调整大小,以保持纵横比 true / false
resize_method string BILINEAR 图像使用以下方法之一调整大小:* BILINEAR:双线性插值。 如果 antialias 为 true,则在下采样时变为半径为 1 的 hat/tent 滤波器函数。 * NEAREST_NEIGHBOR:最近邻插值。 * BICUBIC:Keys 的三次插值。 * AREA:使用面积插值的抗锯齿重采样 BILINEAR NEAREST_NEIGHBOR BICUBIC AREA
train_images_path string 输入训练图像路径 UNIX 路径字符串
train_masks_path string 输入训练掩码路径 UNIX 路径字符串
val_images_path string 输入验证图像路径 UNIX 路径字符串
val_masks_path string 输入验证掩码路径 UNIX 路径字符串
test_images_path string 输入测试图像路径 UNIX 路径字符串
train_data_sources Proto 消息 输入训练 data_source 原型,其中包含训练序列的文本文件
val_data_sources Proto 消息 输入训练 data_source 原型,其中包含验证序列的文本文件
test_data_sources Proto 消息 输入训练 data_source 原型,其中包含测试序列的文本文件
data_source Proto 字典 每个文本文件对应一个序列的重复字段。 以下是 data_source 配置的参数
  • image_path (string):包含图像路径的文本文件的路径
  • masks_path (string):包含掩码路径的文本文件的路径(test_data_sources 的掩码路径是可选的
data_class_config Proto 字典 Proto 字典,其中包含作为 target_classes 原型一部分的训练类的信息,如下所述。
target_classes Proto 字典 每个训练类的重复字段。 以下是 target_classes 配置的必需参数
  • name (string):目标类的名称
  • mapping_class (string):目标类的映射类名称。 例如,“car”可以映射到“vehicle”。 如果需要按原样训练类,则 namemapping_class 应相同。
  • label_id (int):属于此目标类的像素在掩码图像中被分配此 label_id 值。
注意

训练图像支持的图像扩展格式为“.png”、“.jpg”、“.jpeg”、“.PNG”、“.JPG”和“.JPEG”。

按照这些说明准备输入数据并设置规范文件后。 现在,您可以开始训练语义分割网络了。

以下是 UNet 训练命令

复制
已复制!
            

tao model unet train [-h] -k <key> -r <result directory> -e <spec_file> [-m <Pre-trained weights to initialize>] [-n <name of the model> [--gpus <num GPUs>] [--gpu_index <space separate gpu indices>] [--use_amp]

必需参数

  • -r, --results_dir:应写入实验输出的文件夹的路径。

  • -k, –key:用于保存或加载 .tlt 模型的用户特定编码密钥。

  • -e, --experiment_spec_file:规范文件的路径。

可选参数

  • -m, --pretrained_model_file:要初始化的预训练模型的路径。 此参数默认为 None。 此参数配置为剪枝模型以进行重新训练。

  • -n, --model_name:最终检查点将保存在权重目录中的名称。 默认值为 model.tlt

  • --gpus:用于训练的 GPU 数量和要启动的进程数。 默认值为 1。

  • --gpu_index:用于训练的 GPU 的索引。 GPU 索引在 ./deviceQuery CUDA 示例中描述。

  • --use_amp:启用自动混合精度模式的标志

  • -h, --help:打印此帮助消息。

输入要求

  • 输入大小:C * W * H(其中 C = 3 或 1,对于 vanilla unet,W = 572,H = 572,对于其他架构,W >= 128,H >= 128,且 W、H 是 32 的倍数)。

  • 图像格式:JPG、JPEG、PNG、BMP

  • 标签格式:图像/掩码对

注意

图像和掩码不需要等于模型输入大小。 图像/掩码将在训练期间调整为模型输入大小。

示例用法

这是一个用于双 GPU 训练的命令示例

复制
已复制!
            

tao model unet train -e </path/to/spec/file> -r </path/to/experiment/output> -k <key_to_load_the_model> -n <name_string_for_the_model> -m <Pre-trained weights to initialize the model> --gpus 2

注意

UNet 支持从中间检查点恢复训练。 如果先前运行的训练实验过早停止,您可以通过简单地使用与之前相同的命令行参数重新运行 UNet 训练命令,从上次检查点重新启动训练。 UNet 的训练器在结果目录中找到上次保存的检查点并从那里恢复训练。 检查点保存的间隔由 UNet 的“training_config”下的 checkpoint_interval 参数定义。 恢复训练时,请勿使用预训练权重参数。

注意

UNet 支持 Tensorboard 可视化,用于损失,可视化训练期间训练图像上的预测掩码以及输入图像上的 Ground truth 掩码叠加。 tensorboard 日志保存在 output/events 目录中,以便对其进行可视化。

剪枝从模型中删除参数以减小模型大小,而不会使用 prune 命令损害模型本身的完整性。

prune 任务包括以下参数

复制
已复制!
            

tao model unet prune [-h] -m <pretrained_model> -e <spec_file> -o <output_file> -k <key> [-n <normalizer>] [-eq <equalization_criterion>] [-pg <pruning_granularity>] [-pth <pruning threshold>]` [-nf <min_num_filters>] [-el [<excluded_list>]

必需参数

  • -m, --pretrained_model:要剪枝的模型的路径。 通常,使用最后一个 epoch 模型。

  • -e, --experiment_spec_file:规范文件的路径。

  • -o, --output_file:剪枝模型的路径。

  • -k, --key:用于加载 .tlt 模型的密钥。

可选参数

  • -h, --help:显示此帮助消息并退出。

  • -n, –normalizer:指定 max 以通过将每个范数除以层内的最大范数来进行归一化;指定 L2 以通过除以包含所有内核范数的向量的 L2 范数来进行归一化。 默认值为 max

  • -eq, --equalization_criterion:用于均衡元素级操作层或深度方向卷积层输入的统计信息的标准。 此参数对于 resnet 和 mobilenet 非常有用。 选项为 arithmetic_meangeometric_meanunionintersection(默认值:union)。

  • -pg, -pruning_granularity:一次要删除的过滤器数量(默认值:8)

  • -pth:用于比较归一化范数的阈值(默认值:0.1)

  • -nf, --min_num_filters:每层要保留的最小过滤器数量(默认值:16)

  • -el, --excluded_layers:排除层列表(例如 -i item1 item2)(默认值:[])

剪枝后,需要重新训练模型。 有关更多详细信息,请参阅重新训练剪枝模型

注意

剪枝模型不直接支持评估和推理。 您必须先重新训练剪枝模型,然后才能执行评估和推理。

使用 Prune 命令

以下是使用 prune 任务的示例

复制
已复制!
            

tao model unet prune -e </path/to/spec/file> -m </path/to/weights to be pruned> -o </path/to/pruned weights> -eq union -pth 0.7 -k $KEY

注意

模型架构 Shufflenet 不支持剪枝。

模型剪枝后,精度可能会略有下降,因为某些先前有用的权重可能已被删除。 为了恢复精度,我们建议您使用 train 命令在同一数据集上重新训练此剪枝模型,如训练模型部分所述,并将 -m, --pretrained_model 参数指向新剪枝的模型作为预训练模型文件。

我们建议在 UNet 的 training_config 中将正则化器权重设置为零,以在重新训练剪枝模型时恢复精度。 所有其他参数都可以从之前的训练中保留在规范文件中。

要加载剪枝模型以及重新训练,请将 model_config 下的 load_graph 标志设置为 true

按如下方式在 UNet 模型上执行 evaluate

复制
已复制!
            

tao model unet evaluate [-h] -e <experiment_spec> -m <model_file> -o <output folder> -k <key> [--gpu_index]

必需参数

  • -e, --experiment_spec_file:用于设置评估实验的实验规范文件。 这应与训练规范文件相同。

  • -m, --model_path:用于评估的模型文件的路径。 这可以是 .tlt 模型文件,也可以是使用 export 工具生成的 tensorrt 引擎。

  • -o, --output_dir:评估指标保存为 JSON 文件的输出目录。 TAO 推理保存到 output_dir/results_tlt.json,TRT 推理保存到 output_dir/results_trt.json。 结果 JSON 文件包含每个类别的精度、召回率、f1 分数和 IOU。 它还提供这些指标的加权平均值、宏平均值和微平均值。 有关平均指标的更多信息,请参阅分类报告

  • -k, -–key:用于解密模型的加密密钥。 此参数仅在

    使用 .tlt 模型文件时是必需的。

可选参数

  • -h, --help:显示此帮助消息并退出。

  • --gpu_index:要在其上运行评估的 GPU 的索引

如果您已按照训练 Unet 模型中的示例进行操作,您现在可以使用以下命令评估模型

示例用法

这是一个用于评估模型的命令示例

复制
已复制!
            

tao model unet evaluate -e </path/to/training/spec/file> -m </path/to/the/model> -o </path/to/evaluation/output> -k <key to load the model>

注意

此命令使用提供给 val_images_pathval_masks_pathdataset_config 中 :code:`val_data_sources` 下提供的文本文件的图像和掩码运行评估。

UNet 的 inference 任务可用于可视化分割并在图像目录上生成逐帧 PNG 格式标签。 此任务的命令示例如下所示

复制
已复制!
            

tao model unet inference [-h] -e <experiment_spec> -m <model_file> -o <output folder to save inference images> -k <key> [--gpu_index]

必需参数

  • -e, --experiment_spec_file:推理规范文件的路径。

  • -o, --output_dir:带标注的输出图像和标签的目录。 带标注的图像位于 vis_overlay_tlt 中,标签位于 mask_labels_tlt 中。 如果 TRT 引擎用于推理,则带标注的图像保存在 vis_overlay_trt 中,预测标签保存在 mask_labels_trt 中。

  • -k, --enc_key:用于加载模型的密钥。

该工具会自动在 output_dir/vis_overlay_tlt 中生成分割叠加图像。 标签将在 output_dir/mask_labels_tlt 中生成。 trt 推理的带标注的分割图像和标签分别保存在 output_dir/vis_overlay_trtoutput_dir/mask_labels_trt 中。

TAO 中的 UNet 模型应用程序包括一个 export 子任务,用于导出和准备训练好的 UNet 模型以部署到 DeepStreamexport 子任务可以选择生成 TensorRT INT8 引擎校准的校准缓存。

导出模型将训练过程与部署分离,并允许在 TAO 环境之外转换为 TensorRT 引擎。 TensorRT 引擎特定于每个硬件配置,应为每个唯一的推理环境生成。 这可以互换地称为 .trt.engine 文件。 同一个导出的 TAO 模型可以通用地用于训练和部署硬件。 这称为 .etlt 文件或加密的 TAO 文件。 在模型导出期间,TAO 模型使用私钥加密。 当您部署此模型进行推理时,需要此密钥。

INT8 模式概述

TensorRT 引擎可以在 INT8 模式下生成,以较低的精度运行,从而提高性能。 此过程需要一个缓存文件,其中包含张量的比例因子,以帮助对抗由于低精度算术而可能出现的量化错误。 当 export 与设置为 int8--data_type 标志一起运行时,校准缓存是使用校准张量文件生成的。 预先生成校准信息并缓存它消除了在推理机器上校准模型的需要。 移动校准缓存通常比移动校准张量文件方便得多,因为它是一个小得多的文件,可以与导出的模型一起移动。 使用校准缓存还可以加快引擎创建速度,因为构建缓存可能需要几分钟才能生成,具体取决于张量文件的大小和模型本身。

导出工具可以通过提取训练数据来生成 INT8 校准缓存。 您需要将该工具指向一个图像目录,以用于校准模型。 您还需要创建一个随机图像的子采样目录,以最好地代表您的训练数据集。

tao_int8_calibration.png

FP16/FP32 模型

如果您需要在 INT8 精度下运行推理,则仅需要 calibration.bin。 对于基于 FP16/FP32 的推理,导出步骤要简单得多。 所需的只是提供来自 train 步骤的模型到 export 以转换为加密的 TAO 模型。

fp16_fp32_export.png

导出 UNet 模型

以下是 export 命令的命令行参数示例

复制
已复制!
            

tao model unet export [-h] -m </path/to the .tlt model file generated by tao model train> -k <key> -e </path/to/experiment/spec_file> [-o </path/to/output/file>] [-s <strict_type_constraints>] [--cal_data_file </path/to/tensor/file>] [--cal_image_dir </path/to/the/directory/images/to/calibrate/the/model] [--cal_cache_file </path/to/output/calibration/file>] [--data_type <Data type for the TensorRT backend during export>] [--batches <Number of batches to calibrate over>] [--max_batch_size <maximum trt batch size>] [--max_workspace_size <maximum workspace size] [--batch_size <batch size to TensorRT engine>] [--engine_file </path/to/the/TensorRT/engine_file>] [--gen_ds_config] <Flag to generate ds config and label file>] [--verbose Verbosity of the logger]

必需参数

  • -m, --model:要使用 export 导出的 .tlt 模型文件的路径。

  • -k, --key:用于保存 .tlt 模型文件的密钥。

  • -e, --experiment_spec:规范文件的路径。

可选参数

  • -o, --output_file:要将导出的模型保存到的路径。 默认路径为 ./<input_file>.etlt

  • --data_type:用于在 INT8 模式下生成校准缓存的引擎数据类型。 选项为 fp32fp16int8。 默认值为 fp32。 如果使用 int8,则需要 int8 参数。

  • --gen_ds_config:一个布尔标志,指示是否生成模板 DeepStream 相关配置 (“nvinfer_config.txt”) 以及标签文件 (“labels.txt”),与 output_file 在同一目录中。 请注意,配置文件不是完整的配置文件,需要用户使用生成的参数更新 DeepStream 中的示例配置文件。

  • -s, --strict_type_constraints:一个布尔标志,指示在构建 TensorRT 引擎时是否应用 TensorRT strict_type_constraints。 请注意,这仅适用于应用 INT8 模式的严格类型。

INT8 导出模式必需参数

  • --cal_data_file:与 --cal_image_dir 一起使用的输出文件。

  • --cal_image_dir:用于校准的图像目录。

注意

如果为命令行上的 --cal_data_file 参数提供了有效路径,则导出工具会生成一个中间 TensorFile,以便从 --cal_image_dir 图像目录中的随机批次图像中重复使用。 此张量文件用于校准。 如果未提供 --cal_image_dir,则随机输入张量用于校准。 生成的张量文件中的批次数量从设置为 --batches 参数的值中获得,batch_size 从设置为 --batch_size 参数的值中获得。 确保 --cal_image_dir 中提到的目录中至少有 batch_size * batches 个图像。 有效的图像扩展名为“.jpg”、“.jpeg”和“.png”。 在这种情况下,校准张量的 input_dimensions.tlt 模型的输入层派生。

INT8 导出可选参数

  • --cal_cache_file:用于保存校准缓存文件的路径。 默认值为 ./cal.bin

  • --batches:用于校准和推理测试的批次数。 默认值为 10。

  • --batch_size:用于校准的批大小。 默认值为 8。

  • --max_batch_size:TensorRT 引擎的最大批大小。 默认值为 1。

  • --min_batch_size:TensorRT 引擎的最小批大小。 默认值为 1。

  • --opt_batch_size:TensorRT 引擎的最佳批大小。 默认值为 1。

  • --max_workspace_size:TensorRT 引擎的最大工作区大小。 默认值为 1073741824 = 1<<30

  • --experiment_spec:用于训练/推理/评估的 experiment_spec

  • --engine_file:序列化的 TensorRT 引擎文件的路径。 请注意,此文件特定于硬件,不能在 GPU 之间通用。 引擎文件允许您在主机上使用 TensorRT 快速测试模型的准确性。 由于 TensorRT 引擎文件特定于硬件,因此除非部署 GPU 与训练 GPU 相同,否则您不能将引擎文件用于部署。

  • --force_ptq:一个布尔标志,用于强制对导出的 .etlt 模型执行训练后量化。

注意

导出启用 QAT 训练的模型时,用于校准激活的张量比例因子会从模型中剥离出来,并序列化到 cal_cache_file 参数定义的 TensorRT 可读缓存文件中。但是,当前版本的 QAT 本身不支持在 Jetson 上进行 DLA int8 部署。要在 Jetson 上使用 DLA int8 部署此模型,请使用 --force_ptq 标志来使用 TensorRT 后训练量化生成校准缓存文件。

导出子任务的示例用法

以下是使用 --cal_image_dir 选项的 UNet 模型的示例命令。

复制
已复制!
            

tao model unet export -m $USER_EXPERIMENT_DIR/unet/model.tlt -o $USER_EXPERIMENT_DIR/unet/model.int8.etlt -e $SPECS_DIR/unet_train_spec.txt --key $KEY --cal_image_dir $USER_EXPERIMENT_DIR/data/isbi/images/val --data_type int8 --batch_size 8 --batches 10 --cal_data_file $USER_EXPERIMENT_DIR/export/isbi_cal_data_file.txt --cal_cache_file $USER_EXPERIMENT_DIR/export/isbi_cal.bin --engine_file $USER_EXPERIMENT_DIR/export/int8.isbi.engine

有关部署,请参阅 :ref:TAO 部署文档 <unet_with_tao_deploy>

有关将 UNet 模型部署到 DeepStream 的更多信息,请参阅集成 UNet 模型页面。

上一页 语义分割
下一页 基础模型
© 版权所有 2024,NVIDIA。 上次更新于 2024 年 10 月 15 日。