TAO v5.5.0

图像分类 (TF2)

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

以下是分类规范文件的示例。它有七个主要组成部分——datasetmodeltrainevaluateinferencepruneexport——以及加密密钥 (encryption_key) 和结果目录 (results_dir) 的参数。

复制
已复制!
            

results_dir: '/workspace/results_dir' encryption_key: 'nvidia_tlt' num_gpus: 1 gpu_ids: [0] dataset: train_dataset_path: "/workspace/tao-experiments/data/split/train" val_dataset_path: "/workspace/tao-experiments/data/split/val" preprocess_mode: 'torch' num_classes: 20 augmentation: enable_color_augmentation: True enable_center_crop: True train: qat: False checkpoint_interval: 1 checkpoint: '/path/to/model.tlt' batch_size_per_gpu: 64 num_epochs: 80 optim_config: optimizer: 'sgd' lr_config: scheduler: 'cosine' learning_rate: 0.05 soft_start: 0.05 reg_config: type: 'L2' scope: ['conv2d', 'dense'] weight_decay: 0.00005 model: backbone: 'efficientnet-b0' input_width: 224 input_height: 224 input_channels: 3 input_image_depth: 8 evaluate: dataset_path: '/workspace/tao-experiments/data/split/test' checkpoint: 'EVALMODEL' top_k: 3 batch_size: 256 n_workers: 8 inference: checkpoint: 'EVALMODEL' image_dir: '/workspace/tao-experiments/data/split/test/aeroplane' classmap: 'RESULTSDIR/classmap.json' export: checkpoint: 'EVALMODEL' onnx_file: 'EXPORTDIR/efficientnet-b0.onnx' data_type: 'fp32'

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

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

模型配置

下表描述了 model 配置中的参数。

参数 数据类型 典型值 描述 支持的值
backbone 字符串 efficientnet-b0 这定义了用于训练的骨干特征提取器的架构。 efficientnet-b0 到 efficientnet-b5
use_pooling 布尔值 False 在下采样时,选择使用步幅卷积或 MaxPooling。当 True 时,使用 MaxPooling 进行下采样;但是,对于对象检测网络,NVIDIA 建议将其设置为 False 并使用步幅卷积。 TrueFalse
use_batch_norm 布尔值 False 用于决定是否使用批归一化层的布尔变量。 TrueFalse
freeze_blocks 列表 此参数定义可以从实例化的特征提取器模板中冻结哪些块,并且对于不同的特征提取器模板是不同的。
  • ResNet 系列:对于 ResNet 系列,有效的冻结块 ID 是 {0, 1, 2, 3}(包含)的任何子集
  • VGG 系列:对于 VGG 系列,有效的冻结块 ID 是 {1, 2, 3, 4, 5}(包含)的任何子集
  • 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}(包含)的任何子集
  • GoogLeNet:对于 GoogLeNet,有效的冻结块 ID 是 {0, 1, 2, 3, 4, 5, 6, 7}(包含)的任何子集
  • DarkNet:对于 DarkNet,有效的块 ID 是 {0, 1, 2, 3, 4, 5}(包含)的任何子集
  • CSPDarkNet:对于 CSPDarkNet,有效的块 ID 是 {0, 1, 2, 3, 4, 5}(包含)的任何子集
  • EfficientNet B0/B1:对于 EfficientNet,有效的块 ID 是 {0, 1, 2, 3, 4, 5, 6, 7}(包含)的任何子集
  • CSPDarkNet-tiny:对于 CSPDarkNet-tiny,有效的块 ID 是 {0, 1, 2, 3, 4, 5}(包含)的任何子集
freeze_bn 布尔值 False 您可以选择在模型训练期间冻结批归一化层。 TrueFalse
resize_interpolation_method 字符串 双线性 用于调整输入图像大小的插值方法。 bilinearbicubic
retain_head 布尔值 False 常规 TAO 模型:是否使用原始 ImageNet 实现中的头部层。将此设置为 True 以重现文献中 ImageNet 上的精度。如果设置为 False,则头部将使用 Dense 层,这可能与文献中的不同。BYOM 模型:是否使用原始 ONNX 模型中的头部层。将此设置为 True 以重现原始数据集上的精度。如果设置为 False,则头部将使用 Dense 层,这可能与原始实现不同。 TrueFalse
dropout 浮点数 0.0 模型中 Dropout 层的 Dropout 率。这仅对 VGG 和 SqueezeNet 有效。 区间 [0, 1) 中的浮点数
byom_model 字符串 BYOM 模型在 .tltb 格式中的 UNIX 格式路径。 UNIX 格式路径。
input_width 整数 输入宽度 无符号整数
input_height 整数 输入高度 无符号整数
input_channels 整数 输入通道数 无符号整数(1 或 3)

数据集配置

下表描述了 data 配置中的参数。

参数 数据类型 默认值 描述 支持的值
val_dataset_path 字符串 验证数据集的根目录的 UNIX 格式路径。 UNIX 格式路径。
train_dataset_path 字符串 训练数据集的根目录的 UNIX 格式路径。 UNIX 格式路径。
image_mean 列表 BGR 顺序的图像均值列表。仅当 preprocess_mode 为 caffe 时适用。
preprocess_mode 字符串 'torch' 输入图像预处理的模式。默认为“caffe”。 “caffe”、“torch”、“tf”
num_classes 整数 类别数。
augmentation 增强配置 增强参数的配置。

下表描述了 dataset.augmentation 配置中的参数。

参数 数据类型 默认值 描述 支持的值
enable_random_crop 布尔值 True 用于在训练期间启用随机裁剪的标志。 TrueFalse
enable_center_crop 布尔值 True 用于在验证期间启用中心裁剪的标志。 TrueFalse
enable_color_augmentation 布尔值 True 用于在训练期间启用颜色增强的标志。 TrueFalse
disable_horizontal_flip 布尔值 False 用于禁用水平翻转的标志。 TrueFalse
mixup_alpha 浮点数 0.2 用于 mixup 增强的因子。 在区间 (0, 1) 中

推理配置

下表定义了用于评估分类模型的可配置参数。

参数 数据类型 典型值 描述 支持的值
image_dir 字符串 包含输入图像的目录的 UNIX 格式路径 UNIX 格式路径。
checkpoint 字符串 要评估的模型文件的根目录的 UNIX 格式路径 UNIX 格式路径。
classmmap 字符串 训练过程生成的类别映射
results_dir 字符串 将保存推理日志和结果的目录 UNIX 格式路径。

评估配置

下表定义了用于评估分类模型的可配置参数。

参数 数据类型 典型值 描述 支持的值
dataset_path 字符串 评估数据集的根目录的 UNIX 格式路径 UNIX 格式路径。
checkpoint 字符串 要评估的模型文件的根目录的 UNIX 格式路径 UNIX 格式路径。
top_k 整数 5 计算 Top-K 分类类别准确率指标时要查看的元素数量 1, 3, 5
batch_size 整数 256 评估模型时每个批次的图像数量 >1(受 GPU 内存中可以容纳的图像数量限制)
n_workers 整数 8 评估数据加载器中提取图像批次的工作进程数 >1
results_dir 字符串 将保存评估日志的目录 UNIX 格式路径。

训练配置

本节定义了分类模型训练器的可配置参数。

参数 数据类型 默认值 描述 支持的值
checkpoint 字符串 包含用于初始化模型的预训练权重的模型文件的 UNIX 格式路径。 UNIX 格式路径。
batch_size_per_gpu 整数 32 每个 GPU 每个批次的图像数量 >1
num_epochs 整数 120 运行实验的总 epoch 数 >1
checkpoint_interval 整数 1 保存检查点的频率 >1
n_workers 整数 10 训练/验证数据加载器中提取图像批次的工作进程数 >1
random_seed 整数 用于训练的随机种子
label_smoothing 浮点数 0.1 用于标签平滑的因子 在区间 (0, 1) 中
lr_config 学习率配置 学习率调度器的参数
reg_config 正则化器配置 正则化器的参数
optim_config 优化器配置 用于训练的优化器。支持的值为 sgdadamrmsprop
bn_config BatchNorm 配置 批归一化层
results_dir 字符串 将保存训练日志的目录 UNIX 格式路径。

学习率调度器

参数 lr_config 定义了学习率调度器的参数。学习率调度器可以是 stepsoft_annealcosine

Step

参数 step 定义了步进学习率调度器。

参数 数据类型 典型值 描述 支持的值
learning_rate 浮点数 基础(最大)学习率值。 正值,通常在区间 (0, 1) 中。
step_size 整数 学习率将降低的进度(占整个训练持续时间的百分比)。 小于 100。
gamma 浮点数 用于降低学习率的乘法因子。 在区间 (0, 1) 中。
注意

学习率会根据训练期间使用的 GPU 数量自动缩放,或者有效学习率为 learning_rate * n_gpu

软退火

参数 soft_anneal 定义了软退火学习率调度器。

参数 数据类型 典型值 描述 支持的值
learning_rate 浮点数 基础(最大)学习率值。 正值,通常在区间 (0, 1) 中。
soft_start 浮点数 学习率达到基础学习率的进度。 在区间 (0, 1) 中。
annealing_divider 浮点数 学习率将按其缩小的除数。 大于 1.0。
annealing_points 重复浮点数 学习率将降低的进度点。 浮点数列表。每个值都将在区间 (0, 1) 中。
Cosine

参数 cosine 定义了余弦学习率调度器。

参数 数据类型 典型值 描述 支持的值
learning_rate 浮点数 基础(最大)学习率。 通常小于 1.0
min_lr_ratio 浮点数 最小学习率与基础学习率的比率。 小于 1.0
soft_start 浮点数 学习率达到基础学习率的进度。 在区间 (0, 1) 中。
learning_rate_schedules.png

优化器配置

支持三种类型的优化器:Adam、SGD 和 RMSProp。规范文件中应仅使用 optimizer 指定一种类型

下表总结了 Adam 优化器参数。

参数 描述 数据类型和约束 默认/建议值
lr 学习率。此参数被学习率调度器覆盖,因此无用。 浮点数 0.01
beta_1 模型参数均值的动量 浮点数 0.9
beta_2 模型参数方差的动量 浮点数 0.999
decay 学习率的衰减因子。此参数无用。 浮点数 0.0
epsilon 用于数值稳定性的一个小常数 浮点数 1e-7

下表总结了 SGD 优化器参数。

参数 描述 数据类型和约束 默认/建议值
lr 学习率。此参数被学习率调度器覆盖,因此无用。 浮点数 0.01
momentum SGD 的动量 浮点数 0.9
decay 学习率的衰减因子。此参数无用,因为它被学习率调度器覆盖。 浮点数 0.0
nesterov 用于为 SGD 启用 Nesterov 动量的标志 布尔值 False

下表总结了 RMSProp 优化器参数。

参数 描述 数据类型和约束 默认/建议值
lr 学习率。此参数被学习率调度器覆盖,因此无用。 浮点数 0.01

BatchNorm 配置

参数 描述 数据类型和约束 默认/建议值
momentum 移动平均的动量 浮点数 0.9
epsilon 添加到方差以避免除以零的小浮点数 浮点数 1e-5

剪枝配置

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

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

导出配置

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

字段 描述 数据类型和约束 推荐/典型值
checkpoint 要导出的 .tlt 模型文件的路径 字符串
onnx_file 保存导出的 .onnx 模型的路径 字符串
results_dir 将保存导出日志的目录 字符串

使用 tao model classification_tf2 train 命令微调预训练模型

复制
已复制!
            

tao model classification_tf2 train [-h] -e <spec file> [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_file:实验规范文件的路径。

可选参数

  • model.<model_option>模型选项

  • dataset.<dataset_option>数据集选项

  • train.<train_option>训练选项

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

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

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

注意

有关更多详细信息,请参阅分类规范文件部分。

输入要求

  • 输入大小:3 * 高 * 宽(宽、高 >= 32)

  • 输入格式:JPG、JPEG、PNG

注意

分类输入图像无需手动调整大小。输入数据加载器会自动将图像调整为 input size

示例用法

以下是使用 tao model classification_tf2 train 命令的示例

复制
已复制!
            

tao model classification_tf2 train -e /workspace/spec.yaml num_gpus=2

在模型经过训练后,使用实验配置文件,并按照训练模型的步骤操作,下一步是在测试集上评估此模型,以衡量模型的准确性。

分类应用程序计算评估损失、Top-k 准确率、精确率和召回率作为指标。使用 tao model classification_tf2 evaluate 命令评估模型

复制
已复制!
            

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

必需参数

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

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

可选参数

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

  • gpu_ids:用于运行评估的 GPU 索引。仅支持 1 个 GPU。

  • evaluate.<evaluate_option>评估选项

如果您按照训练分类模型中的示例操作,请运行评估

复制
已复制!
            

tao model classification_tf2 evaluate -e classification_spec.yaml

TAO 评估分类并生成以下指标

  • 损失

  • Top-K 准确率

  • 精确率 (P):TP / (TP + FP)

  • 召回率 (R):TP / (TP + FN)

  • 混淆矩阵

tao model classification_tf2 inference 命令在一组指定的输入图像上运行推理。对于分类,tao model classification_tf2 inference 通过命令行为单个图像或包含图像路径以及多个图像的相应标签的 csv 文件提供类别标签输出。还可以启用 TensorRT Python 推理。

在 TAO 上训练的分类模型上执行 tao model classification_tf2 inference

复制
已复制!
            

tao model classification_tf2 inference [-h] -e <experiment_spec_file> inference.checkpoint=<model to be inferenced> [inference.<inference_option>=<inference_option_value>] [gpu_ids=<gpu_index>]

以下是 tao model classification_tf2 inference 工具的参数

必需参数

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

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

可选参数

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

  • gpu_ids:用于运行推理的 GPU 索引。仅支持 1 个 GPU。

  • inference.<inference_option>推理选项

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

tao model classification_tf2 prune 命令包含以下参数

复制
已复制!
            

tao model classification_tf2 prune [-h] -e <experiment_spec_file> prune.checkpoint=<model to be pruned> [prune.<prune_option>=<prune_option_value>]

必需参数

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

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

可选参数

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

  • gpu_ids:用于运行剪枝的 GPU 索引。仅支持 1 个 GPU。

  • prune.<prune_option>剪枝选项

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

使用剪枝命令

以下是使用 tao model classification_tf2 prune 命令的示例

复制
已复制!
            

tao model classification_tf2 prune -e /workspace/spec.yaml

模型剪枝后,准确率可能会略有下降。发生这种情况是因为某些以前有用的权重可能已被移除。为了重新获得准确率,NVIDIA 建议您在同一数据集上重新训练此剪枝模型。为此,请使用 训练模型中记录的 tao model classification_tf2 train 命令,并使用更新后的规范文件,该文件指向新剪枝的模型作为预训练模型文件。

建议用户在分类的 train 配置中关闭正则化器,以在重新训练剪枝模型时恢复准确率。您可以通过将正则化器 type 设置为 NO_REG 来执行此操作。所有其他参数都可以从之前的训练中保留在规范文件中。

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

以下是 tao model classification_tf2 export 命令的示例

复制
已复制!
            

tao model classification_tf2 export [-h] -e <experiment_spec_file> 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 模型的路径。

可选参数

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

  • export.<export_option>导出选项

示例用法

以下是示例命令。

复制
已复制!
            

tao model classification_tf2 export -e /workspace/spec.yaml

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

有关使用 DeepStream 部署分类模型的更多信息,请参阅集成分类 (TF1/TF2/PyTorch) 模型页面。

上一篇 TensorFlow 2.x
下一篇 EfficientDet (TF2)
© 版权所有 2024,NVIDIA。 上次更新时间:2024 年 10 月 15 日。