TAO v5.5.0

DSSD

使用 DSSD,支持以下任务

  • dataset_convert

  • train

  • evaluate

  • prune

  • inference

  • export

这些任务可以通过命令行按照以下约定从 TAO Launcher 调用

复制
已复制!
            

tao model dssd <sub_task> <args_per_subtask>

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

TAO 中的对象检测应用程序期望使用 KITTI 格式的数据进行训练和评估。

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

dssd 数据加载器支持原始 KITTI 格式的数据以及 TFrecords。

要使用 TFRecords 优化跨数据批次的迭代,需要首先将原始输入数据转换为 TFRecords 格式。这可以使用 dataset_convert 子任务完成。目前,支持 KITTI 和 COCO 格式。

dataset_convert 工具需要一个配置文件作为输入。以下部分包含配置文件的详细信息和示例。

数据集转换器的配置文件

dataset_convert 工具提供多个可配置参数。这些参数封装在一个 spec 文件中,用于将数据从原始注释格式转换为训练器可以摄取的 TFRecords 格式。可以使用 kitti_configcoco_config 分别配置 KITTI 和 COCO 格式。在一个 spec 文件中,您只能使用两者之一。spec 文件是 prototxt 格式文件,具有以下全局参数

  • kitti_config:一个嵌套的 prototxt 配置,包含多个输入参数

  • coco_config:一个嵌套的 prototxt 配置,包含多个输入参数

  • image_directory_path:数据集根目录的路径。image_dir_name 将附加到此路径以获取输入图像,并且必须与实验 spec 文件中指定的路径相同。

  • target_class_mapping:prototxt 字典,将 tfrecords 中的类名称映射到网络中要训练的目标类。

kitti_config

以下是 kitti_config 字段的可配置参数的描述

参数

数据类型

默认值

描述

支持的值

root_directory_path 字符串 数据集根目录的路径
image_dir_name 字符串 包含图像的目录的相对路径,相对于 root_directory_path 中的路径。
label_dir_name 字符串 包含标签的目录的相对路径,相对于 root_directory_path 中的路径。
partition_mode 字符串 将数据划分为多个 folds 时采用的方法。支持两种方法
  • 随机分区:数据分为 2 个 folds,trainval。此模式需要设置 val_split 参数。
  • 序列式分区:数据根据可用序列的数量划分为 n 个分区(由 num_partitions 参数定义)。
  • random
  • sequence
num_partitions 整数 2(如果 partition_mode 为 random) 用于拆分数据的分区数(N folds)。当分区模型设置为 random 时,此字段将被忽略,因为默认情况下仅生成两个分区:valtrain。在序列模式下,数据将拆分为 n-folds。分区数最好少于 kitti_sequence_to_frames 文件中序列的总数。 n=2 用于随机分区,n < kitti_sequence_to_frames_file 中的序列数
image_extension 字符串 .png image_dir_name 参数中图像的扩展名。 .png .jpg .jpeg
val_split 浮点数 20 要为验证分离的数据百分比。这仅在“random”分区模式下有效。此分区在生成的 TFrecords 的 fold 0 中可用。在 dataset_config 中将验证 fold 设置为 0 0-100
kitti_sequence_to_frames_file 字符串 KITTI 序列到帧映射文件的名称。此文件必须存在于 root_directory_path 中提到的数据集根目录中。
num_shards 整数 10 每个 fold 的分片数。 1-20

下面显示的示例配置文件将 100% KITTI 数据集转换为训练集。

复制
已复制!
            

kitti_config { root_directory_path: "/workspace/tao-experiments/data/" image_dir_name: "training/image_2" label_dir_name: "training/label_2" image_extension: ".png" partition_mode: "random" num_partitions: 2 val_split: 0 num_shards: 10 } image_directory_path: "/workspace/tao-experiments/data/" target_class_mapping { key: "car" value: "car" } target_class_mapping { key: "pedestrian" value: "pedestrian" } target_class_mapping { key: "cyclist" value: "cyclist" } target_class_mapping { key: "van" value: "car" } target_class_mapping { key: "person_sitting" value: "pedestrian" } target_class_mapping { key: "truck" value: "car" }

coco_config

以下是 coco_config 字段的可配置参数的描述

参数

数据类型

默认值

描述

支持的值

root_directory_path 字符串 数据集根目录的路径
image_dir_names 字符串(重复) 包含图像的目录的相对路径,相对于 root_directory_path 中的路径,用于每个分区。
annotation_files 字符串(重复) 包含 JSON 文件的目录的相对路径,相对于 root_directory_path 中的路径,用于每个分区。
num_partitions 整数 2 数据中的分区数。分区数必须与 image_dir_namesannotation_files 的列表长度匹配。默认情况下,生成两个分区:valtrain n==len(annotation_files)
num_shards 整数(重复) [10] 每个分区的分片数。如果仅提供一个值,则相同的分片数将应用于所有分区

下面显示的示例配置文件转换具有训练和验证数据的 COCO 数据集,其中验证的分片数为 32,训练的分片数为 256。

复制
已复制!
            

coco_config { root_directory_path: "/workspace/tao-experiments/data/coco" image_dir_names: ["val2017", "train2017"] annotation_files: ["annotations/instances_val2017.json", "annotations/instances_train2017.json"] num_partitions: 2 num_shards: [32, 256] } image_directory_path: "/workspace/tao-experiments/data/coco"

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

下面描述了 dataset_convert 工具

复制
已复制!
            

tao model dssd dataset-convert [-h] -d DATASET_EXPORT_SPEC -o OUTPUT_FILENAME [-v]

您可以使用以下参数

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

  • -d, --dataset-export-spec:检测数据集 spec 的路径,其中包含导出 .tfrecord 文件的配置

  • -o, --output_filename:输出文件名

  • -v:启用详细模式以显示调试消息

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

复制
已复制!
            

tao model dssd dataset_convert -d /path/to/spec.txt -o /path/to/tfrecords/train

以下是 DSSD spec 文件的示例。它有六个主要组件:dssd_configtraining_configeval_confignms_configaugmentation_configdataset_config。spec 文件的格式是 protobuf 文本 (prototxt) 消息,其每个字段可以是基本数据类型或嵌套消息。下表总结了 spec 文件的顶层结构。

复制
已复制!
            

random_seed: 42 dssd_config { aspect_ratios: "[[1.0, 2.0, 0.5], [1.0, 2.0, 0.5, 3.0, 1.0/3.0], [1.0, 2.0, 0.5, 3.0, 1.0/3.0], [1.0, 2.0, 0.5, 3.0, 1.0/3.0], [1.0, 2.0, 0.5], [1.0, 2.0, 0.5]]" scales: "[0.07, 0.15, 0.33, 0.51, 0.69, 0.87, 1.05]" two_boxes_for_ar1: true clip_boxes: false variances: "[0.1, 0.1, 0.2, 0.2]" arch: "resnet" nlayers: 18 freeze_bn: false freeze_blocks: 0 } training_config { batch_size_per_gpu: 16 num_epochs: 80 enable_qat: false learning_rate { soft_start_annealing_schedule { min_learning_rate: 5e-5 max_learning_rate: 2e-2 soft_start: 0.15 annealing: 0.8 } } regularizer { type: L1 weight: 3e-5 } } eval_config { validation_period_during_training: 10 average_precision_mode: SAMPLE batch_size: 16 matching_iou_threshold: 0.5 } nms_config { confidence_threshold: 0.01 clustering_iou_threshold: 0.6 top_k: 200 } augmentation_config { output_width: 300 output_height: 300 output_channel: 3 image_mean { key: 'b' value: 103.9 } image_mean { key: 'g' value: 116.8 } image_mean { key: 'r' value: 123.7 } } dataset_config { data_sources: { # option 1 tfrecords_path: "/path/to/train/tfrecord" # option 2 # label_directory_path: "/path/to/train/labels" # image_directory_path: "/path/to/train/images" } include_difficult_in_training: true target_class_mapping { key: "car" value: "car" } target_class_mapping { key: "pedestrian" value: "pedestrian" } target_class_mapping { key: "cyclist" value: "cyclist" } target_class_mapping { key: "van" value: "car" } target_class_mapping { key: "person_sitting" value: "pedestrian" } validation_data_sources: { label_directory_path: "/path/to/val/labels" image_directory_path: "/path/to/val/images" } }

训练配置

训练配置 (training_config) 定义了训练、评估和推理所需的参数。下表总结了详细信息。

字段 描述 数据类型和约束 推荐/典型值

batch_size_per_gpu

每个 GPU 的批次大小,因此有效批次大小为
“batch_size_per_gpu * num_gpus”

无符号整数,正数

num_epochs 训练网络的 epoch 数 无符号整数,正数。

enable_qat

是否使用量化感知训练

布尔值

注意:DSSD 不支持加载剪枝后的非 QAT 模型并使用启用 QAT 的模型重新训练
反之亦然。例如,要获得剪枝后的 QAT 模型,
请在启用 QAT 或 enable_qat=True 的情况下执行初始训练。

learning_rate

仅支持具有这些嵌套参数的 soft_start_annealing_schedule

1. min_learning_rate:整个实验期间的最小学习率
2. max_learning_rate:整个实验期间的最大学习率
3. soft_start:预热前的时间间隔(以进度百分比表示
介于 0 和 1 之间)
4. annealing:开始退火学习率的时间

消息类型。

regularizer

此参数配置训练时要使用的正则化器,并包含
以下嵌套参数

1. type:要使用的正则化器类型。NVIDIA 支持 NO_REG、L1 和 L2
2. weight:正则化器权重的浮点值

消息类型。

L1(注意:NVIDIA 建议在剪枝前训练网络时使用 L1 正则化器,因为 L1 正则化有助于使网络权重更易于剪枝。)
pruning as L1 regularization helps make the network weights more prunable.)

max_queue_size 数据加载中预取批次的数量 无符号整数,正数
n_workers 数据加载的工作线程数(使用 tfrecords 时设置为小于 4) 无符号整数,正数
use_multiprocessing 是否使用 keras 序列数据加载器的多处理模式 布尔值
visualizer 训练可视化配置 消息类型
early_stopping 提前停止配置 消息类型

训练可视化配置

训练期间的可视化由 visualizer 参数配置。下表描述了它的参数。

参数 描述 数据类型和约束 推荐/典型值
enabled 启用或禁用此功能的布尔标志 布尔值。
num_images 要在 TensorBoard 中可视化的最大图像数。 整数。 3

如果启用了可视化,则将在训练期间生成 tensorboard 日志,包括学习率、训练损失、验证损失、验证 mAP 和每个类的验证 AP 的图表。带有 bbox 的增强图像也将在 tensorboard 中生成。

提前停止

下表描述了提前停止的参数。

参数 描述 数据类型和约束 推荐/典型值
monitor 为了启用提前停止而要监控的指标。 字符串 loss
patience 停止训练之前检查 monitor 值的次数。 整数
min_delta monitor 值的最小值增量,低于该值我们认为它没有减少。 浮点数

评估配置

评估配置 (eval_config) 定义了在训练期间或作为独立过程进行评估所需的参数。下表总结了详细信息。

字段 描述 数据类型和约束 推荐/典型值
validation_period_during_training 每次验证的训练 epoch 数。 无符号整数,正数 10

average_precision_mode

平均精度 (AP) 计算模式可以是 SAMPLE 或 INTEGRATE。SAMPLE
用作 VOC 指标,用于 VOC 2009 或更早版本。INTEGRATE 用于 VOC 2010 或更高版本。

枚举类型(SAMPLE 或 INTEGRATE)

SAMPLE

matching_iou_threshold 预测框和真实框的最低 IoU,可以被认为是匹配。 布尔值 0.5
visualize_pr_curve 启用或禁用 Precision-Recall 曲线可视化的布尔标志。 布尔值

NMS 配置

NMS 配置 (nms_config) 定义了 NMS 后处理所需的参数。NMS 配置适用于训练、验证、评估、推理和导出中模型的 NMS 层。下表总结了详细信息。

字段 描述 数据类型和约束 推荐/典型值
confidence_threshold 置信度得分低于 confidence_threshold 的框将在应用 NMS 之前被丢弃。 浮点数 0.01
cluster_iou_threshold IoU 阈值,低于该阈值的框将通过 NMS 过程。 浮点数 0.6
top_k NMS keras 层之后将输出 top_k 个框。如果有效框的数量小于 k,则返回的数组将填充置信度得分为 0 的框。 无符号整数 200
infer_nms_score_bits 在 TensorRT OSS 的 NMS 插件中表示得分值的位数。有效范围是 [1, 10] 中的整数。将其设置为任何其他值将使其回退到普通 NMS。目前,此优化的 NMS 插件仅在 FP16 中可用,但它也应由 INT8 数据类型选择,因为 TensorRT OSS 中没有 INT8 NMS,因此将选择 FP16 中最快的实现。如果回退到普通 NMS,则构建引擎时的实际数据类型将决定运行时的确切精度(FP16 或 FP32)。 整数。在 [1, 10] 区间内。 0

增强配置

augmentation_config 参数定义了预处理后的图像大小。SSD 论文中的增强方法将在训练期间执行,包括随机翻转、放大、缩小和颜色抖动。增强后的图像将调整为 augmentation_config 中定义的输出形状。在评估过程中,仅执行调整大小。

注意

增强方法的详细信息可以在 论文的第 2.2 节和 3.6 节中找到。

字段 描述 数据类型和约束 推荐/典型值
output_channel 增强管道的输出图像通道。 整数
output_width 预处理图像和网络输入的宽度。 整数,32 的倍数
output_height 预处理图像和网络输入的高度。 整数,32 的倍数
random_crop_min_scale RandomCrop 增强的最小补丁比例。默认值:0.3 浮点数 >= 1.0
random_crop_max_scale RandomCrop 增强的最大补丁比例。默认值:1.0 浮点数 >= 1.0
random_crop_min_ar RandomCrop 增强的最小纵横比。默认值:0.5 浮点数 > 0
random_crop_max_ar RandomCrop 增强的最大纵横比。默认值:2.0 浮点数 > 0
zoom_out_min_scale ZoomOut 增强的最小比例。默认值:1.0 浮点数 >= 1.0
zoom_out_max_scale ZoomOut 增强的最大比例。默认值:4.0 浮点数 >= 1.0
brightness 颜色抖动增强中的亮度增量。默认值:32 整数 >= 0
contrast 颜色抖动增强中的对比度增量因子。默认值:0.5 [0, 1) 范围内的浮点数
saturation 颜色抖动增强中的饱和度增量因子。默认值:0.5 [0, 1) 范围内的浮点数
hue 颜色抖动增强中的色调增量。默认值:18 整数 >= 0
random_flip 执行随机水平翻转的概率。默认值:0.5 [0, 1) 范围内的浮点数
image_mean 用于指定图像平均值的键/值对。如果省略,图像预处理将使用 ImageNet 平均值。如果设置,根据 output_channel,必须配置 ‘r/g/b’ 或 ‘l’ 键/值对。 字典
注意

如果设置 random_crop_min_scale = random_crop_max_scale = 1.0,则 RandomCrop 增强将被禁用。同样,设置 zoom_out_min_scale = zoom_out_max_scale = 1,ZoomOut 增强将被禁用。并且所有颜色抖动增量值都设置为 0,颜色抖动增强将被禁用。

数据集配置

dataset_config 参数定义了训练数据集、验证数据集和 target_class_mapping 的路径。

字段 描述 数据类型和约束 推荐/典型值
data_sources 训练数据集的路径。当使用 tfrecord 作为数据集摄取时,设置
  • tfrecords_path:tfrecords 的路径

当使用原始 KITTI 标签和图像时,设置

  • label_directory_path:标签目录的路径
  • image_directory_path:图像目录的路径
消息类型
include_difficult_in_training 指定是否在标签中包含困难对象(Pascal VOC 困难标签或 KITTI 遮挡对象) 布尔值 true
validation_data_sources 训练数据集图像和标签的路径 消息类型
target_class_mapping 标签中类到目标类的映射 消息类型
注意

data_sourcesvalidation_data_sources 都是重复字段。可以将多个数据集添加到 sources。

DSSD 配置

DSSD 配置 (dssd_config) 定义了构建 DSSD 模型所需的参数。下表总结了详细信息。

字段 描述 数据类型和约束 推荐/典型值
aspect_ratios_global 在 aspect_ratios_global 中定义的纵横比的锚框将为用于预测的每个特征层生成。请注意,aspect_ratios_global 或 aspect_ratios 参数是必需的;您无需同时指定两者。 字符串 “[1.0, 2.0, 0.5, 3.0, 0.33]”
aspect_ratios 外部列表的长度必须等同于用于锚框生成的特征层数,第 i 层将具有在 aspect_ratios[i] 中定义的纵横比的锚框。请注意,aspect_ratios_global 或 aspect_ratios 参数是必需的;您无需同时指定两者。 字符串 “[[1.0,2.0,0.5], [1.0,2.0,0.5], [1.0,2.0,0.5], [1.0,2.0,0.5], [1.0,2.0,0.5], [1.0, 2.0, 0.5, 3.0, 0.33]]”
two_boxes_for_ar1 此设置仅与纵横比为 1.0 的层相关。如果 two_boxes_for_ar1 为 true,则将生成两个纵横比为 1 的框:一个具有此层的比例,另一个具有此层比例和下一层比例的几何平均值。 布尔值 True
clip_boxes 如果此参数为 True,则所有角点锚框都将被截断,使其完全位于特征图像内。 布尔值 False
scales 包含每个卷积预测器层的比例因子的正浮点数列表。此列表的元素数必须比预测器层数多一个,以便在 two_boxes_for_ar1 为 true 时,最后一层的第二个纵横比 1.0 框可以具有适当的比例。除了此列表中的最后一个元素外,每个正浮点数都是该层中框的比例因子。例如,如果一层的比例为 0.1,则为该层生成的纵横比为 1 的锚框(如果 two_boxes_for_ar1 设置为 True,则为第一个纵横比 1 框)的高度和宽度将为 0.1*min (img_h, img_w)。min_scale 和 max_scale 是两个正浮点数。如果两者都出现在配置中,则程序可以通过均匀分割 min_scale 和 max_scale 之间的空间来自动生成比例。 字符串 “[0.05, 0.1, 0.25, 0.4, 0.55, 0.7, 0.85]”
min_scale/max_scale 如果两者都出现在配置中,则将通过均匀分割 min_scale 和 max_scale 之间的空间来生成比例。 浮点数
variances 包含 4 个正浮点数的列表。这四个浮点数按顺序表示框中心 x、框中心 y、对数框高度和对数框宽度的方差。框中心 (cx, cy) 和相对于锚的对数框大小(高度/宽度)的框偏移量将除以它们各自的方差值。因此,较大的方差会导致两个不同框在编码偏移量上的差异不那么显着。
steps 引号内的可选列表,其长度是用于预测的特征层数。元素应为浮点数或两个浮点数的元组/列表。步长定义锚框中心点应间隔多少像素。如果元素是浮点数,则垂直和水平边距相同。否则,第一个值是 step_vertical,第二个值是 step_horizontal。如果未提供步长,则锚框将均匀分布在图像内部。 字符串
offsets 引号内的可选浮点数列表,其长度等于用于预测的特征层数。第一个锚框将具有从左侧和顶部边框偏移 offsets[i]*steps[i] 像素的边距。如果未提供偏移量,则默认值为 0.5。 字符串
arch 用于特征提取的骨干网络。目前,支持“resnet”、“vgg”、“darknet”、“googlenet”、“mobilenet_v1”、“mobilenet_v2”和“squeezenet”。 字符串 resnet
nlayers 特定 arch 中的 conv 层数。对于“resnet”,支持 10、18、34、50 和 101。对于“vgg”,支持 16 和 19。对于“darknet”,支持 19 和 53。所有其他网络都没有此配置,用户应从配置文件中删除此参数。 无符号整数
pred_num_channels 此设置控制 DSSD 预测模块中卷积层的通道数。将此值设置为 0 将禁用 DSSD 预测模块。此设置的受支持值为 0、256、512 和 1024。较大的值会产生较大的网络,通常意味着网络更难训练。 无符号整数 512
freeze_bn 是否在训练期间冻结所有批归一化层。 布尔值 False
freeze_blocks 要在模型训练期间冻结的块 ID 列表。您可以选择冻结模型中的某些 CNN 块,以使训练更稳定和/或更易于收敛。块的定义对于特定架构是启发式的。例如,按步幅或按模型中的逻辑块等。但是,块 ID 号按顺序标识模型中的块,因此您不必在训练时知道块的确切位置。作为一般原则,块 ID 越小,越接近模型输入;块 ID 越大,越接近模型输出。您可以将整个模型划分为多个块,并选择性地冻结其中的一部分。请注意,对于 FasterRCNN,您只能冻结 ROI 池化层之前的块。ROI 池化层之后的任何层都不会被冻结。对于不同的骨干网络,块数和每个块的块 ID 是不同的。值得详细解释一下如何为每个骨干网络指定块 ID。 list(重复整数)
  • ResNet 系列。对于 ResNet 系列,可用于冻结的块 ID 是 [0, 1, 2, 3](包括端点)的任何子集
  • VGG 系列。对于 VGG 系列,可用于冻结的块 ID 是 [1, 2, 3, 4, 5](包括端点)的任何子集
  • GoogLeNet。对于 GoogLeNet,可用于冻结的块 ID 是 [0, 1, 2, 3, 4, 5, 6, 7](包括端点)的任何子集
  • MobileNet V1。对于 MobileNet V1,可用于冻结的块 ID 是 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11](包括端点)的任何子集
  • MobileNet V2。对于 MobileNet V2,可用于冻结的块 ID 是 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13](包括端点)的任何子集
  • DarkNet。对于 DarkNet 19 和 DarkNet 53,可用于冻结的块 ID 是 [0, 1, 2, 3, 4, 5](包括端点)的任何子集

使用以下命令训练 DSSD 模型

复制
已复制!
            

tao model dssd train [-h] -e <experiment_spec> -r <output_dir> -k <key> [--gpus <num_gpus>] [--gpu_index <gpu_index>] [--use_amp] [--log_file <log_file>] [-m <resume_model_path>] [--initial_epoch <initial_epoch>]

必需参数

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

  • -k, --key:提供加密密钥以解密模型。

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

可选参数

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

  • --gpu_index:用于运行训练的 GPU 索引。当机器安装了多个 GPU 时,我们可以指定用于运行训练的 GPU 索引。

  • --use_amp:用于启用 AMP 训练的标志。

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

  • -m, --resume_model_weights:预训练模型或要继续训练的模型的路径。

  • --initial_epoch:要从其恢复的 Epoch 编号。

  • --use_multiprocessing:在数据生成器中启用多处理模式。

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

输入要求

  • 输入大小:C * W * H(其中 C = 1 或 3,W >= 128,H >= 128)

  • 图像格式:JPG、JPEG、PNG

  • 标签格式:KITTI 检测

示例用法

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

复制
已复制!
            

tao model dssd train --gpus 2 -e /path/to/dssd_spec.txt -r /path/to/result -k $KEY

使用以下命令为 DSSD 模型运行评估

复制
已复制!
            

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

必需参数

  • -m, --model:要评估的 .tlt 模型或 TensorRT 引擎。

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

可选参数

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

  • -k, --key.tlt 模型的编码密钥

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

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

以下是评估 DSSD 模型的示例命令

复制
已复制!
            

tao model dssd evaluate -m /path/to/trained_tlt_dssd_model -k <model_key> -e /path/to/dssd_spec.txt

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

复制
已复制!
            

tao model dssd inference [-h] -i <input directory> -o <output annotated image directory> -e <experiment spec file> -m <model file> -k <key> [-l <output label directory>] [-t <bbox filter threshold>] [--gpu_index <gpu_index>] [--log_file <log_file>]

必需参数

  • -m, --model:预训练模型(TAO 模型)的路径。

  • -i, --in_image_dir:用于推理的输入图像目录。

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

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

  • -e, --config_path:用于训练的实验 spec 文件的路径。

可选参数

  • -t, --threshold:用于绘制 bbox 和转储标签文件的阈值。(默认值:0.3)

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

  • -l, --out_label_dir:用于输出 KITTI 标签的目录。

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

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

以下是使用 DSSD 模型进行推理的示例

复制
已复制!
            

tao model dssd inference -i /path/to/input/images_dir -o /path/to/output/dir -m /path/to/trained_tlt_dssd_model -k <model_key> -e /path/to/dssd_spec.txt

剪枝从模型中删除参数,以减小模型大小,而不会损害模型的完整性。

prune 命令包括以下参数

复制
已复制!
            

tao model dssd prune [-h] -m <pretrained_model> -o <output_file> -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_file:输出检查点的路径。

  • -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 dssd prune -m /workspace/output/weights/resnet_003.tlt \ -o /workspace/output/weights/resnet_003_pruned.tlt \ -eq union \ -pth 0.7 -k $KEY

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

模型剪枝后,精度可能会略有下降。发生这种情况是因为某些以前有用的权重可能已被删除。为了恢复精度,NVIDIA 建议您在同一数据集上重新训练此剪枝后的模型。为此,请使用 tao model dssd train 命令以及更新后的 spec 文件,该文件指向新剪枝后的模型作为预训练模型文件。

建议用户在 DSSD 的 training_config 中关闭正则化器,以便在重新训练剪枝模型时恢复精度。 您可以通过将正则化器类型设置为 NO_REG 来执行此操作,如此处所述。 所有其他参数可以在之前训练的 spec 文件中保留。

注意

DSSD 不支持加载剪枝的非 QAT 模型并启用 QAT 重新训练,反之亦然。 例如,要获得剪枝的 QAT 模型,请在启用 QAT 或 enable_qat=True 的情况下执行初始训练。

TAO 包含 export 命令,用于导出和准备 TAO 模型以部署到 DeepStreamexport 命令可以选择性地为 TensorRT INT8 引擎校准生成校准缓存。

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

INT8 模式概述

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

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

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

FP16/FP32 模型

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

fp16_fp32_export.png

导出命令

使用以下命令导出 DSSD 模型

复制
已复制!
            

tao model dssd 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>] [--cal_json_file <path to calibration json file>] [--gen_ds_config] [--gpu_index <gpu_index>] [--log_file <log_file_path>] [--verbose]

必需参数

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

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

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

可选参数

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

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

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

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

QAT 导出模式所需参数

  • --cal_json_file:包含 QAT 模型张量比例的 json 文件的路径。 如果要生成 QAT 模型的引擎,则此参数是必需的。

注意

导出使用 QAT 训练的模型时,用于校准激活的张量比例因子将从模型中剥离出来,并序列化为 cal_json_file 参数定义的 TensorRT 可读缓存文件。

导出模型

这是一个导出 DSSD 模型的示例命令

复制
已复制!
            

tao model dssd export -m $USER_EXPERIMENT_DIR/data/dssd/dssd_kitti_retrain_epoch12.tlt \ -o $USER_EXPERIMENT_DIR/data/dssd/dssd_kitti_retrain.int8.etlt \ -e $SPECS_DIR/dssd_kitti_retrain_spec.txt \ --key $KEY

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

有关部署到 DeepStream,请参阅部署 DSSD 到 DeepStream

上一篇 SSD
下一篇 RetinaNet
© 版权所有 2024, NVIDIA。 上次更新于 2024 年 10 月 15 日。