timm documentation

HParams

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

HParams

多年来,随着库和模型的不断演进,许多 timm 模型都使用不同的超参数进行了训练。我并没有记录每一个实例,但记录了其中许多实例,它们可以作为非常好的起点。

从已记录运行的配置文件 gist开始,或者使用下方选定的配方中可复制到 YAML 文件的配置。 训练脚本示例展示了它们的命令行等效形式。

标签

大多数 timm 训练模型在其预训练标签中都有一个标识符,用于将其(大致)关联到我多年来使用过的超参数家族/版本。

配方族是一个提示,而非完整的配置。在选择配置时,请匹配完整的检查点名称、训练数据集和分辨率。例如,vit_medium_patch16_reg4_gap_256.sbb_in1k 是在 ImageNet-1k 上训练的,而 .sbb_in12k_ft_in1k 表示在 ImageNet-12k 上进行预训练,随后在 ImageNet-1k 上进行微调。某些标签编码的是训练计划和分辨率,而非配方族名称:MobileNetV4 的 e500_r256_in1k 属于 ra4 族,尽管标签中未包含 ra4。

标签描述优化器学习率调度其他说明
a1h基于 ResNet Strikes Back A1 配方LAMB带预热阶段的余弦比论文 A1 方案更强的 dropout、随机深度和 RandAugment
ah基于 ResNet Strikes Back A1 配方LAMB带预热阶段的余弦未使用 CutMix。比论文 A1 配方中更强的 dropout、随机深度和 RandAugment
a1, a2, a3ResNet 强势回归 A{1,2,3} 配方采用 BCE 损失的 LAMB带预热阶段的余弦—
b1, b2, b1k, b2k基于 ResNet Strikes Back B 配方(相当于 timm RA2 配方)RMSProp(TF 1.0 行为)带预热(阶梯式指数衰减)的 Step—
c, c1, c2, c3基于 ResNet Strikes Back C 配方SGD(Nesterov)与 AGC带预热阶段的余弦—
ch基于 ResNet Strikes Back C 配方SGD(Nesterov)与 AGC带预热阶段的余弦比论文C1/C2配方更强的 dropout、随机深度和 RandAugment
d, d1, d2基于 ResNet Strikes Back D 配方采用 BCE 损失的 AdamW带预热阶段的余弦—
swDeiT / Swin 风格的训练/预训练方案,同样适用于 ConvNeXt 和混合模型AdamW,通常配合梯度裁剪带预热阶段的余弦EMA 因运行而异
sbb寻找更好的 ViT 基线AdamW 或 NAdamW带预热阶段的余弦重复增强;用于微调的层衰减
ra, ra2, ra3, racm, raaRandAugment 配方。受 EfficientNet 的 RandAugment 配方启发。涵盖在 ResNet Strikes Back 中的 B 配方中。RMSProp(TF 1.0 行为),EMA带预热(阶梯式指数衰减)的 Step—
ra4RandAugment v4。灵感来自 MobileNetV4 超参数。AdamW 或 NAdamW,EMA带预热阶段的余弦包含长周期 ResNet 训练方案;不同模型的优化器 betas 参数有所不同
amAugMix 配方使用 JSD 损失的 SGD(Nesterov)带预热阶段的余弦—
ramAugMix(搭配 RandAugment)配方使用 JSD 损失的 SGD(Nesterov)带预热阶段的余弦—
btBag-of-Tricks 配方SGD(Nesterov)带预热阶段的余弦—

配置文件 Gists

这些集合包含已记录的 YAML 配置文件,其中包括针对原始机器和训练脚本版本的特定设置。打开一个 gist,选择某个模型的 YAML 文件,并使用 Raw 将其保存到本地。

Gist 集合配方系列内容和原始设置
MobileNetV4 和长周期 ResNetsra4Conv 和混合 MobileNetV4 的运行结果;GPU 数量包含在文件名中。此外还包括 3600 个 epoch 的 ResNet 配置。
寻找更好的 ViT 基线sbbImageNet-1k 训练、ImageNet-12k 预训练以及微调;每个文件中指定的 2 或 4 个 GPU。
ConvNeXt 的训练与微调ConvNeXt 配方在 4 个 GPU 上进行 Atto/Nano 训练;在 8 个 GPU 上进行 Tiny/Small 的 ImageNet-12k 到 ImageNet-1k 微调。
ViT、ConvNeXt、CoAtNet 和 MaxViTDeiT / Swin 风格混合训练和微调配置;4–8 个 GPU 或 TPU 设备。许多使用 TFDS。
ResNet-D 和 ECA-ResNet RA2ra2ResNet-18D/34D/50D 和 ECA-ResNet-26D;2 个 GPU,显式学习率。
RegNet 和 RegNetZra3,SGD + AGC8 个 TPU 核心。部分文件是包含 model: xxx 的模板;README 指出 RegNetY-064 存在配方/检查点不匹配的问题。
采用自适应梯度裁剪的 NFNetSGD + AGCnfnet.yaml 中的历史 ECA-NFNet-L1 配置;使用 Apex fusedsgd。
TPU 上的 MLP 模型AdamW与实验性分支 bits_and_tpu 关联的历史 gMLP、gMixer 和 ResMLP 运行记录。
小型测试模型基于 MobileNetV4使用 1600–1800 个 epoch 的训练计划,测试小型 ViT 和 ConvNeXt 模型。

适配已记录的配置

通过 --config hparams.yaml 传入本地文件;命令行参数会覆盖其中的值。有关详细信息,请参阅 配置文件。

  • 为机器设置 --data-dir。对于 ImageFolder 数据集,还需使用 --dataset imagefolder/ 覆盖已保存的 TFDS 数据集。训练要求在 train/ 和 validation/ 下存在类别子文件夹(或使用 --val-split 选择验证目录)。
  • 请检查 model、pretrained、num_classes 以及任何检查点路径。微调配置需要其原始的预训练检查点;仅凭架构名称,今天可能会选择不同的默认权重。
  • 旧文件可能包含已移除的选项,例如 apex_amp、native_amp、amp_impl 或 force_cpu。 当前的 train.py 会对未知的键发出警告。以下内联配置使用的是当前选项。 旧的 fusedadamw / fusedsgd 优化器名称指的是 Apex 的实现;将其切换为 adamw / sgd 是对该运行的一次适配。

对于固定大小的训练,有效全局批处理大小为:

batch_size × number of training processes × grad_accum_steps

batch_size 是每个进程(通常对应一个 GPU)的批大小。非零的 lr 会被直接使用,且不会自动重新缩放。如果未设置 lr(在 YAML 中为 null),则 lr_base 会相对于 lr_base_size 进行缩放。对于下文中的 AdamW/NAdamW 配方,请设置 lr_base_scale: sqrt;线性缩放通常用于 SGD/RMSProp。大幅更改批大小仍然需要调优。梯度累积可以保持有效批大小不变,但不会增大 BatchNorm 所看到的批大小。

对于余弦调度,warmup_prefix: true 会在 epochs 调度之前添加预热阶段;cooldown_epochs 会在末尾添加一个处于最小学习率的阶段。在适配旧运行时,请保留这些设置。

精选配方

这些示例保留了特定 gist 文件中的训练设置,并省略了机器路径和未使用的选项。 模型标签用于固定预处理配置;仅当 pretrained: true 时才会加载权重。 以下参考准确率是对 results-imagenet.csv 中已发布检查点的评估, 而非重新运行这些示例所得到的测量值。在比较结果时,分辨率和验证裁剪方式至关重要。

已发布的检查点训练评估大小 / 裁剪ImageNet-1k top-1
mobilenetv4_conv_medium.e500_r256_in1kImageNet-1k,256px256 / 0.95; 320 / 1.079.916%; 80.890%
vit_medium_patch16_reg4_gap_256.sbb_in1kImageNet-1k,256px256 / 0.9583.466%
convnext_tiny.in12k_ft_in1kImageNet-12k → ImageNet-1k,224px224 / 0.95; 288 / 1.084.192%; 84.448%

MobileNetV4 Conv Medium

源文件:mnv4_cm_r256_e500_gpu2.yaml。 原始运行使用了 2 个 GPU × 512 张图像 = 1024 的全局 batch,学习率固定为 0.002。 调度策略为 20 个 warmup epoch,随后是 500 个 cosine epoch(共 520 个 epoch)。保存为 mobilenetv4.yaml:

model: mobilenetv4_conv_medium.e500_r256_in1k
pretrained: false
img_size: 256
crop_pct: 0.95
batch_size: 512
opt: adamw
lr: 0.002
weight_decay: 0.1
clip_grad: 5.0
sched: cosine
sched_on_updates: true
epochs: 500
warmup_epochs: 20
warmup_prefix: true
warmup_lr: 0.0
min_lr: 0.0
cooldown_epochs: 0
aa: rand-m8-inc1-mstd1.0
mixup: 0.2
mixup_prob: 0.8
smoothing: 0.1
reprob: 0.25
remode: pixel
drop: 0.2
drop_path: 0.1
model_ema: true
model_ema_decay: 0.9998
model_ema_warmup: true
dist_bn: reduce
amp: true
amp_dtype: bfloat16
torchcompile: inductor

此示例与源运行一样使用 bfloat16 AMP;在不支持 bfloat16 的 GPU 上,请使用 --amp-dtype float16。如果不需要编译,可以省略 torchcompile。

带寄存器(registers)的 ViT Medium

源文件:train-vit_medium_reg4-4gpu-in1k.yaml, 也可作为检查点的 train_hparams.yaml 获取。 此 SBB 运行使用了 4 个 GPU × 256 张图像 = 1024 的全局批次。平方根缩放给出 0.0008 × sqrt(1024 / 512) ≈ 0.001131。其 600 个 epoch 包含预热,并额外增加了 10 个冷却 epoch。 保存为 vit-medium.yaml:

model: vit_medium_patch16_reg4_gap_256.sbb_in1k
pretrained: false
model_kwargs:
  fix_init: true
head_init_scale: 0.0
img_size: 256
crop_pct: 0.95
batch_size: 256
opt: adamw
opt_eps: 1.0e-8
lr: null
lr_base: 0.0008
lr_base_size: 512
lr_base_scale: sqrt
weight_decay: 0.07
clip_grad: 5.0
sched: cosine
sched_on_updates: true
epochs: 600
warmup_epochs: 20
warmup_prefix: false
warmup_lr: 5.0e-7
min_lr: 5.0e-7
cooldown_epochs: 10
aa: rand-m7-inc1-mstd1.0-n3
aug_repeats: 3
color_jitter: 0.0
mixup: 0.8
cutmix: 1.0
smoothing: 0.1
reprob: 0.2
remode: pixel
drop_path: 0.2
model_ema: false
seed: 0
amp: true
amp_dtype: float16
torchcompile: inductor

初始化设置(fix_init 和零初始化的分类器)是该配方的一部分。 本次运行使用了 AdamW,未使用 EMA;其他 SBB 文件则使用 NAdamW 或不同的预训练设置。

ConvNeXt Tiny 微调

源文件:hparams_84_00-convnext_tiny.in12k-args.yaml。 从 convnext_tiny.in12k 开始,将其分类器替换为 1000 个类别,并在 ImageNet-1k 上进行微调。原始运行使用了 8 个 GPU × 512 张图像 = 4096 的全局批次,以及固定的学习率 0.0001。它包含 75 个 epoch(含 warmup),外加 10 个 cooldown epoch。源文件使用 1.0 的 crop 进行评估;上述检查点的基准测试结果使用了所注明的评估 crop。 保存为 convnext-tiny-ft.yaml:

model: convnext_tiny.in12k
pretrained: true
num_classes: 1000
img_size: 224
crop_pct: 1.0
batch_size: 512
grad_checkpointing: true
opt: adamw
lr: 0.0001
weight_decay: 0.05
layer_decay: 0.75
clip_grad: 3.0
sched: cosine
sched_on_updates: false
epochs: 75
warmup_epochs: 10
warmup_prefix: false
warmup_lr: 1.0e-6
min_lr: 5.0e-7
cooldown_epochs: 10
lr_noise: [0.1, 1.0]
aa: rand-m8-inc1-mstd101
mixup: 0.8
cutmix: 1.0
smoothing: 0.1
reprob: 0.3
remode: pixel
drop_path: 0.1
model_ema: true
model_ema_decay: 0.9998
amp: true
amp_dtype: float16

例如,使用以下命令启动已保存的 MobileNetV4 配置:

torchrun --standalone --nproc_per_node=2 train.py \
  --config mobilenetv4.yaml --data-dir /data/imagenet --experiment mobilenetv4-cm

使用 4 个进程运行 vit-medium.yaml,或使用 8 个进程运行 convnext-tiny-ft.yaml,以匹配原始的全局批次大小, 或者根据您的硬件调整批次大小、累积和 LR。

Update on GitHub