TAO v5.5.0

Visual ChangeNet-Segmentation

Visual ChangeNet-Segmentation 是 NVIDIA 开发的语义变化分割模型,包含在 TAO 中。Visual ChangeNet 支持以下任务

  • 训练

  • 评估

  • 推理

  • 导出

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

复制
已复制!
            

tao model visual_changenet <sub_task> <args_per_subtask>

其中 args_per_subtask 是给定子任务所需的命令行参数。每个子任务将在以下章节中解释。

VisualChangeNet-Segmentation 要求数据以图像和掩码文件夹的形式提供。有关 VisualChangeNet-Segmentation 的输入数据格式的更多信息,请参阅数据注释格式页面。

配置自定义数据集

本节提供了一个示例配置和命令,用于使用上述 LEVIR-CD 数据集描述的数据集格式训练 VisualChangeNet-Segmentation。LEVIR-CD 数据集是一个大规模遥感建筑物变化检测数据集。

这是一个示例规范文件,用于使用 NVIDIA 的 FAN Hybrid 主干在 LEVIR-CD 数据集上训练 VisualChangeNet-Segmentation 模型,使用数据注释格式

复制
已复制!
            

encryption_key: tlt_encode task: segment train: pretrained_model_path: /path/to/pretrained/model.pth resume_training_checkpoint_path: null segment: loss: "ce" weights: [0.5, 0.5, 0.5, 0.8, 1.0] num_epochs: 10 num_nodes: 1 validation_interval: 5 checkpoint_interval: 5 seed: 1234 optim: lr: 0.0001 optim: "adamw" policy: "linear" momentum: 0.9 weight_decay: 0.01 betas: [0.9, 0.999] results_dir: /path/to/experiment_results model: backbone: type: "fan_small_12_p4_hybrid" pretrained_backbone_path: null freeze_backbone: False decode_head: feature_strides: [4, 8, 16, 16] dataset: segment: dataset: "CNDataset" root_dir: /path/to/root/dataset/dir/ data_name: "LEVIR-CD" label_transform: "norm" batch_size: 16 workers: 2 multi_scale_train: True multi_scale_infer: False num_classes: 2 img_size: 256 image_folder_name: "A" change_image_folder_name: "B" list_folder_name: 'list' annotation_folder_name: "label" train_split: "train" validation_split: "val" label_suffix: .png augmentation: random_flip: vflip_probability: 0.5 hflip_probability: 0.5 enable: True random_rotate: rotate_probability: 0.5 angle_list: [90, 180, 270] enable: True random_color: brightness: 0.3 contrast: 0.3 saturation: 0.3 hue: 0.3 enable: True with_scale_random_crop: enable: True with_random_crop: True with_random_blur: True evaluate: checkpoint: "???" vis_after_n_batches: 10 inference: checkpoint: "???" vis_after_n_batches: 1 export: gpu_id: 0 checkpoint: "???" onnx_file: "???" input_width: 256 input_height: 256

参数 数据类型 默认值 描述 支持的值
模型 字典配置 模型架构的配置
数据集 字典配置 数据集的配置
训练 字典配置 训练任务的配置
评估 字典配置 评估任务的配置
推理 字典配置 推理任务的配置
encryption_key 字符串 用于加密和解密模型文件的加密密钥
results_dir 字符串 /results 保存实验结果的目录
导出 字典配置 ONNX 导出任务的配置
task 字符串 segment 指示变化检测任务的标志。支持两个任务:“segment”和“classify”,分别用于分割和分类
参数 数据类型 默认值 描述 支持的值
num_gpus 无符号整数 1 用于分布式训练的 GPU 数量 >0
gpu_ids List[int] [0] 用于分布式训练的 GPU 索引
seed 无符号整数 1234 用于 random、numpy 和 torch 的随机种子 >0
num_epochs 无符号整数 10 运行实验的总 epoch 数 >0
checkpoint_interval 无符号整数 1 保存检查点的 epoch 间隔 >0
validation_interval 无符号整数 1 运行验证的 epoch 间隔 >0
resume_training_checkpoint_path 字符串 要从中恢复训练的中间 PyTorch Lightning 检查点
results_dir 字符串 /results/train 保存训练结果的目录

segment

字典

字符串
列表

ce

segment 字典包含 VisualChangeNet Segmentation 管道的可配置参数,参数如下

* loss:用于分割训练的损失函数。
* weights:多尺度训练的权重。

num_nodes 无符号整数 1 节点数。如果值大于 1,则启用多节点。
pretrained_model_path 字符串 预训练模型检查点的路径,用于初始化端到端模型权重。

optim

字典配置

包含 VisualChangeNet 优化器的可配置参数,详见
optim 部分。

optim

复制
已复制!
            

optim: lr: 0.0001 optim: "adamw" policy: "linear" momentum: 0.9 weight_decay: 0.01

参数 数据类型 默认值 描述 支持的值
lr 浮点型 0.0005 学习率 >=0.0
optim 字符串 adamw

policy

字符串

线性

学习率调度器
* linear:LambdaLR 按乘法因子减小 lr
* step:StepLR 在每个 num_epochs//3 时将 lr 减小 0.1

linear/step

momentum 浮点型 0.9 AdamW 优化器的动量
weight_decay 浮点型 0.1 权重衰减系数

以下示例 model 配置提供了更改 VisualChangeNet-Segmentation 架构以进行训练的选项。

复制
已复制!
            

model: backbone: type: "fan_small_12_p4_hybrid" pretrained_backbone_path: null freeze_backbone: False decode_head: feature_strides: [4, 8, 16, 16] align_corner: False

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

backbone

字典
字符串

布尔型


False

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

* pretrained_backbone_path:预训练主干权重文件的路径
* freeze_backbone:是否在训练期间冻结主干权重

fan_tiny_8_p4_hybrid
fan_large_16_p4_hybrid
fan_small_12_p4_hybrid
fan_base_16_p4_hybrid

decode_head

字典
布尔型
列表


False
[4, 8, 16, 16]

包含以下可配置参数的字典
* align_corners
* feature_strides

True, False
True, False

dataset 参数定义数据集源、训练批次大小、增强和预处理。下面提供了 dataset 的示例。

复制
已复制!
            

dataset: segment: dataset: "CNDataset" root_dir: /path/to/root/dataset/dir/ data_name: "LEVIR-CD" label_transform: "norm" batch_size: 16 workers: 2 multi_scale_train: True multi_scale_infer: False num_classes: 2 img_size: 256 image_folder_name: "A" change_image_folder_name: "B" list_folder_name: 'list' annotation_folder_name: "label" train_split: "train" validation_split: "val" test_split: "test" predict_split: 'predict' label_suffix: .png augmentation: random_flip: vflip_probability: 0.5 hflip_probability: 0.5 enable: True random_rotate: rotate_probability: 0.5 angle_list: [90, 180, 270] enable: True random_color: brightness: 0.3 contrast: 0.3 saturation: 0.3 hue: 0.3 enable: True with_scale_random_crop: enable: True with_random_crop: True with_random_blur: True color_map: '0': [255, 255, 255] '1': [0, 0, 0]

参数 数据类型 默认值 描述 支持的值
segment 字典 segment 包含分割数据加载器的数据集配置,详见segment 部分。
classify 字典 classify 包含分类数据加载器的数据集配置

segment

参数 数据类型 默认值 描述 支持的值
数据集 字典 CNDataset 分割支持的数据加载器 CNDataset
root_dir 字符串 数据集所在的根目录路径。
data_name 字符串 LEVIR-CD 数据集标识符 LEVIR-CD、LandSCD、自定义
batch_size 整数 32 每个批次的样本数 >0
workers 整数 2 用于数据加载的工作进程数 >=0
multi_scale_train 布尔型 True 是否启用多尺度训练 True, False
multi_scale_infer 布尔型 False 是否启用多尺度推理 True, False
num_classes 整数 2 数据集中的类别数。 >=2
img_size 整数 256 调整大小后输入图像的大小。
image_folder_name 字符串 A 包含输入图像的文件夹名称。
change_image_folder_name 字符串 B 包含更改后图像的文件夹名称
list_folder_name 字符串 列表 包含数据集分割列表 CSV 文件的文件夹名称。
annotation_folder_name 字符串 label 包含注释掩码的文件夹名称
train_split 字符串 训练 用于训练的数据集分割,应指示 list_folder_name 中 CSV 文件的名称。
validation_split 字符串 val 用于验证的数据集分割,应指示 list_folder_name 中 CSV 文件的名称。
test_split 字符串 test 用于评估的数据集分割,应指示 list_folder_name 中 CSV 文件的名称。
predict_split 字符串 predict 用于推理的数据集分割,应指示 list_folder_name 中 CSV 文件的名称。
label_suffix 字符串 .png 标签图像文件的后缀。
augmentation 字典 包含各种数据增强设置的字典,详见augmentation 部分。
color_map Optional[Dict[str, List[int]]] 字符串类标签(“0”到“n”)到 RGB 颜色代码的映射。

augmentation

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

random_flip

字典
浮点型
浮点型
enable


0.5
0.5
True

随机垂直和水平翻转增强设置。
* vflip_probability:垂直翻转的概率。
* hflip_probability:水平翻转的概率。
* enable:启用或禁用随机翻转增强。

>=0.0
>=0.0

random_rotate

字典
浮点型
列表
enable


0.5
[90, 180, 270]
True

使用指定的概率和角度随机旋转图像
* rotate_probability:应用随机旋转的概率。
* angle_list:要从中选择的旋转角度列表。
* enable:启用或禁用随机旋转增强。

>=0.0
>=0.0

random_color

字典
浮点型
浮点型
浮点型
浮点型
enable
浮点型


0.3
0.3
0.3
0.3
True
0.5

对图像应用随机颜色增强。
* brightness:最大亮度变化因子。
* contrast:最大对比度变化因子。
* saturation:最大饱和度变化因子。
* hue:最大色调变化因子。
* enabled:启用或禁用随机颜色增强。
* color_probability:应用颜色增强的概率。

>=0.0
>=0.0
>=0.0
>=0.0

>=0.0

with_scale_random_crop

字典
enable


True

应用随机缩放和裁剪增强。
* enabled:启用或禁用随机颜色增强。

True, False

with_random_crop 布尔型 True 应用随机裁剪增强。 True, False
with_random_blur 布尔型 True 应用随机模糊增强。 True, False
mean List[float] [0.5, 0.5, 0.5] 预处理要减去的均值。
std List[float] [0.5, 0.5, 0.5] 用于除以图像的标准差。

ViT 主干的示例规范文件

注意

以下规范文件仅与 TAO 5.3 及更高版本相关。

复制
已复制!
            

encryption_key: tlt_encode task: segment train: pretrained_model_path: /path/to/pretrained/model.pth resume_training_checkpoint_path: null segment: loss: "ce" weights: [0.5, 0.5, 0.5, 0.8, 1.0] num_epochs: 350 num_nodes: 1 validation_interval: 1 checkpoint_interval: 1 optim: lr: 0.00002 optim: "adamw" policy: "linear" momentum: 0.9 weight_decay: 0.01 betas: [0.9, 0.999] results_dir: /path/to/experiment_results model: backbone: type: "vit_large_nvdinov2" pretrained_backbone_path: /path/to/pretrained/backbone.pth freeze_backbone: False decode_head: feature_strides: [4, 8, 16, 32] dataset: segment: dataset: "CNDataset" root_dir: /path/to/root/dataset/dir/ data_name: "LEVIR-CD" label_transform: "norm" batch_size: 16 workers: 2 multi_scale_train: True multi_scale_infer: False num_classes: 2 img_size: 256 image_folder_name: "A" change_image_folder_name: "B" list_folder_name: 'list' annotation_folder_name: "label" train_split: "train" validation_split: "val" label_suffix: .png augmentation: random_flip: vflip_probability: 0.5 hflip_probability: 0.5 enable: True random_rotate: rotate_probability: 0.5 angle_list: [90, 180, 270] enable: True random_color: brightness: 0.3 contrast: 0.3 saturation: 0.3 hue: 0.3 enable: True with_scale_random_crop: enable: True with_random_crop: True with_random_blur: True evaluate: checkpoint: "???" vis_after_n_batches: 10 inference: checkpoint: "???" vis_after_n_batches: 1 export: gpu_id: 0 checkpoint: "???" onnx_file: "???" input_width: 256 input_height: 256

使用以下命令运行 VisualChangeNet-Segmentation 训练

复制
已复制!
            

tao model visual_changenet train -e <experiment_spec_file> task=segment [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_file:实验规范文件的路径。

  • task:visual_changenet 训练的任务(“segment”或“classify”)。默认值:segment。

可选参数

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

注意

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

检查点和恢复训练

在每个 train.checkpoint_interval,都会保存一个 PyTorch Lightning 检查点。它被称为 model_epoch_<epoch_num>.pth。这些保存在 train.results_dir 中,如下所示

复制
已复制!
            

$ ls /results/train 'model_epoch_000.pth' 'model_epoch_001.pth' 'model_epoch_002.pth' 'model_epoch_003.pth' 'model_epoch_004.pth'

最新的检查点也将保存为 changenet_model_segment_latest.pth。如果 changenet_model_segment_latest.pth 存在于 train.results_dir 中,训练将自动从它恢复。如果提供了 train.resume_training_checkpoint_path,则它将被取代。

此逻辑的主要含义是,如果您希望从头开始触发全新训练,则

  • 指定一个新的空结果目录(推荐),或者

  • 从结果目录中删除最新的检查点

这是一个示例规范文件,用于测试已训练的 VisualChangeNet-Segmentation 模型的评估和推理

复制
已复制!
            

results_dir: /path/to/experiment_results task: segment model: backbone: type: "fan_small_12_p4_hybrid" dataset: segment: dataset: "CNDataset" root_dir: /path/to/root/dataset/dir/ data_name: "LEVIR-CD" label_transform: "norm" batch_size: 16 workers: 2 multi_scale_train: True multi_scale_infer: False num_classes: 2 img_size: 256 image_folder_name: "A" change_image_folder_name: "B" list_folder_name: 'list' annotation_folder_name: "label" test_split: "test" predict_split: 'predict' label_suffix: .png evaluate: checkpoint: /path/to/checkpoint vis_after_n_batches: 1 results_dir: /results/evaluate inference: checkpoint: /path/to/checkpoint vis_after_n_batches: 1 results_dir: /results/inference

参数 数据类型 默认值 描述 支持的值
checkpoint 字符串 要评估/推理的 PyTorch 模型路径
vis_after_n_batches 整数 每个可视化输出保存之间的批次间隔数。
trt_engine 字符串 要推理的 TensorRT 模型路径。应仅与 TAO Deploy 一起使用
num_gpus 无符号整数 1 要使用的 GPU 数量 >0
gpu_ids 无符号整数 [0] 要使用的 GPU ID
results_dir 字符串 应在其中写入实验输出的文件夹路径

使用以下命令运行 VisualChangeNet-Segmentation 评估

复制
已复制!
            

tao model visual_changenet evaluate -e <experiment_spec> task=segment evaluate.checkpoint=<model to be evaluated> [evaluate.<evaluate_option>=<evaluate_option_value>] [evaluate.gpu_ids=<gpu indices>] [evaluate.num_gpus=<number of gpus>]

必需参数

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

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

可选参数

使用以下命令在 VisualChangeNet-Segmentation 上运行推理,使用 .tlt 模型

复制
已复制!
            

tao model visual_changenet inference -e <experiment_spec> task=segment inference.checkpoint=<inference model> [inference.<evaluate_option>=<evaluate_option_value>] [inference.gpu_ids=<gpu indices>] [inference.num_gpus=<number of gpus>]

必需参数

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

  • inference.checkpoint:要在其上运行推理的 .pth 模型。

可选参数

这是一个示例规范文件,用于导出已训练的 VisualChangeNet 模型

复制
已复制!
            

export: checkpoint: /path/to/model.pth onnx_file: /path/to/model.onnx opset_version: 12 input_channel: 3 input_width: 256 input_height: 256 batch_size: -1

参数 数据类型 默认值 描述 支持的值
checkpoint 字符串 要导出的 PyTorch 模型路径
onnx_file 字符串 .onnx 文件的路径
opset_version 无符号整数 12 导出的 ONNX 的 opset 版本 >0
input_channel 无符号整数 3 输入通道大小。仅支持值 3。 3
input_width 无符号整数 256 输入宽度 >0
input_height 无符号整数 256 输入高度 >0
batch_size 无符号整数 -1 ONNX 模型的批次大小。如果此值设置为 -1,则导出使用动态批次大小。 >=-1

使用以下命令导出模型

复制
已复制!
            

tao model visual_changenet export [-h] -e <experiment spec file> task=segment 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 模型的路径。

可选参数

上一篇 VisualChangeNet
下一篇 Visual ChangeNet-分类
© 版权所有 2024, NVIDIA。 上次更新于 2024 年 10 月 15 日。