导入
训练工作流程
了解 PyTorch 图像模型中的训练流程。
从高层角度来看,整个训练过程包含以下步骤:
初始化
- 初始化分布式训练的相关参数。此步骤仅在
args.distributed为True时适用。 - 设置一个种子值(seed),以确保实验结果具有可复现性。
- 使用
timm.create_model函数创建所需的模型结构。 - 根据模型的默认配置初始化数据集相关参数。每个模型都有其特定的配置,通常包含以下信息:
1{ 2 'url': '', 3 'num_classes': 1000, 4 'input_size': (3, 224, 224), 5 'pool_size': (7, 7), 6 'crop_pct': 0.875, 7 'interpolation': 'bicubic', 8 'mean': (0.485, 0.456, 0.406), 9 'std': (0.229, 0.224, 0.225), 10 'first_conv': 'conv1', 11 'classifier': 'fc' 12}
- 确定数据增强批分割的数量,并将数据划分为
N组。其中一半组不进行任何数据增强,另一半则应用增强操作。训练脚本会为每组使用独立的批归一化层(batch normalization layer)。因此,训练过程中每个增强分组都将拥有各自的批归一化层。
注意:如果分割数为 0,则脚本会对整个批次统一应用所有相关的数据增强操作,然后使用该批次来计算批归一化的统计量(如均值和方差)。
优化器与批归一化
-
在多 GPU 训练时,训练脚本会初始化 PyTorch 原生的
SyncBatchNorm或 apex 的syncBN,用于批归一化处理,从而在整个跨多个 GPU 的批次上进行统一归一化。 -
检查
torchscript参数,若启用,则调用torch.jit函数使模型具备可导出能力。 -
根据所有与优化器相关的参数初始化优化器。
-
若启用,则开启混合精度训练功能,使用
apex.amp或torch.cuda.amp.autocast实现。 -
检查是否设置了
resume参数以加载模型检查点,若有,则加载对应的模型权重并从中断处恢复训练。 -
基于模型权重设置指数移动平均(EMA)。
-
根据相关参数配置分布式训练环境。
-
初始化学习率调度器(scheduler)。
-
构建训练集和验证集。如有需要,自动下载数据集并完成类别映射。
数据增强
- 初始化 Mixup 或 CutMix 数据增强模块。
注意:此阶段并未实际执行数据增强,仅构建增强流程管道。
- 如果增强批分割数量大于 1,则将训练数据集转换为
AugmixDataset类型。 - 创建训练和验证数据加载器(data loader)。
注意:数据增强和数据变换在此步骤中实际执行。
损失函数与训练
- 根据相关参数配置损失函数。
- 设置模型检查点保存器以及评估指标跟踪器。
- 对模型进行一个 epoch 的训练。持续训练直至满足保存或评估条件,随后对模型进行评估,并将输出的评估指标保存至文件中。