timm documentation

HParams

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

HParams

Ao longo dos anos, muitos modelos do timm foram treinados com diversos hiperparâmetros à medida que as bibliotecas e os modelos evoluíram. Não tenho um registro de cada instância, mas registrei instâncias de muitos que podem servir como um excelente ponto de partida.

Comece pelos gists de arquivos de configuração para execuções gravadas, ou pelas receitas selecionadas abaixo para configurações que você pode copiar para um arquivo YAML. Os exemplos de scripts de treinamento mostram seus equivalentes na linha de comando.

Tags

A maioria dos modelos treinados com timm possui um identificador em sua tag de pré-treinamento que os relaciona (aproximadamente) a uma família / versão de hiperparâmetros que utilizei ao longo dos anos.

A família de receitas é uma dica, não uma configuração completa. Ao escolher uma configuração, verifique o nome completo do checkpoint, o conjunto de dados de treinamento e a resolução. Por exemplo, vit_medium_patch16_reg4_gap_256.sbb_in1k foi treinado no ImageNet-1k, enquanto .sbb_in12k_ft_in1k identifica o pré-treinamento no ImageNet-12k seguido de ajuste fino no ImageNet-1k. Algumas tags codificam um agendamento e uma resolução em vez de um nome de família: o e500_r256_in1k do MobileNetV4 pertence à família ra4, mesmo que ra4 esteja ausente da tag.

Tag(s)DescriçãoOtimizadorAgendamento de LROutras observações
a1hCom base na receita A1 de ResNet Strikes BackLAMBCosseno com aquecimentoDropout mais forte, stochastic depth e RandAugment do que a receita do artigo A1
ahCom base na receita A1 de ResNet Strikes BackLAMBCosseno com aquecimentoNo CutMix. Dropout mais forte, profundidade estocástica e RandAugment do que a receita do artigo A1
a1, a2, a3ResNet Contra-Ataca A{1,2,3} receitaLAMB com perda BCECosseno com aquecimento—
b1, b2, b1k, b2kCom base na receita B de ResNet Strikes Back (equivalente às receitas RA2 do timm)RMSProp (comportamento do TF 1.0)Etapa (decaimento exponencial com escada) com aquecimento—
c, c1, c2, c3Com base nas receitas C de ResNet Strikes BackSGD (Nesterov) com AGCCosseno com aquecimento—
chCom base nas receitas C de ResNet Strikes BackSGD (Nesterov) com AGCCosseno com aquecimentoDropout mais forte, stochastic depth e RandAugment do que as receitas C1/C2 do paper
d, d1, d2Com base na receita D de ResNet Strikes BackAdamW com perda BCECosseno com aquecimento—
swReceitas de treino/pré-treino no estilo DeiT / Swin, também usadas para ConvNeXt e modelos híbridosAdamW, geralmente com recorte de gradienteCosseno com aquecimentoO EMA varia a cada execução
sbbBuscando por Melhores Baselines de ViTAdamW ou NAdamWCosseno com aquecimentoAumento repetido; decaimento de camadas para ajuste fino
ra, ra2, ra3, racm, raaReceitas de RandAugment. Inspiradas nas receitas de RandAugment do EfficientNet. Cobertas pela receita B em ResNet Strikes Back.RMSProp (comportamento do TF 1.0), EMAEtapa (decaimento exponencial com escada) com aquecimento—
ra4RandAugment v4. Inspirado nos hiperparâmetros do MobileNetV4.AdamW ou NAdamW, EMACosseno com aquecimentoInclui receitas de ResNet com agendamentos longos; os betas do otimizador variam conforme o modelo
amReceita AugMixSGD (Nesterov) com perda JSDCosseno com aquecimento—
ramReceita do AugMix (com RandAugment)SGD (Nesterov) com perda JSDCosseno com aquecimento—
btReceita Bag-of-TricksSGD (Nesterov)Cosseno com aquecimento—

Gists de Arquivos de Configuração

Essas coleções contêm os configs YAML gravados, incluindo configurações específicas das máquinas originais e da versão do script de treinamento. Abra um gist, escolha o arquivo YAML de um modelo e use Raw para salvá-lo localmente.

Coleção de gistsFamília de receitasConteúdo e configuração original
MobileNetV4 e ResNets com agendamento longora4Execuções de Conv e MobileNetV4 híbridos; as contagens de GPU estão nos nomes dos arquivos. Inclui também configurações de ResNet com 3600 épocas.
Buscando por Melhores Baselines de ViTsbbTreinamento no ImageNet-1k, pré-treinamento no ImageNet-12k e ajuste fino; 2 ou 4 GPUs, conforme indicado em cada arquivo.
Treinamento e ajuste fino do ConvNeXtReceitas do ConvNeXtTreinamento Atto/Nano em 4 GPUs; ajuste fino Tiny/Small de ImageNet-12k para ImageNet-1k em 8 GPUs.
ViT, ConvNeXt, CoAtNet e MaxViTEstilo DeiT / SwinConfigs de treinamento e ajuste fino mistos; 4–8 dispositivos GPU ou TPU. Muitos usam TFDS.
ResNet-D e ECA-ResNet RA2ra2ResNet-18D/34D/50D e ECA-ResNet-26D; 2 GPUs, taxas de aprendizado explícitas.
RegNet e RegNetZra3, SGD + AGC8 núcleos TPU. Alguns arquivos são modelos com model: xxx; o README observa uma incompatibilidade de receita/checkpoint para RegNetY-064.
NFNet com recorte adaptativo de gradienteSGD + AGCConfiguração histórica do ECA-NFNet-L1 em nfnet.yaml; usa Apex fusedsgd.
Modelos MLP em TPUAdamWExecuções históricas de gMLP, gMixer e ResMLP vinculadas ao ramo experimental bits_and_tpu.
Modelos de teste pequenosDerivado do MobileNetV4Pequenos ViTs e ConvNeXts de teste com agendamentos de 1600 a 1800 épocas.

Adaptando uma configuração gravada

Passe um arquivo local com --config hparams.yaml; os argumentos da linha de comando substituem seus valores. Consulte arquivos de configuração para mais detalhes.

  • Defina --data-dir para sua máquina. Para um dataset ImageFolder, substitua também um dataset TFDS salvo com --dataset imagefolder/. O treinamento espera subpastas de classes sob train/ e validation/ (ou escolha o diretório de validação com --val-split).
  • Verifique model, pretrained, num_classes e os caminhos de qualquer checkpoint. Uma configuração de fine-tuning precisa do checkpoint pré-treinado original; apenas um nome de arquitetura pode selecionar pesos padrão diferentes hoje.
  • Arquivos antigos podem conter opções removidas, como apex_amp, native_amp, amp_impl ou force_cpu. O train.py atual emite avisos sobre chaves desconhecidas. As configurações inline abaixo usam as opções atuais. Os nomes antigos de otimizador fusedadamw / fusedsgd referem-se a implementações do Apex; a troca para adamw / sgd é uma adaptação daquela execução.

Para treinamento de tamanho fixo, o tamanho efetivo do lote global é:

batch_size × number of training processes × grad_accum_steps

batch_size é por processo (normalmente uma GPU). Um lr não nulo é usado diretamente e não é reescalado automaticamente. Com lr não definido (null em YAML), lr_base é escalado em relação a lr_base_size. Defina lr_base_scale: sqrt para as receitas AdamW/NAdamW abaixo; a escalação linear é comumente usada para SGD/RMSProp. Mudanças grandes no batch-size ainda precisam de ajuste. A acumulação de gradientes preserva o tamanho efetivo do lote, mas não aumenta o lote visto pelo BatchNorm.

Para os agendamentos de cosseno, warmup_prefix: true adiciona o aquecimento antes do agendamento de epochs; cooldown_epochs adiciona um período final na LR mínima. Mantenha essas configurações ao adaptar uma execução antiga.

Receitas selecionadas

Esses exemplos mantêm as configurações de treinamento de arquivos gist específicos e omitem caminhos de máquina e opções não utilizadas. As tags do modelo fixam a configuração de pré-processamento; os pesos são carregados apenas quando pretrained: true. As acurácias de referência abaixo são avaliações dos checkpoints publicados em results-imagenet.csv, não medições obtidas pela reexecução desses exemplos. A resolução e o crop de validação importam ao comparar resultados.

Checkpoint publicadoTreinamentoTamanho / recorte de avaliaçãoImageNet-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

Fonte: mnv4_cm_r256_e500_gpu2.yaml. A execução original utilizou 2 GPUs × 512 imagens = lote global de 1024, com LR fixo de 0.002. O agendamento consiste em 20 épocas de aquecimento seguidas por 500 épocas de cosseno (520 no total). Salve como 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

Este exemplo usa AMP bfloat16, como na execução original; use --amp-dtype float16 em GPUs sem suporte a bfloat16. torchcompile pode ser omitido quando a compilação não é desejada.

ViT Medium com registros

train-vit_medium_reg4-4gpu-in1k.yaml, também disponível como train_hparams.yaml do checkpoint. Esta execução SBB usou 4 GPUs × 256 imagens = lote global de 1024. A escala pela raiz quadrada resulta em 0.0008 × sqrt(1024 / 512) ≈ 0.001131. Seus 600 epochs incluem warmup, com 10 epochs de cooldown adicionados. Salve como 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

As configurações de inicialização (fix_init e um classificador inicializado com zero) fazem parte desta receita. Esta execução específica utilizou AdamW e sem EMA; outros arquivos SBB utilizam NAdamW ou configurações diferentes de pré-treinamento.

Fine-tuning do ConvNeXt Tiny

Fonte: hparams_84_00-convnext_tiny.in12k-args.yaml. Comece a partir de convnext_tiny.in12k, substitua seu classificador por 1000 classes e faça fine-tuning no ImageNet-1k. A execução original usou 8 GPUs × 512 imagens = 4096 batch global e um LR fixo de 0.0001. Ele tem 75 épocas incluindo warmup, mais 10 épocas de cooldown. A fonte avalia com um crop de 1.0; os resultados de benchmark do checkpoint acima usam os crops de avaliação declarados. Salve como 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

Por exemplo, inicie a configuração do MobileNetV4 salva com:

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

Use 4 processos para vit-medium.yaml ou 8 para convnext-tiny-ft.yaml para corresponder aos tamanhos de lote globais originais, ou ajuste o tamanho do lote, a acumulação e a taxa de aprendizado para o seu hardware.

Update on GitHub