图像分类 (TF2)
以下是分类规范文件的示例。它有七个主要组成部分——dataset
、model
、train
、evaluate
、inference
、prune
和 export
——以及加密密钥 (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 并使用步幅卷积。 | True 或 False |
use_batch_norm |
布尔值 | False |
用于决定是否使用批归一化层的布尔变量。 | True 或 False |
freeze_blocks |
列表 | – | 此参数定义可以从实例化的特征提取器模板中冻结哪些块,并且对于不同的特征提取器模板是不同的。 |
|
freeze_bn |
布尔值 | False |
您可以选择在模型训练期间冻结批归一化层。 | True 或 False |
resize_interpolation_method |
字符串 | 双线性 |
用于调整输入图像大小的插值方法。 | bilinear 或 bicubic |
retain_head |
布尔值 | False |
常规 TAO 模型:是否使用原始 ImageNet 实现中的头部层。将此设置为 True 以重现文献中 ImageNet 上的精度。如果设置为 False,则头部将使用 Dense 层,这可能与文献中的不同。BYOM 模型:是否使用原始 ONNX 模型中的头部层。将此设置为 True 以重现原始数据集上的精度。如果设置为 False,则头部将使用 Dense 层,这可能与原始实现不同。 | True 或 False |
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 |
用于在训练期间启用随机裁剪的标志。 | True 或 False |
enable_center_crop |
布尔值 | True |
用于在验证期间启用中心裁剪的标志。 | True 或 False |
enable_color_augmentation |
布尔值 | True |
用于在训练期间启用颜色增强的标志。 | True 或 False |
disable_horizontal_flip |
布尔值 | False |
用于禁用水平翻转的标志。 | True 或 False |
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 |
优化器配置 | – | 用于训练的优化器。支持的值为 sgd 、adam 或 rmsprop |
– |
bn_config |
BatchNorm 配置 | – | 批归一化层 | – |
results_dir |
字符串 | – | 将保存训练日志的目录 | UNIX 格式路径。 |
学习率调度器
参数 lr_config
定义了学习率调度器的参数。学习率调度器可以是 step
、soft_anneal
或 cosine
。
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) 中。 |

优化器配置
支持三种类型的优化器: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_mean 、geometric_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) 模型页面。