TAO v5.5.0

图像分类 PyT

图像分类 PyT 是 TAO 中包含的基于 PyTorch 的图像分类模型。它支持以下任务

  • 训练

  • 评估

  • 推理

  • 导出

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

复制
已复制!
            

tao model classification_pyt <sub_task> <args_per_subtask>

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

TAO 已更新到最新的 MMPretrain 版本,而不是已弃用的 MMClassification。 .. Note:: 图像分类 (PyT) 基于 MMPretrain。因此,大多数参数都采用 MMPretrain 1.x 格式

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

train 分类实验规范包含三个主要组成部分

  • 数据集

  • 训练

  • 模型

以下是使用 FAN 主干网络的分类 PyT 的数据集规范文件示例

复制
已复制!
            

dataset: data: samples_per_gpu: 128 workers_per_gpu: 8 train: data_prefix: "/raid/ImageNet2012/ImageNet2012/train" pipeline: # Augmentations alone - type: RandomResizedCrop scale: 224 - type: RandomFlip prob: 0.5 direction: "horizontal" - type: ColorJitter brightness: 0.4 contrast: 0.4 saturation: 0.4 - type: RandomErasing erase_prob: 0.3 val: data_prefix: /raid/ImageNet2012/ImageNet2012/val test: data_prefix: /raid/ImageNet2012/ImageNet2012/val

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

参数 数据类型 默认值 描述 支持的值
采样器 dict 配置 数据集采样器类型

img_norm_cfg

dict 配置
浮点数
浮点数
布尔值


[123.675, 116.28, 103.53]
[58.395, 57.12, 57.375]
False

包含以下可配置参数
* mean: 从图像中减去的均值
* std: 用于除以图像的标准差
* to_rgb: 一个标志,指定是否转换为 RGB 格式

> 0
-
-

数据 dict 配置 与训练相关的参数。 有关更多详细信息,请参阅 data

数据

参数 数据类型 默认值 描述 支持的值
samples_per_gpu 整数 数据集采样器类型

img_norm_config

字符串
字符串
布尔值

字典
[123.675, 116.28, 103.53]
[58.395, 57.12, 57.375]
False

包含以下可配置参数
* mean: 从图像中减去的均值
* std: 用于除以图像的标准差
* to_rgb: 一个标志,指定是否转换为 RGB 格式

> 0
-
True/ False

训练

dict 配置
字符串
字符串
字典

字符串

包含训练数据集配置
* data_prefix: 包含不同类文件夹的父文件夹
* ann_file: 一个文本文件,其中每一行都是图像名称和
相应的类 ID。 有关更多信息,请参阅
数据标注格式部分。
* pipeline: 数据处理流程,其中包含
预处理转换。
有关更多信息,请参阅 pipeline config
* classes: 一个文本文件,其中包含类(每行一个类)

Imagenet 类

测试

dict 配置
字符串
字符串
字典

字符串

包含测试数据集配置
* data_prefix: 包含不同类文件夹的父文件夹
* ann_file: 一个文本文件,其中每一行都是图像名称和
相应的类 ID。 有关更多信息,请参阅
数据标注格式部分。
* pipeline: 数据处理流程,其中包含
预处理转换。
有关更多信息,请参阅 pipeline config
* classes: 一个文本文件,其中包含类(每行一个类)

Imagenet 类

验证

dict 配置
字符串
字符串
字典

字符串

包含验证数据集配置
* data_prefix: 包含不同类文件夹的父文件夹
* ann_file: 一个文本文件,其中每一行都是图像名称和
相应的类 ID。 有关更多信息,请参阅
数据标注格式部分。
* pipeline: 数据处理流程,其中包含
预处理转换。
有关更多信息,请参阅 pipeline config
* classes: 一个文本文件,其中包含类(每行一个类)

Imagenet 类

注意

有关更多详细信息,请参阅 MMPretrain 1.x 格式文档。

流程

以下是包含不同增强功能的流程配置示例

复制
已复制!
            

pipeline: # Augmentations alone - type: RandomResizedCrop scale: 224 backend: "pillow" - type: RandomFlip prob: 0.5 direction: "horizontal" - type: ColorJitter brightness: 0.4 contrast: 0.4 saturation: 0.4 - type: RandomErasing erase_prob: 0.3

下面列出了一些广泛采用的增强功能和参数。 更多信息,请参阅 MMPretrain 文档,了解转换

参数 数据类型 默认值 描述 支持的值

RandomResizedCrop

dict 配置
整数
字符串


整数
双线性

包含以下可配置参数
* scale: 裁剪的所需输出比例
* interpolation: 插值方法

> 0
-

RandomFlip

dict 配置
概率
方向

包含以下可配置参数
* prob: 翻转图像的概率
* direction: 翻转方向

0-1
水平,垂直

RandomCrop

dict 配置
整数/ 列表
整数

整数
字符串

包含以下可配置参数
* crop_size: 裁剪的所需输出比例
* padding: 每个图像边框上的可选填充。 如果是长度为 4 的序列
提供,则用于填充左、上、右、下边框。
如果提供长度为 2,则用于填充左/右、上/下。
* pad_val: 用于常量填充的像素 pad_val 值
* padding_mode: 填充类型

> 0
> 0
> 0
> 0
> 0
常量, 边缘
反射, 对称

ColorJitter

dict 配置
浮点数
浮点数
浮点数

ColorJitter 增强功能包含以下参数
* 亮度:亮度抖动量
* 对比度:对比度抖动量
* 饱和度:饱和度抖动量

0-1
0-1
0-1

RandomErasing

dict 配置
浮点数
浮点数
浮点数
字符串


0.5
0.02
0.4
常量

RandomErasing 增强功能包含以下参数
* erase_prob: 图像将被随机擦除的概率
* min_area_ratio: 最小擦除区域除以输入图像区域
* max_area_ratio: 最大擦除区域除以输入图像区域
* mode: 擦除区域的填充方法
* const: 所有像素都分配相同的值
* rand: 每个像素都分配一个 [0, 255] 范围内的随机值

0-1
0-1
0-1
常量/ 随机

以下是图像分类 PyT 的训练规范文件示例

复制
已复制!
            

train: train_config: runner: max_epochs: 300 checkpoint_config: interval: 1 logging: interval: 5000 validate: True evaluation: interval: 10 custom_hooks: - type: "EMAHook" momentum: 0.00008 priority: "ABOVE_NORMAL" lr_config: policy: CosineAnnealing T_max: 95 by_epoch: True begin: 5 end: 100 optimizer: type: AdamW lr: 0.005 weight_decay: 0.05

下表描述了 train 规范中的可配置参数。

参数 数据类型 默认值 描述 支持的值

exp_config

dict 配置
整数
字符串
整数


47
“127.0.0.1”
631

包含以下可配置参数
* manual_seed: 实验的随机种子
* MASTER_ADDR: Master 节点的主机名
* MASTER_PORT: MASTER_ADDR 上的端口

> 0
-
-

train_config dict 配置 与训练相关的参数。 有关更多信息,请参阅 train_config
results_dir 字符串 用于保存检查点和日志的路径 字符串

train_config

参数 数据类型 默认值 描述 支持的值

runner

dict 配置
整数


20

包含以下可配置参数
* max_epochs: 应执行训练的最大 epoch 数

checkpoint_config

dict 配置
整数


1

包含以下可配置参数
* interval: 需要保存检查点的步数间隔
请注意,目前仅支持基于 Epoch 的训练。

>0

logging

dict 配置
整数


10

包含以下可配置参数
* interval: 需要保存实验日志的迭代次数间隔。 日志
保存在输出目录的 logs 目录中。

>0

optimizer

dict 配置

包含不同优化器的可配置参数,详见
optimizer.

optimizer_config

dict 配置
浮点数


包含以下参数
* max_norm: 梯度的最大范数

>=0.0

evaluation

dict 配置
整数


整数

包含以下可配置参数
* interval : 在训练期间执行验证的迭代次数间隔

validate 布尔值 False 一个标志,用于在训练期间启用验证
find_unused_parameters 布尔值 False 在 DDP 中设置此参数。 有关更多信息,请参阅 DDP_PyT
lr_config 字典 学习率调度器配置。 有关更多详细信息,请参阅 lr_config
load_from 字符串 可以从中加载包括 head 在内的端到端模型权重的检查点路径
custom_hooks 字典 自定义训练 hooks 配置。 有关更多详细信息,请参阅 custom_hooks
resume_training_checkpoint_path 字符串 从其恢复训练的检查点路径

optimizer

支持以下优化器

SGD

参数 数据类型 默认值 描述 支持的值

optimizer

dict 配置
字符串
浮点数
浮点数
浮点数




0
0

包含以下可配置参数
* type: “SGD”
* lr: 学习率
* momentum: 动量因子
* weight_decay: 应执行训练的最大 epoch 数

AdamW

参数 数据类型 默认值 描述 支持的值

optimizer

dict 配置
字符串
浮点数
浮点数
浮点数



1e-3
0.0
1e-8

包含以下可配置参数
* type: “AdamW”
* lr: 学习率
* weight_decay: 权重衰减 (L2)
* eps: 添加到分母以提高数值稳定性的项

lr_config

lr_config 参数定义学习率调度器的参数。 下面列出了一些广泛采用的学习率调度器和参数。 更多信息,请参阅 MMPretrain 文档,了解 lr 调度器

CosineAnnealingLR

参数 数据类型 默认值 描述 支持的值
T_max 整数
最大迭代次数。 >=0.0
by_epoch 布尔值 True 计划的学习率是否按 epoch 更新 小于 1.0
begin 整数 0 开始更新学习率的步数。 在区间 (0, INF) 内。
end 整数 INF 停止更新学习率的步数。 在区间 (0, INF) 内。

MultiStepLR

参数 数据类型 典型值 描述 支持的值
gamma 浮点数 基本(最大)学习率 通常小于 1.0
by_epoch 布尔值 True 计划的学习率是否按 epoch 更新 小于 1.0
begin 整数 0 开始更新学习率的步数。 在区间 (0, INF) 内。
end 整数 INF 停止更新学习率的步数。 在区间 (0, INF) 内。

LinearLR

参数 数据类型 典型值 描述 支持的值
by_epoch 布尔值 True 计划的学习率是否按 epoch 更新 小于 1.0
begin 整数 0 开始更新学习率的步数。 在区间 (0, INF) 内。
end 整数 INF 停止更新学习率的步数。 在区间 (0, INF) 内。

PolyLR

参数 数据类型 典型值 描述 支持的值
eta_min 浮点数 0 调度结束时的最小学习率
by_epoch 布尔值 True 计划的学习率是否按 epoch 更新 小于 1.0
begin 整数 0 开始更新学习率的步数。 在区间 (0, INF) 内。
end 整数 INF 停止更新学习率的步数。 在区间 (0, INF) 内。

StepLR

参数 数据类型 典型值 描述 支持的值
gamma 浮点数 基本(最大)学习率 通常小于 1.0
by_epoch 布尔值 True 计划的学习率是否按 epoch 更新 小于 1.0
begin 整数 0 开始更新学习率的步数。 在区间 (0, INF) 内。
end 整数 INF 停止更新学习率的步数。 在区间 (0, INF) 内。

custom_hooks

以下示例说明了如何为 EMAHook` 提供从 MMPretrain 到 Hydra 配置的自定义 hook

  • MMPretrain 配置

    复制
    已复制!
                

    custom_hooks = [ dict(type='EMAHook', interval=100, priority='HIGH')]

  • 等效的 TAO Hydra 配置

    复制
    已复制!
                

    custom_hooks: - type: "EMAHook" momentum: 0.00008 priority: "ABOVE_NORMAL"

有关 custom_hooks 的更多详细信息,请参阅 MMPretrain 文档,了解自定义 hooks

以下是使用 FAN 主干网络的图像分类 PyT 的模型规范文件示例

复制
已复制!
            

model: backbone: type: "fan_tiny_8_p4_hybrid" custom_args: drop_path_rate: 0.1 freeze: False pretrained: <Path to pretrained weights> head: type: "TAOLinearClsHead" num_classes: 1000 custom_args: head_init_scale: 1 loss: type: LabelSmoothLoss label_smooth_val: 0.1 mode: 'original' train_cfg: augments: - type: Mixup alpha: 0.8 - type: CutMix alpha: 1.0

model 参数主要配置主干网络和 head。

参数 数据类型 默认值 描述 支持的值

init_cfg

字典
字符串
字符串

init_cfg 包含以下配置参数
* checkpoint: 要加载的预训练模型的路径
* prefix: 要从 state_dict 键中删除的字符串

backbone

字典
字符串

包含以下可配置参数
* type: 要使用的主干网络的名称

* freeze: 一个标志,指定是否冻结或
解冻主干网络

* pretrained: 要使用的预训练权重路径
加载

有关基础模型,请参阅 基础模型部分
配置。

FAN 变体
fan_tiny_8_p4_hybrid, fan_small_12_p4_hybrid,
fan_base_16_p4_hybrid, fan_large_16_p4_hybrid,
fan_Xlarge_16_p4_hybrid, fan_base_18_p16_224,
fan_tiny_12_p16_224, fan_small_12_p16_224,
fan_large_24_p16_224

GCViT 变体
gc_vit_xxtiny, gc_vit_xtiny, gc_vit_tiny,
gc_vit_small, gc_vit_base, gc_vit_large,

FasterViT 变体
faster_vit_0_224, faster_vit_1_224,
faster_vit_2_224, faster_vit_3_224,
faster_vit_4_224, faster_vit_5_224,
faster_vit_6_224, faster_vit_4_21k_224,
faster_vit_4_21k_384, faster_vit_4_21k_512,
faster_vit_4_21k_768

False/True

head 字典 分类 head 的配置参数
train_cfg 字典 包含高级增强参数

基础模型

复制
已复制!
            

model: backbone: type: "ViT-B-32" custom_args: drop_path_rate: 0.1 freeze: False pretrained: laion400m_e31 head: type: LinearClsHead num_classes: 1000 in_channels: 512 loss: type: CrossEntropyLoss loss_weight: 1.0 use_soft: False topk: [1, 5]

受支持的架构和预训练数据集的子集。 请注意,in_channels 应在 head 下更新

  • CLIP 图像主干网络

架构 预训练数据集 in_channels

ViT-B-32

* laion400m_e31
* laion400m_e32
* laion2b_e16
* laion2b_s34b_b79k
* datacomp_m_s128m_b4k
* laion2b_s34b_b79k
* laion2b_s34b_b79k
* laion2b_s34b_b79k
* openai

512
ViT-B-16 laion400m_e31 512
ViT-L-14 laion400m_e31 768
ViT-H-14 laion2b_s32b_b79k 1024
ViT-g-14 laion2b_s12b_b42k 1024
  • EVA - CLIP 图像主干网络

架构 预训练数据集 in_channels
EVA02-L-14 merged2b_s4b_b131k 768
EVA02-L-14-336 laion400m_e31 768
EVA02-E-14 laion400m_e31 1024
EVA02-E-14-plus laion2b_s32b_b79k 1024
参数 数据类型 默认值 描述 支持的值
类型 字符串 用于生成混合比率的 Beta 分布参数 TAOLinearClsHead, FANLinearClsHead, LogisticRegressionHead
num_classes 字典 训练类的数量 >=0
loss 字典 {“type”:”CrossEntropyLoss”} 有关不同类型的损失及其参数,请参阅 losses
topk 列表 [1,] 类的数量 >=0

custom_args

字典

要传递给 head 的任何自定义参数
(例如,``head_init_scale`` 用于 TAOLinearClsHead

lr_head

字典

用于 Logistic Regression Head 的参数
(例如,``C`` 用于调整正则化强度)

lr_head

Logistic Regression head 由以下参数定义

lr_head

字典

包含以下可调参数
C: 正则化强度的倒数
max_iter: 求解器收敛所需的最大迭代次数
class_weight: 是否支持平衡类训练
solver: 优化问题中使用的算法。


>=0.0
>0
‘balanced’, None
‘lbfgs’, ‘liblinear’, ‘newton-cg’, ‘newton-cholesky’, ‘sag’, ‘saga’

Logistic Regression head 涉及冻结主干网络权重。 请注意,freeze 参数应在主干网络配置下更新为 True,如下所示

复制
已复制!
            

model: backbone: type: "ViT-B-32" custom_args: drop_path_rate: 0.1 freeze: True pretrained: laion400m_e31 head: type: "LogisticRegressionHead" num_classes: 1000 lr_head: C: 0.316 max_iter: 5000

train_cfg

Mixup

参数 数据类型 默认值 描述 支持的值
alpha 字符串 用于生成混合比率的 Beta 分布参数 0-1

CutMix

参数 数据类型 默认值 描述 支持的值
alpha 字符串 用于生成混合比率的 Beta 分布参数 0-1
cutmix_minmax list[float] 补丁的最小/最大面积比率。
correct_lam 布尔值 True 当 cutmix bbox 被图像边界裁剪时,是否应用 lambda 校正。 False/True

loss

下面显示了一些重要的分类损失。 请注意,通过遵循 TAO 的 Hydra 配置,可以使用 MMPretrain 中所有支持的损失。 有关 MMPretrain 损失的列表,请参阅 losses_mmpretrain 文档。

LabelSmoothLoss

参数 数据类型 默认值 描述 支持的值
label_smooth_val 字符串 标签平滑的程度 0-1
use_sigmoid 布尔值 指定预测是否应使用 sigmoid 或 softmax False/ True
num_classes 整数 类的数量 >=0
mode 字符串 用于生成混合比率的 Beta 分布参数 0-1
reduction 字符串 用于减少损失的方法 均值, 总和
loss_weight 浮点数 1.0 损失的权重 >=0

CrossEntropyLoss

参数 数据类型 默认值 描述 支持的值
use_sigmoid 布尔值 False 指定预测是否应使用 sigmoid 或 softmax 0-1
use_soft 布尔值 False 指定是否使用 CrossEntropyLoss 的 soft 版本 0-1
loss_weight 浮点数 1.0 损失的权重 0-1
reduction 字符串 用于减少损失的方法 均值, 总和
class_weight list[float] 每个类的权重 0-1

使用 tao model classification_pyt train 命令训练分类 pytorch 模型

复制
已复制!
            

tao model classification_pyt train [-h] -e <experiment_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>] [train.gpu_ids=<gpu indices>] [train.num_gpus=<number of gpus>]

必需参数

唯一必需的参数是实验规范的路径

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

可选参数

您可以设置可选参数以覆盖实验规范文件中的选项值。

注意

对于训练、评估和推理,我们为每个任务公开 2 个变量:num_gpusgpu_ids,它们默认分别为 1[0]。 如果两者都已传递,但值不一致,例如 num_gpus = 1gpu_ids = [0, 1],则会修改它们以遵循具有更多 GPU 的设置,例如 num_gpus = 1 -> num_gpus = 2

evaluate 配置定义评估过程的超参数。 以下是配置示例

复制
已复制!
            

evaluate: checkpoint: /path/to/model.pth topk: 1

在使用实验配置文件并按照训练模型的步骤训练模型后,下一步是在测试集上评估此模型,以衡量模型的准确性。 TAO 包括 tao model classification_pyt evaluate 命令来执行此操作。

分类应用程序计算评估损失和 Top-k 准确率。

训练后,模型存储在您选择的输出目录 results_dir 中。

复制
已复制!
            

evaluate: checkpoint: /path/to/model.pth

复制
已复制!
            

tao model classification_pyt evaluate [-h] -e <experiment_spec> evaluate.checkpoint=<model to be evaluated> results_dir=<path to results dir> [evaluate.<evaluate_option>=<evaluate_option_value>] [evaluate.gpu_ids=<gpu indices>] [evaluate.num_gpus=<number of gpus>]

必需参数

  • -e, --experiment_spec: 用于设置评估实验的实验规范文件

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

  • results_dir: 结果将存储在其中的路径

可选参数

对于分类,tao model classification_pyt inference 保存一个 .csv 文件,其中包含多个图像的图像路径和相应的标签。 也可以启用 TensorRT Python 推理。

复制
已复制!
            

inference: checkpoint: /path/to/model.pth

复制
已复制!
            

tao model classification_pyt inference [-h] -e <experiment_spec_file> inference.checkpoint=<model to be inferenced> results_dir=<path to results dir> [inference.<inference_option>=<inference_option_value>] [inference.gpu_ids=<gpu indices>] [inference.num_gpus=<number of gpus>]

必需参数

  • -e, --experiment_spec: 用于设置推理实验的实验规范文件

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

  • results_dir: 结果将存储在其中的路径

可选参数

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

export 参数定义导出过程的超参数。

复制
已复制!
            

export: checkpoint: /path/to/model.pth onnx_file: /path/to/model.onnx opset_version: 12 verify: False input_channel: 3 input_width: 224 input_height: 224

以下是 tao classification_pyt export 命令的示例

复制
已复制!
            

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

必需参数

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

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

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

可选参数

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

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

上一页 BEVFusion
下一页 SegFormer
© 版权所有 2024, NVIDIA。 上次更新时间:2024 年 10 月 15 日。