TAO v5.5.0

EfficientDet (TF2)

使用 EfficientDet,支持以下任务

  • dataset_convert

  • train

  • evaluate

  • prune

  • inference

  • export

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

复制
已复制!
            

tao model efficientdet_tf2 <sub_task> <args_per_subtask>

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

EfficientDet 期望用于训练或验证的图像目录以及 COCO 格式的注释 JSON 文件。有关 EfficientDet 的数据格式的更多信息,请参阅数据注释格式页面。

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

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

以下描述了 dataset_convert 工具

复制
已复制!
            

tao model efficientdet_tf2 dataset-convert [-h] -e <conversion spec file>

以下是数据转换规范文件的示例。规范文件的格式为 YAML,配置参数位于 dataset_convert 下。

复制
已复制!
            

dataset_convert: image_dir: '/workspace/tao-experiments/data/raw-data/train2017/' annotations_file: '/workspace/tao-experiments/data/raw-data/annotations/instances_train2017.json' output_dir: '/workspace/tao-experiments/data' tag: 'train' num_shards: 256 include_masks: True

下表总结了每个参数的详细信息

字段 描述 数据类型和约束 推荐/典型值
image_dir 存储原始图像的目录路径 字符串
annotations_file 注释 JSON 文件的路径 字符串
output_dir 保存 TFRecords 的输出目录 字符串
tag 转换后的 TFRecords 的分片数 整数 256
num_shards 用于重新训练的 TAO 剪枝模型的路径(如果有) 字符串
include_mask 是否在转换期间包含分割真值 布尔值 False
注意

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


以下示例显示了如何使用命令

复制
已复制!
            

tao model efficientdet_tf2 dataset_convert -i /path/to/convert.yaml

以下是 EfficientDet 规范文件的示例。它有 7 个主要组成部分:datasetmodeltrainevaluateinferencepruneexport 配置,以及加密密钥 (encryption_key) 和结果目录 (results_dir)。

复制
已复制!
            

dataset: loader: prefetch_size: 4 shuffle_file: False shuffle_buffer: 10000 cycle_length: 32 block_length: 16 max_instances_per_image: 100 skip_crowd_during_training: True num_classes: 91 train_tfrecords: - '/datasets/coco/train-*' val_tfrecords: - '/datasets/coco/val-*' val_json_file: '/datasets/coco/annotations/instances_val2017.json' augmentation: rand_hflip: True random_crop_min_scale: 0.1 random_crop_max_scale: 2 auto_color_distortion: False auto_translate_xy: False train: optimizer: name: 'sgd' momentum: 0.9 lr_schedule: name: 'cosine' warmup_epoch: 5 warmup_init: 0.0001 learning_rate: 0.2 amp: True checkpoint: "/weights/efficientnet-b0_500.tlt" num_examples_per_epoch: 100 moving_average_decay: 0.999 batch_size: 20 checkpoint_interval: 5 l2_weight_decay: 0.00004 l1_weight_decay: 0.0 clip_gradients_norm: 10.0 image_preview: True qat: False random_seed: 42 pruned_model_path: '' num_epochs: 200 model: name: 'efficientdet-d0' aspect_ratios: '[(1.0, 1.0), (1.4, 0.7), (0.7, 1.4)]' anchor_scale: 4 min_level: 3 max_level: 7 num_scales: 3 freeze_bn: False freeze_blocks: [] input_width: 512 input_height: 512 evaluate: batch_size: 8 num_samples: 5000 max_detections_per_image: 100 checkpoint: '' export: batch_size: 8 dynamic_batch_size: True min_score_thresh: 0.4 checkpoint: "" onnx_file: "" inference: checkpoint: "" image_dir: "" dump_label: False batch_size: 1 prune: checkpoint: "" normalizer: 'max' output_path: "" equalization_criterion: 'union' granularity: 8 threshold: 0.5 min_num_filters: 16 excluded_layers: [] encryption_key: 'nvidia_tlt' results_dir: '/workspace/results_dir' num_gpus: 1 gpu_ids: [0]

规范文件的格式为 YAML。下表总结了规范文件的顶级结构

字段 描述
dataset 与数据源和数据加载器相关的配置
model 与模型构建相关的配置
train 与训练过程相关的配置
evaluate 与独立评估过程相关的配置
prune 用于剪枝训练模型的配置
inference 用于运行模型推理的配置
export 用于导出训练模型的配置
encryption_key 全局加密密钥
results_dir 保存实验结果和状态日志的目录

训练配置

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

字段 描述 数据类型和约束 推荐/典型值
batch_size 每个 GPU 的批量大小,因此有效批量大小为 batch_size_per_gpu * num_gpus。 无符号整数,正数 16
num_epochs 训练网络的 epoch 数 无符号整数,正数 300
num_examples_per _epoch 训练集中的图像总数 无符号整数,正数
checkpoint 预训练模型的路径(如果有) 字符串
pruned_model_path 用于重新训练的 TAO 剪枝模型的路径(如果有) 字符串
checkpoint_interval 每个模型检查点/验证应运行的训练 epoch 数 无符号整数,正数 10
amp 是否使用混合精度训练 布尔值
moving_average_decay 移动平均衰减 浮点数 0.9999
l2_weight_decay L2 权重衰减 浮点数
l1_weight_decay L1 权重衰减 浮点数
random_seed 随机种子 无符号整数,正数 42
clip_gradients_norm 按范数值裁剪梯度 浮点数 5
qat 启用量化感知训练 布尔值 False
optimizer 优化器配置
lr_schedule 学习率调度器配置

优化器配置 (train.optimizer) 指定优化器的类型和参数。 +———————+——————————————————————————————————-+——————————-+————————————————————————————–+ | 字段 | 描述 | 数据类型和约束 | 推荐/典型值 | +———————+——————————————————————————————————-+——————————-+————————————————————————————–+ | name | 优化器名称(仅支持 sgd) | 字符串 | ‘sgd’ | +———————+——————————————————————————————————-+——————————-+————————————————————————————–+ | momentum | 动量 | 浮点数 | 0.9 | +———————+——————————————————————————————————-+——————————-+————————————————————————————–+

学习率调度器配置 (train.lr_schedule) 指定学习率调度器的类型和参数。 +———————+——————————————————————————————————-+——————————-+————————————————————————————–+ | 字段 | 描述 | 数据类型和约束 | 推荐/典型值 | +———————+——————————————————————————————————-+——————————-+————————————————————————————–+ | name | 学习率调度器的名称。可用选项为 cosinesoft_anneal | 字符串 | ‘cosine’ | +———————+——————————————————————————————————-+——————————-+————————————————————————————–+ | warmup_epoch | 学习率调度中的预热 epoch 数 | 无符号整数,正数 | – | +———————+——————————————————————————————————-+——————————-+————————————————————————————–+ | warmup_init | 预热期间的初始学习率 | 浮点数 | – | +———————+——————————————————————————————————-+——————————-+————————————————————————————–+ | learning_rate | 最大学习率 | 浮点数 | – | +———————+——————————————————————————————————-+——————————-+————————————————————————————–+ | annealing_epoch | 在此点开始退火至 warmup_init | 无符号整数,正数 | – | +———————+——————————————————————————————————-+——————————-+————————————————————————————–+

评估配置

评估配置 (evaluate) 定义了训练期间或独立评估所需的参数。下表总结了详细信息。

字段 描述 数据类型和约束 推荐/典型值
checkpoint 要评估的 .tlt 模型的路径 字符串
max_detections_per_image 要可视化的最大检测数 无符号整数,正数 100
batch_size 每个 GPU 的批量大小,因此有效批量大小为 batch_size_per_gpu * num_gpus 无符号整数,正数 16
num_samples 用于评估的样本数 无符号整数
label_map 存储索引到标签名称映射的 YAML 文件。(可选)如果设置,将计算每类 AP 指标 字符串
start_eval_epoch 评估将在此 epoch 之后开始(默认值:1) 无符号整数
results_dir 存储评估结果的目录(可选) 无符号整数

推理配置

推理配置 (inference) 定义了使用训练后的 .tlt 模型进行独立推理所需的参数。下表总结了详细信息。

字段 描述 数据类型和约束 推荐/典型值
checkpoint 要运行推理的 .tlt 模型的路径 字符串
image_dir 图像目录的路径 字符串
output_dir 将保存带注释图像的输出目录的路径 字符串
dump_label 是否以 KITTI 格式转储标签文件 布尔值
batch_size 运行推理的批量大小 无符号整数
min_score_thresh 渲染预测边界框的最小置信度阈值 字符串
label_map 存储索引到标签名称映射的 YAML 文件(可选)如果设置,带注释的图像将具有与边界框关联的类标签 字符串
max_boxes_to_draw 将在带注释的图像中渲染的最大边界框数 字符串
results_dir 存储推理结果的目录(可选) 无符号整数

数据集配置

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

字段 描述 数据类型和约束 推荐/典型值
train_tfrecords 用于训练的 TFRecord 路径 字符串
val_tfrecords 用于验证的 TFRecord 路径 字符串
val_json_file 用于验证的注释文件路径 字符串
num_classes 类数。如果在注释中有 N 个类别,则 num_classes 应为 N+1(背景类) 无符号整数
max_instances_per_image 要解析的最大对象实例数(默认值:100) 无符号整数 100
skip_crowd_during_training 指定在训练期间是否跳过 crowd 布尔值 True
loader 数据加载器配置
augmentation 数据增强配置

数据加载器配置 (dataset.loader) 指定如何将数据批次馈送到模型中。

字段 描述 数据类型和约束 推荐/典型值
prefetch_size “WxH”格式的图像尺寸,其中 W 和 H 表示调整大小和填充后的输入的尺寸。 字符串 “512x512”
shuffle_file 用于训练的 TFRecord 路径 字符串
shuffle_buffer “WxH”格式的图像尺寸,其中 W 和 H 表示调整大小和填充后的输入的尺寸。 字符串 “512x512”
cycle_length 用于训练的 TFRecord 路径 字符串
block_length 用于训练的 TFRecord 路径 字符串

dataset.augmentation 配置指定预处理后使用的图像增强方法。

字段 描述 数据类型和约束 推荐/典型值
rand_hflip 一个标志,指定是否执行随机水平翻转 布尔值
random_crop_min_scale RandomCrop 增强的最小比例(默认值:0.1) 浮点数 0.1
random_crop_max_scale RandomCrop 增强的最大比例(默认值:2.0) 浮点数 2.0
auto_color_distortion 启用自动颜色增强的标志 布尔值 False
auto_translate_xy 在 X/Y 轴上启用自动图像平移的标志 布尔值 False

模型配置

模型配置 (model) 指定模型结构。下表总结了详细描述。

字段 描述 数据类型和约束 推荐/典型值
model_name EfficientDet 模型名称 字符串 “efficientdet_d0”
min_level 输出特征金字塔的最小级别 无符号整数 3(仅支持 3)
max_level 输出特征金字塔的最大级别 无符号整数 7(仅支持 7)
num_scales 每个金字塔级别上的锚框倍频程尺度数(例如,如果设置为 3,则锚框尺度为 [2^0, 2^(1/3), 2^(2/3)]) 无符号整数 3
max_instances_per_image 要解析的最大对象实例数(默认值:100) 无符号整数 100
aspect_ratios 表示每个金字塔级别上锚框纵横比的元组列表 字符串 “[(1.0, 1.0), (1.4, 0.7), (0.7, 1.4)]”
anchor_scale 基本锚框大小相对于特征金字塔步幅的比例 无符号整数 4
input_width 输入宽度 无符号整数 512
input_height 输入高度 无符号整数 512

剪枝配置

prune 配置定义了训练模型的剪枝过程。下表总结了详细描述。

字段 描述 数据类型和约束 推荐/典型值
normalizer 归一化方法。指定 max 以通过将每层中的每个范数除以最大范数进行归一化,或指定 L2 以通过除以包含所有内核范数的向量的 L2 范数进行归一化 字符串 max
equalization_criterion 均衡元素级操作层或深度方向卷积层输入统计信息的标准。选项为 arithmetic_mean geometric_mean、``union`` 和 intersection 字符串 union
granularity 一次要移除的过滤器数量 整数 8
threshold 剪枝阈值 浮点数
min_num_filters 每层要保留的最小过滤器数量。默认值:16 整数 16
excluded_layers 要从剪枝中排除的层列表 列表
checkpoint 要剪枝的 .tlt 模型文件的路径 字符串

导出配置

export 配置包含将 .tlt 模型导出到 .onnx 模型的参数,该模型可用于部署。

字段 描述 数据类型和约束 推荐/典型值
batch_size 如果 dynamic_batch_size 设置为 False,则 .onnx 模型的最大批量大小 布尔值
dynamic_batch_size 一个标志,指定是否在导出的 .onnx 模型中使用动态批量大小 布尔值 True
checkpoint 要导出的 .tlt 模型文件的路径 字符串
onnx_file 保存导出的 .onnx 模型的路径 字符串 False
min_score_thresh NMS 层中的置信度阈值(默认值:0.01) 浮点数

使用以下命令训练 EfficientDet 模型

复制
已复制!
            

tao model efficientdet_tf2 train [-h] -e <experiment_spec> [results_dir=<global_results_dir>] [model.<model_option>=<model_option_value>] [dataset.<dataset_option>=<dataset_option_value>] [train.<train_option>=<train_option_value>] [num_gpus=<num GPUs>] [gpu_ids=<gpu_index>]

必需参数

  • -e, --experiment_spec:实验规范文件,用于设置训练实验。

可选参数

  • model.<model_option>模型选项

  • dataset.<dataset_option>数据集选项

  • train.<train_option>训练选项

  • num_gpus:用于多 GPU 场景中训练的 GPU 数量。默认值为 1。

  • gpu_ids:用于训练的 GPU 索引。当机器安装了多个 GPU 时,可以使用此参数。

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

输入要求

  • 输入大小:C * W * H(其中 C = 1 或 3,W >= 128,H >= 128;W、H 是 32 的倍数)

  • 图像格式:JPG

  • 标签格式:COCO 检测

示例用法

这是一个 train 命令的示例

复制
已复制!
            

tao model efficientdet_tf2 train -e /path/to/spec.yaml num_gpus=2

要使用 EfficientDet 模型运行评估,请使用以下命令

复制
已复制!
            

tao model efficientdet_tf2 evaluate [-h] -e <experiment_spec> evaluate.checkpoint=<model to be evaluated> [evaluate.<evaluate_option>=<evaluate_option_value>] [gpu_ids=<gpu_index>]

必需参数

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

  • evaluate.checkpoint:要评估的 .pth 模型。

可选参数

  • evaluate.<evaluate_option>评估选项

  • gpu_ids:用于评估的 GPU 索引。当机器安装了多个 GPU 时,可以使用此参数。请注意,评估只能在单个 GPU 上运行。

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

示例用法

这是一个使用 evaluate 命令的示例

复制
已复制!
            

tao model efficientdet_tf2 evaluate -e /path/to/spec.yaml

EfficientDet 模型的推理工具可用于可视化边界框,并在图像目录上生成逐帧 KITTI 格式标签。

复制
已复制!
            

tao model efficientdet_tf2 inference [-h] -e <experiment spec file> inference.checkpoint=<model to be inferenced> [inference.<inference_option>=<inference_option_value>] [gpu_ids=<gpu_index>]

必需参数

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

  • inference.checkpoint:要推理的 .pth 模型。

可选参数

  • inference.<inference_option>推理选项

  • gpu_ids:在其上运行推理的 GPU 索引。当机器安装了多个 GPU 时,可以使用此参数。请注意,推理只能在单个 GPU 上运行。

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

示例用法

这是一个使用 inference 命令的示例

复制
已复制!
            

tao model efficientdet_tf2 inference -e /path/to/spec.yaml

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

tao model efficientdet_tf2 prune 命令包括以下参数

复制
已复制!
            

tao model efficientdet_tf2 prune [-h] -e <experiment spec file> prune.checkpoint=<model to be pruned> [prune.<prune_option>=<prune_option_value>]

必需参数

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

  • prune.checkpoint:要剪枝的 .pth 模型。

可选参数

  • prune.<prune_option>剪枝选项

  • gpu_ids:在其上运行剪枝的 GPU 索引。当机器安装了多个 GPU 时,可以使用此参数。请注意,推理只能在单个 GPU 上运行。

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

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

注意

由于较大的 EfficientDet 模型的复杂性,剪枝过程将花费更长的时间才能完成。例如,在 V100 服务器上剪枝 EfficientDet-D5 模型可能至少需要 25 分钟。


使用 Prune 命令

这是一个使用 tao model efficientdet_tf2 prune 命令的示例

复制
已复制!
            

tao model efficientdet_tf2 prune -e /path/to/spec.yaml

模型剪枝后,精度可能会略有下降,因为一些以前有用的权重可能已被删除。为了恢复精度,我们建议您在同一数据集上重新训练此剪枝模型。为此,请使用 训练模型中记录的 tao model efficientdet_tf2 train 命令,并更新规范文件,将新剪枝的模型指定为预训练模型文件。

我们建议关闭正则化器或减少 EfficientDet 的 training_config 中的权重衰减,以在重新训练剪枝模型时恢复精度。为此,请将正则化器类型设置为 训练配置部分中提到的 NO_REG。所有其他参数可以从之前的训练中保留在规范文件中。

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

导出 EfficientDet 模型

这是一个 tao model efficientdet_tf2 export 命令的命令行参数示例

复制
已复制!
            

tao model efficientdet_tf2 export [-h] -e <path to experiment spec> export.checkpoint=<model to export> export.onnx_file=<onnx path> [export.<export_option>=<export_option_value>] [gpu_ids=<gpu_index>]

必需参数

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

  • export.checkpoint:要导出的 .pth 模型。

  • export.onnx_file:保存 .etlt.onnx 模型的路径。

可选参数

  • export.<export_option>导出选项

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

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

示例用法

这是一个以 INT8 模式导出 EfficientDet 模型的示例命令。

复制
已复制!
            

tao model efficientdet_tf2 export -e /path/to/spec.yaml

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

请参阅集成 EfficientDet (TF1/TF2) 模型页面,了解有关将 EfficientDet TF2 模型部署到 Deepsteram 的更多信息。

上一篇 图像分类 (TF2)
下一篇 TensorFlow 1.x [已弃用]
© 版权所有 2024,NVIDIA。 上次更新于 2024 年 10 月 15 日。