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 обучалось с различными гиперпараметрами по мере развития библиотек и моделей. У меня нет записи о каждом случае, но я зафиксировал многие из них, которые могут служить отличной отправной точкой.

Начните с gists файлов конфигурации для записанных запусков или с выбранных рецептов ниже для конфигураций, которые можно скопировать в YAML-файл. Примеры скриптов обучения показывают их эквиваленты в командной строке.

Теги

Большинство моделей, обученных с помощью timm, имеют идентификатор в теге pretrained, который (примерно) связывает их с семейством или версией гиперпараметров, которые я использовал на протяжении многих лет.

Семейство рецепта является подсказкой, а не полной конфигурацией. При выборе конфигурации сверяйте полное имя контрольной точки, обучающий набор данных и разрешение. Например, vit_medium_patch16_reg4_gap_256.sbb_in1k обучался на ImageNet-1k, тогда как .sbb_in12k_ft_in1k указывает на предварительное обучение на ImageNet-12k с последующей дообучением на ImageNet-1k. Некоторые теги кодируют расписание и разрешение вместо имени семейства: e500_r256_in1k для MobileNetV4 относится к семейству ra4, хотя ra4 отсутствует в теге.

ТегиОписаниеОптимизаторРасписание LRДругие примечания
a1hНа основе рецепта ResNet Strikes Back A1LAMBКосинус с разминкойБолее сильный dropout, stochastic depth и RandAugment, чем в рецепте A1 из статьи
ahНа основе рецепта ResNet Strikes Back A1LAMBКосинус с разминкойБез CutMix. Более сильный dropout, stochastic depth и RandAugment, чем в рецепте A1 из статьи
a1, a2, a3ResNet наносит ответный удар A{1,2,3} рецептLAMB с потерей BCEКосинус с разминкой—
b1, b2, b1k, b2kНа основе рецепта ResNet Strikes Back B (эквивалентен рецептам timm RA2)RMSProp (поведение TF 1.0)Шаг (экспоненциальное затухание с лестницей) с разминкой—
c, c1, c2, c3На основе рецептов C из ResNet Strikes BackSGD (Nesterov) с AGCКосинус с разминкой—
chНа основе рецептов C из ResNet Strikes BackSGD (Nesterov) с AGCКосинус с разминкойБолее сильный dropout, stochastic depth и RandAugment, чем в рецептах C1/C2 из статьи
d, d1, d2На основе рецепта D из ResNet Strikes BackAdamW с потерей BCEКосинус с разминкой—
swРецепты обучения/предобучения в стиле DeiT / Swin, также используемые для ConvNeXt и гибридных моделейAdamW, часто с обрезкой градиентовКосинус с разминкойEMA различается от запуска к запуску
sbbПоиск лучших базовых моделей ViTAdamW или NAdamWКосинус с разминкойПовторное усиление; затухание слоёв для дообучения
ra, ra2, ra3, racm, raaРецепты RandAugment. Вдохновлены рецептами RandAugment из EfficientNet. Покрыты рецептом B в ResNet Strikes Back.RMSProp (поведение TF 1.0), EMAШаг (экспоненциальное затухание с лестницей) с разминкой—
ra4RandAugment v4. Вдохновлено гиперпараметрами MobileNetV4.AdamW или NAdamW, EMAКосинус с разминкойВключает рецепты ResNet с длительным расписанием; значения бета оптимизатора различаются в зависимости от модели
amРецепт AugMixSGD (Nesterov) с потерей JSDКосинус с разминкой—
ramРецепт AugMix (с RandAugment)SGD (Nesterov) с потерей JSDКосинус с разминкой—
btРецепт «Bag-of-Tricks»SGD (Нестеров)Косинус с разминкой—

Gists файлов конфигурации

Эти коллекции содержат записанные конфигурации YAML, включая настройки, специфичные для исходных машин и версии скрипта обучения. Откройте gist, выберите файл YAML модели и используйте Raw, чтобы сохранить его локально.

Коллекция гистовСемья рецептовСодержание и исходная настройка
MobileNetV4 и ResNet с длинным расписаниемra4Запуски Conv и гибридных MobileNetV4; количество GPU указано в именах файлов. Также включены конфигурации ResNet на 3600 эпох.
Поиск лучших базовых моделей ViTsbbОбучение на ImageNet-1k, предварительное обучение на ImageNet-12k и дообучение; 2 или 4 GPU, как указано в каждом файле.
Обучение и дообучение ConvNeXtРецепты ConvNeXtОбучение Atto/Nano на 4 GPU; дообучение Tiny/Small с ImageNet-12k до ImageNet-1k на 8 GPU.
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 рецепт и контрольная точка не совпадают.
NFNet с адаптивным обрезанием градиентовSGD + AGCИсторическая конфигурация ECA-NFNet-L1 в nfnet.yaml; использует Apex fusedsgd.
Модели MLP на TPUAdamWИсторические прогоны gMLP, gMixer и ResMLP, связанные с экспериментальной веткой bits_and_tpu.
Маленькие тестовые моделиНа основе MobileNetV4Небольные тестовые ViT и ConvNeXt с расписанием на 1600–1800 эпох.

Адаптация записанной конфигурации

Передайте локальный файл с помощью --config hparams.yaml; аргументы командной строки переопределяют его значения. Подробности см. в разделе файлы конфигурации.

  • Укажите --data-dir для вашей машины. Для набора данных ImageFolder также переопределите сохранённый датасет TFDS с помощью --dataset imagefolder/. Для обучения ожидаются подпапки классов в 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 не задано (null в YAML), lr_base масштабируется относительно lr_base_size. Для рецептов AdamW/NAdamW ниже установите lr_base_scale: sqrt; линейное масштабирование обычно используется для SGD/RMSProp. Значительные изменения размера батча все равно требуют настройки. Накопление градиентов сохраняет эффективный размер батча, но не увеличивает батч, видимый BatchNorm.

Для косинусных расписаний warmup_prefix: true добавляет разгон перед расписанием epochs; cooldown_epochs добавляет финальный период на минимальной LR. Сохраняйте эти настройки при адаптации старого запуска.

Выбранные рецепты

Эти примеры сохраняют настройки обучения из конкретных файлов 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 изображений = глобальный batch 1024, с фиксированным LR 0.002. Расписание: 20 warmup эпох, затем 500 эпох с cosine (всего 520). Сохраните как 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, как в исходном запуске; на GPU без поддержки bfloat16 используйте --amp-dtype float16. torchcompile можно опустить, если компиляция не требуется.

ViT Medium с регистрами

Источник: train-vit_medium_reg4-4gpu-in1k.yaml, также доступен как train_hparams.yaml контрольной точки. В этом запуске SBB использовалось 4 GPU × 256 изображений = глобальная мини-пакет (global batch) 1024. Масштабирование по квадратному корню дает 0.0008 × sqrt(1024 / 512) ≈ 0.001131. Его 600 эпох включают разгон (warmup), с добавлением 10 эпох охлаждения (cooldown). Сохраните как 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 глобальный батч и фиксированная LR 0.0001. Всего 75 эпох, включая warmup, плюс 10 эпох cooldown. Исходный файл оценивается с crop 1.0; результаты бенчмарка чекпоинта выше используют указанные 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