TAO v5.5.0

MaskRCNN

MaskRCNN 支持以下任务

  • dataset_convert

  • train

  • evaluate

  • prune

  • inference

  • export

这些任务可以使用 TAO Launcher 从命令行调用,使用以下约定

复制
已复制!
            

tao model mask_rcnn <sub_task> <args_per_subtask>

其中 args_per_subtask 是给定子任务所需的命令行参数。 以下详细解释了每个子任务。

原始图像数据和相应的注释文件需要在训练和评估之前转换为 TFRecords。 dataset_convert 工具可以帮助实现无缝转换,同时提供有关注释文件中潜在问题的见解。 以下部分详细介绍了如何使用 dataset_convert

数据集转换器工具的示例用法

dataset_convert 工具的描述如下

复制
已复制!
            

tao model mask_rcnn dataset-convert [-h] -i <image_directory> -a <annotation_json_file> -o <tfrecords_output_directory> [-t <tag>] [-s <num_shards>] [--include_mask]

您可以使用以下参数

  • -i, --image_dir:原始图像存储目录的路径

  • -a, --annotations_file:注释 JSON 文件

  • -o, --output_dir:TFRecords 保存到的输出目录

  • -t, --tag:转换后的 TFRecords 的标签(例如“train”)。 标签默认为注释文件的名称。

  • -s, --num_shards:转换后的 TFRecords 的分片数。 默认值为 256。

  • --include_mask:是否在转换期间包含分割 groundtruth。 默认值为 True。

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

    注意

    如果对象的边界框超出图像帧的范围,或者对象掩码超出其边界框的范围,则会在 output_dir 中生成名为 <tag>_warnings.json 的日志文件。 日志文件记录具有问题对象 ID 的 image_id。 例如,{"200365": {"box": [918], "mask": []} 表示 object 918 的边界框在 image 200365 中超出范围。

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

复制
已复制!
            

tao model mask_rcnn dataset_convert -i /path/to/image_dir -a /path/to/train.json -o /path/to/output_dir

重要提示

注释文件中 categories 下的 id 应从 1 开始。

以下是 MaskRCNN 示例规格文件。 它有三个主要组件:顶层实验配置、data_configmaskrcnn_config,下面将详细解释。 规格文件的格式是 protobuf 文本 (prototxt) 消息,其每个字段可以是基本数据类型或嵌套消息。 下表总结了规格文件的顶层结构。

以下是 MaskRCNN 规格文件的示例

复制
已复制!
            

seed: 123 use_amp: False warmup_steps: 0 checkpoint: "/workspace/tao-experiments/maskrcnn/pretrained_resnet50/tlt_instance_segmentation_vresnet50/resnet50.hdf5" learning_rate_steps: "[60000, 80000, 100000]" learning_rate_decay_levels: "[0.1, 0.02, 0.002]" total_steps: 120000 train_batch_size: 2 eval_batch_size: 4 num_steps_per_eval: 10000 momentum: 0.9 l2_weight_decay: 0.0001 l1_weight_decay: 0.0 warmup_learning_rate: 0.0001 init_learning_rate: 0.02 num_examples_per_epoch: 14700 # pruned_model_path: "/workspace/tao-experiments/maskrcnn/pruned_model/model.tlt" data_config{ image_size: "(832, 1344)" augment_input_data: True eval_samples: 500 training_file_pattern: "/workspace/tao-experiments/data/train*.tfrecord" validation_file_pattern: "/workspace/tao-experiments/data/val*.tfrecord" val_json_file: "/workspace/tao-experiments/data/annotations/instances_val2017.json" # dataset specific parameters num_classes: 91 skip_crowd_during_training: True max_num_instances: 200 } maskrcnn_config { nlayers: 50 arch: "resnet" freeze_bn: True freeze_blocks: "[0,1]" gt_mask_size: 112 # Region Proposal Network rpn_positive_overlap: 0.7 rpn_negative_overlap: 0.3 rpn_batch_size_per_im: 256 rpn_fg_fraction: 0.5 rpn_min_size: 0. # Proposal layer. batch_size_per_im: 512 fg_fraction: 0.25 fg_thresh: 0.5 bg_thresh_hi: 0.5 bg_thresh_lo: 0. # Faster-RCNN heads. fast_rcnn_mlp_head_dim: 1024 bbox_reg_weights: "(10., 10., 5., 5.)" # Mask-RCNN heads. include_mask: True mrcnn_resolution: 28 # training train_rpn_pre_nms_topn: 2000 train_rpn_post_nms_topn: 1000 train_rpn_nms_threshold: 0.7 # evaluation test_detections_per_image: 100 test_nms: 0.5 test_rpn_pre_nms_topn: 1000 test_rpn_post_nms_topn: 1000 test_rpn_nms_thresh: 0.7 # model architecture min_level: 2 max_level: 6 num_scales: 1 aspect_ratios: "[(1.0, 1.0), (1.4, 0.7), (0.7, 1.4)]" anchor_scale: 8 # localization loss rpn_box_loss_weight: 1.0 fast_rcnn_box_loss_weight: 1.0 mrcnn_weight_loss_mask: 1.0 }

字段 描述 数据类型和约束 推荐/典型值
seed 实验的随机种子 无符号整数 123
warmup_steps 学习率提升到 init_learning_rate 所需的步数 无符号整数
warmup_learning_rate 预热阶段的初始学习率 浮点数
learning_rate_steps 学习率以 learning_rate_decay_levels 中指定的因子衰减的步数列表 字符串
learning_rate_decay_levels 衰减因子列表。 长度应与 learning_rate_steps 的长度匹配。 字符串
total_steps 训练迭代总次数 无符号整数
train_batch_size 训练期间的批次大小 无符号整数 4
eval_batch_size 验证或评估期间的批次大小 无符号整数 8
num_steps_per_eval 每 N 步保存一个检查点并运行评估。 无符号整数
momentum SGD 优化器的动量 浮点数 0.9
l1_weight_decay L1 权重衰减 浮点数 0.0001
l2_weight_decay L2 权重衰减 浮点数 0.0001
use_amp 指定是否使用自动混合精度训练 布尔值 False
checkpoint 预训练模型的路径 字符串
maskrcnn_config 模型的架构 消息
data_config 输入数据配置 消息
skip_checkpoint_variables 如果指定,则不会加载具有匹配正则表达式的层的权重。 这对于迁移学习尤其有用。 字符串
pruned_model_path 剪枝后的 MaskRCNN 模型的路径 字符串
num_examples_per_epoch 训练集中图像总数除以 GPU 数量 无符号整数
num_epochs 训练网络的 epoch 数 无符号整数
visualize_images_summary 是否在 TensorBoard 中预览图像和推理结果。 如果启用,则会将验证集中带有预测边界框的 10 张图像保存在 TensorBoard 事件文件中。 布尔值
注意

必须指定 num_examples_per_epoch 参数,并且应指定 num_epochstotal_steps。 如果两者都设置,则 total_steps 将被 num_epochs * num_examples_per_epoch / train_batch_size 覆盖

注意

使用 skip_checkpoint_variables 时,您可以首先在训练日志中找到模型结构(下面显示了 MaskRCNN+ResNet50 模型结构的一部分)。 例如,如果要重新训练所有预测头,可以将 skip_checkpoint_variables 设置为“head”。 TAO 使用 Python re 库来检查“head”是否与任何层名称或 re.search($skip_checkpoint_variables, $layer_name) 匹配。

复制
已复制!
            

[MaskRCNN] INFO : ================ TRAINABLE VARIABLES ================== [MaskRCNN] INFO : [#0001] conv1/kernel:0 => (7, 7, 3, 64) [MaskRCNN] INFO : [#0002] bn_conv1/gamma:0 => (64,) [MaskRCNN] INFO : [#0003] bn_conv1/beta:0 => (64,) [MaskRCNN] INFO : [#0004] block_1a_conv_1/kernel:0 => (1, 1, 64, 64) [MaskRCNN] INFO : [#0005] block_1a_bn_1/gamma:0 => (64,) [MaskRCNN] INFO : [#0006] block_1a_bn_1/beta:0 => (64,) [MaskRCNN] INFO : [#0007] block_1a_conv_2/kernel:0 => (3, 3, 64, 64) [MaskRCNN] INFO : [#0008] block_1a_bn_2/gamma:0 => (64,) [MaskRCNN] INFO : [#0009] block_1a_bn_2/beta:0 => (64,) [MaskRCNN] INFO : [#0010] block_1a_conv_3/kernel:0 => (1, 1, 64, 256) [MaskRCNN] INFO : [#0011] block_1a_bn_3/gamma:0 => (256,) [MaskRCNN] INFO : [#0012] block_1a_bn_3/beta:0 => (256,) [MaskRCNN] INFO : [#0110] block_3d_bn_3/gamma:0 => (1024,) [MaskRCNN] INFO : [#0111] block_3d_bn_3/beta:0 => (1024,) [MaskRCNN] INFO : [#0112] block_3e_conv_1/kernel:0 => (1, 1, 1024, [MaskRCNN] INFO : [#0144] block_4b_bn_1/beta:0 => (512,) … … … … ... [MaskRCNN] INFO : [#0174] post_hoc_d5/kernel:0 => (3, 3, 256, 256) [MaskRCNN] INFO : [#0175] post_hoc_d5/bias:0 => (256,) [MaskRCNN] INFO : [#0176] rpn/kernel:0 => (3, 3, 256, 256) [MaskRCNN] INFO : [#0177] rpn/bias:0 => (256,) [MaskRCNN] INFO : [#0178] rpn-class/kernel:0 => (1, 1, 256, 3) [MaskRCNN] INFO : [#0179] rpn-class/bias:0 => (3,) [MaskRCNN] INFO : [#0180] rpn-box/kernel:0 => (1, 1, 256, 12) [MaskRCNN] INFO : [#0181] rpn-box/bias:0 => (12,) [MaskRCNN] INFO : [#0182] fc6/kernel:0 => (12544, 1024) [MaskRCNN] INFO : [#0183] fc6/bias:0 => (1024,) [MaskRCNN] INFO : [#0184] fc7/kernel:0 => (1024, 1024) [MaskRCNN] INFO : [#0185] fc7/bias:0 => (1024,) [MaskRCNN] INFO : [#0186] class-predict/kernel:0 => (1024, 91) [MaskRCNN] INFO : [#0187] class-predict/bias:0 => (91,) [MaskRCNN] INFO : [#0188] box-predict/kernel:0 => (1024, 364) [MaskRCNN] INFO : [#0189] box-predict/bias:0 => (364,) [MaskRCNN] INFO : [#0190] mask-conv-l0/kernel:0 => (3, 3, 256, 256) [MaskRCNN] INFO : [#0191] mask-conv-l0/bias:0 => (256,) [MaskRCNN] INFO : [#0192] mask-conv-l1/kernel:0 => (3, 3, 256, 256) [MaskRCNN] INFO : [#0193] mask-conv-l1/bias:0 => (256,) [MaskRCNN] INFO : [#0194] mask-conv-l2/kernel:0 => (3, 3, 256, 256) [MaskRCNN] INFO : [#0195] mask-conv-l2/bias:0 => (256,) [MaskRCNN] INFO : [#0196] mask-conv-l3/kernel:0 => (3, 3, 256, 256) [MaskRCNN] INFO : [#0197] mask-conv-l3/bias:0 => (256,) [MaskRCNN] INFO : [#0198] conv5-mask/kernel:0 => (2, 2, 256, 256) [MaskRCNN] INFO : [#0199] conv5-mask/bias:0 => (256,) [MaskRCNN] INFO : [#0200] mask_fcn_logits/kernel:0 => (1, 1, 256, 91) [MaskRCNN] INFO : [#0201] mask_fcn_logits/bias:0 => (91,)

MaskRCNN 配置

MaskRCNN 配置 (maskrcnn_config) 定义了模型结构。 此模型用于训练、评估和推理。 下表包含详细描述。 目前,MaskRCNN 仅支持 ResNet10/18/34/50/101 作为其骨干网络。

字段 描述 数据类型和约束 推荐/典型值
nlayers ResNet arch 中的层数 无符号整数 50
arch 骨干特征提取器名称 字符串 resnet
freeze_bn 是否冻结骨干网络中的所有 BatchNorm 层 布尔值 False
freeze_blocks 骨干网络中要冻结的 conv 块列表 字符串 ResNet:对于 ResNet 系列,可用于冻结的块 ID 是 [0, 1, 2, 3](包括)的任何子集
gt_mask_size groundtruth 掩码大小 无符号整数 112
rpn_positive_overlap 为锚点分配正标签的下限阈值 浮点数 0.7
rpn_negative_overlap 为锚点分配负标签的上限阈值 浮点数 0.3
rpn_batch_size_per_im RPN 中每个图像的采样锚点数 无符号整数 256
rpn_fg_fraction 批次中所需的正锚点分数 无符号整数 0.5
rpn_min_size 最小提议高度和宽度 0
batch_size_per_im 每个图像的 RoI 小批量大小 无符号整数 512
fg_fraction 标记为前景的 RoI 小批量目标分数 浮点数 0.25
fast_rcnn_mlp_head_dim Fast-RCNN 分类头维度 无符号整数 1024
bbox_reg_weights 边界框正则化权重 字符串 “(10, 10, 5, 5)”
include_mask 指定是否包含掩码头 布尔值 True(目前仅支持 True)
mrcnn_resolution 掩码头分辨率(必须是 4 的倍数) 无符号整数 28
train_rpn_pre_nms_topn 在训练期间应用 NMS 之前要保留的得分最高的 RPN 提议数(每个 FPN 级别) 无符号整数 2000
train_rpn_post_nms_topn 在训练期间应用 NMS 之后要保留的得分最高的 RPN 提议数(生成的总数) 无符号整数 1000
train_rpn_nms_threshold 训练期间 RPN 中的 NMS IOU 阈值 浮点数 0.7
test_detections_per_image NMS 之后的边界框候选数 无符号整数 100
test_nms 测试期间的 NMS IOU 阈值 浮点数 0.5
test_rpn_pre_nms_topn 在测试期间应用 NMS 之前要保留的得分最高的 RPN 提议数(每个 FPN 级别) 无符号整数 1000
test_rpn_post_nms_topn 在测试期间应用 NMS 之后要保留的得分最高的 RPN 提议数(生成的总数) 无符号整数 1000
test_rpn_nms_threshold 测试期间 RPN 中的 NMS IOU 阈值 浮点数 0.7
min_level 输出特征金字塔的最小级别 无符号整数 2
max_level 输出特征金字塔的最大级别 无符号整数 6
num_scales 每个金字塔级别的锚点倍频程尺度数(例如,如果设置为 3,则锚点尺度为 [2^0, 2^(1/3), 2^(2/3)]) 无符号整数 1
aspect_ratios 表示每个金字塔级别上锚点的纵横比的元组列表 字符串 “[(1.0, 1.0), (1.4, 0.7), (0.7, 1.4)]”
anchor_scale 基础锚点大小到特征金字塔步幅的比例 无符号整数 8
rpn_box_loss_weight 用于调整总损失中 RPN 框损失的权重 浮点数 1.0
fast_rcnn_box_loss_weight 用于调整总损失中 FastRCNN 框回归损失的权重 浮点数 1.0
mrcnn_weight_loss_mask 用于调整总损失中掩码损失的权重 浮点数 1.0
注意

min_levelmax_levelnum_scalesaspect_ratiosanchor_scale 用于确定 MaskRCNN 的锚点生成。 anchor_scale 是基础锚点比例,而 min_levelmax_level 设置不同特征图上比例的范围。 例如,min_level 处特征图的实际锚点比例为 anchor_scale * 2^min_level,而 max_level 处特征图的实际锚点比例为 anchor_scale * 2^max_level。 它将根据实际锚点比例生成不同 aspect_ratios 的锚点。

数据配置

数据配置 (data_config) 指定输入数据源和格式。 这用于训练、评估和推理。 下表总结了详细描述。

字段 描述 数据类型和约束 推荐/典型值
image_size 图像尺寸,以引号内的元组形式表示。 “(高度, 宽度)”表示调整大小和填充后的输入的尺寸。 字符串 “(832, 1344)”
augment_input_data 指定是否扩充数据 布尔值 True
eval_samples 用于评估的样本数 无符号整数
training_file_pattern 用于训练的 TFRecord 路径 字符串
validation_file_pattern 用于验证的 TFRecord 路径 字符串
val_json_file 用于验证的注释文件路径 字符串
num_classes 类数。 如果注释中有 N 个类别,则 num_classes 应为 N+1(背景类) 无符号整数
skip_crowd_during_training 指定是否在训练期间跳过 crowd 布尔值 True
prefetch_buffer_size tf.data.Dataset 使用的预取缓冲区大小(默认值:AUTOTUNE) 无符号整数
shuffle_buffer_size tf.data.Dataset 使用的 shuffle 缓冲区大小(默认值:4096) 无符号整数 4096
n_workers 用于解析和预处理数据的工作线程数(默认值:16) 无符号整数 16
max_num_instances 要解析的最大对象实例数(默认值:200) 无符号整数 200
注意

如果在训练期间发生内存不足错误,请尝试首先设置较小的 image_sizebatch_size。 如果错误仍然存在,请尝试减小 n_workersshuffle_buffer_sizeprefetch_buffer_size 值。 最后,如果原始图像具有非常大的分辨率,请离线调整图像大小并创建新的 tfrecords 以避免将大型图像加载到 GPU 内存。

使用此命令训练 MaskRCNN 模型

复制
已复制!
            

tao model mask_rcnn train [-h] -e <experiment_spec> -d <output_dir> -k <key> [--gpus <num_gpus>] [--gpu_index <gpu_index>] [--log_file <log_file_path>]

必需参数

  • -d, --model_dir:实验输出写入到的文件夹的路径。

  • -k, --key:用于解密模型的加密密钥。

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

可选参数

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

  • --gpu_index:如果机器安装了多个 GPU,则用于导出模型的(离散)GPU 的索引。 请注意,导出只能在单个 GPU 上运行。

  • --log_file:日志文件的路径。 默认路径为 stdout

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

输入要求

  • 输入大小:C * W * H(其中 C = 3,W >= 128,H >= 128,且 W、H 是 2^ max_level 的倍数)

  • 图像格式:JPG

  • 标签格式:COCO 检测

示例用法

以下是使用 MaskRCNN 模型上的 train 命令的示例

复制
已复制!
            

tao model mask_rcnn train --gpus 2 -e /path/to/spec.txt -d /path/to/result -k $KEY

要运行 MaskRCNN 模型的评估,请使用此命令

复制
已复制!
            

tao model mask_rcnn evaluate [-h] -e <experiment_spec_file> -m <model_file> -k <key> [--gpu_index <gpu_index>] [--log_file <log_file_path>]

必需参数

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

  • -m, --model:用于评估的模型文件的路径(仅支持 .tlt 模型)。

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

可选参数

  • --gpu_index:如果机器安装了多个 GPU,则用于导出模型的(离散)GPU 的索引。 请注意,导出只能在单个 GPU 上运行。

  • --log_file:日志文件的路径。 默认路径为 stdout

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

剪枝从模型中删除参数以减小模型大小。 需要重新训练才能重新获得未剪枝模型的性能。

prune 命令包括以下参数

复制
已复制!
            

tao model mask_rcnn prune [-h] -m <pretrained_model> -o <output_dir> -k <key> [-n <normalizer>] [-eq <equalization_criterion>] [-pg <pruning_granularity>] [-pth <pruning threshold>] [-nf <min_num_filters>] [-el [<excluded_list>] [--gpu_index <gpu_index>] [--log_file <log_file>]

必需参数

  • -m, --pretrained_model:预训练模型的路径。

  • -o, --output_dir:包含剪枝模型的输出目录,命名为 model.tlt

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

可选参数

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

  • -n, --normalizermax 表示通过将每个范数除以层内的最大范数来进行归一化;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:excluded_layers 列表。 示例:-i item1 item2(默认值:[])

  • --gpu_index:用于运行评估的 GPU 的索引(当机器安装了多个 GPU 时很有用)。 请注意,评估只能在单个 GPU 上运行。

  • --log_file:日志文件的路径。 默认为 stdout

以下是使用 prune 命令的示例

复制
已复制!
            

tao model mask_rcnn prune -m /workspace/model.step-100.tlt -o /workspace/output -eq union -pth 0.7 -k $KEY

剪枝后,模型需要先重新训练才能用于推理或评估。

模型剪枝后,精度可能会降低。 发生这种情况是因为某些以前有用的权重可能已被删除。 为了重新获得精度,NVIDIA 建议您在同一数据集上重新训练此剪枝后的模型。 为此,请运行 tao model mask_rcnn train 命令,并使用更新后的规格文件,该文件通过设置 pruned_model_path 指向新剪枝的模型。

建议用户在重新训练期间关闭正则化器。 您可以通过将 l1_weight_decayl2_weight_decay 的正则化器权重都设置为 0 来执行此操作。 其他参数可以从之前的训练保留在规格文件中。 train_batch_sizeeval_batch_size 必须保持不变。

MaskRCNN 网络的 inference 工具可用于可视化边界框或在图像目录上生成逐帧 COCO 格式标签。 以下是使用此工具的示例

复制
已复制!
            

tao model mask_rcnn inference [-h] -i <input directory> -r <results directory> -e <experiment spec file> -m <model file> [-k <key>] [-t <bbox confidence threshold>] [--include_mask] [--gpu_index <gpu_index>] [--log_file <log_file_path>]

必需参数

  • -m, --model_path:训练后的 MaskRCNN 模型的路径(.tlt 模型或转换后的 TensorRT 引擎)。

  • -i, --image_dir:用于推理的输入图像目录。 支持的图像格式包括 PNG、JPG 和 JPEG。

  • -e, --experiment_spec:用于训练的实验规格文件的路径。

  • -r, --results_dir:输出带注释图像的目录路径。

可选参数

  • -k, --key:用于加载 .tlt 模型的密钥(如果使用 TensorRT 引擎,则不需要)。

  • -t, --threshold:用于绘制边界框的阈值(默认值:0.6)

  • -c, --class_map:包含类名称的文本文件,该文件应与注释文件中类别 ID 升序排列的类别名称匹配。 如果省略标签文件,则带注释的图像将不会在边界框旁边显示类别名称。 此参数仅 TensorRT 引擎支持。

  • --include_mask:指定是否在带注释的输出上绘制掩码。

  • --gpu_index:如果机器安装了多个 GPU,则用于导出模型的(离散)GPU 的索引。 请注意,导出只能在单个 GPU 上运行。

  • --log_file:日志文件的路径。 默认路径为 stdout

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

导出模型将训练过程与推理分离,并允许在 TAO 环境之外转换为 TensorRT 引擎。 TensorRT 引擎特定于每个硬件配置,应为每个唯一的推理环境生成。 导出的模型可以在训练和部署硬件之间通用使用。

导出的模型格式称为 .etlt。 与 .tlt 模型格式一样,.etlt 是一种加密模型格式,它使用与从中导出的 .tlt 模型相同的密钥。 部署此模型时需要此密钥。

INT8 模式概述

TensorRT 引擎可以在 INT8 模式下生成以提高性能,但需要在引擎创建时使用校准缓存。 如果在运行 export--data_type 标志设置为 int8,则使用校准张量文件生成校准缓存。 预先生成校准信息并缓存它消除了在推理机器上校准模型的需要。 移动校准缓存通常比移动校准张量文件方便得多,因为它是一个小得多的文件,可以与导出的模型一起移动。 使用校准缓存还可以加快引擎创建速度,因为构建缓存可能需要几分钟才能生成,具体取决于 Tensorfile 的大小和模型本身。

导出工具可以通过使用以下选项之一摄取训练数据来生成 INT8 校准缓存

  • 选项 1:使用训练数据加载器加载训练图像以进行 INT8 校准。 此选项现在是支持多个图像目录的推荐方法,通过利用训练数据集加载器。 这也确保了校准期间数据的两个重要方面

    • INT8 校准步骤中的数据预处理与训练过程中的数据预处理相同。

    • 数据批次在整个训练数据集中随机采样,从而提高了 INT8 模型的准确性。

  • 选项 2:将工具指向要用于校准模型的图像目录。 对于此选项,请确保创建随机图像的子采样目录,该目录最能代表您的训练数据集。

FP16/FP32 模型

如果您需要在 INT8 精度下运行推理,则只需要 calibration.bin。 对于基于 FP16/FP32 的推理,导出步骤要简单得多:您只需提供来自训练/重新训练步骤的 .tlt 模型即可转换为 .etlt 格式。

导出 MaskRCNN 模型

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

复制
已复制!
            

tao model mask_rcnn export [-h] -m <path to the .tlt model file generated by tao model train> -k <key> --experiment_spec <path to experiment spec file> [-o <path to output file>] [--gen_ds_config <Flag to generate ds config and label file>] [--gpu_index <gpu_index>] [--log_file <log_file_path>]

必需参数

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

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

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

可选参数

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

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

  • --gpu_index:如果机器安装了多个 GPU,则用于导出模型的(离散)GPU 的索引。 请注意,导出只能在单个 GPU 上运行。

  • --log_file:日志文件的路径。 默认路径为 stdout

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

注意

MaskRCNN 不支持 QAT。

示例用法

以下是以 INT8 模式导出 MaskRCNN 模型的示例命令

复制
已复制!
            

tao model mask_rcnn export -m /ws/model.step-25000.tlt \ -k nvidia_tlt \ -e /ws/maskrcnn_train_resnet50.txt

有关 TensorRT 引擎生成、验证和 int8 校准,请参阅 TAO 部署文档

请参阅集成 MaskRCNN 模型以了解有关将 MaskRCNN 模型部署到 DeepStream 的更多信息。

上一篇 实例分割的数据输入
下一篇 图像分类 (TF1)
© 版权所有 2024, NVIDIA。 上次更新日期:2024 年 10 月 15 日。