timm documentation
HParams
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 A1 | LAMB | Косинус с разминкой | Более сильный dropout, stochastic depth и RandAugment, чем в рецепте A1 из статьи |
ah | На основе рецепта ResNet Strikes Back A1 | LAMB | Косинус с разминкой | Без CutMix. Более сильный dropout, stochastic depth и RandAugment, чем в рецепте A1 из статьи |
a1, a2, a3 | ResNet наносит ответный удар 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 Back | SGD (Nesterov) с AGC | Косинус с разминкой | — |
ch | На основе рецептов C из ResNet Strikes Back | SGD (Nesterov) с AGC | Косинус с разминкой | Более сильный dropout, stochastic depth и RandAugment, чем в рецептах C1/C2 из статьи |
d, d1, d2 | На основе рецепта D из ResNet Strikes Back | AdamW с потерей BCE | Косинус с разминкой | — |
sw | Рецепты обучения/предобучения в стиле DeiT / Swin, также используемые для ConvNeXt и гибридных моделей | AdamW, часто с обрезкой градиентов | Косинус с разминкой | EMA различается от запуска к запуску |
sbb | Поиск лучших базовых моделей ViT | AdamW или NAdamW | Косинус с разминкой | Повторное усиление; затухание слоёв для дообучения |
ra, ra2, ra3, racm, raa | Рецепты RandAugment. Вдохновлены рецептами RandAugment из EfficientNet. Покрыты рецептом B в ResNet Strikes Back. | RMSProp (поведение TF 1.0), EMA | Шаг (экспоненциальное затухание с лестницей) с разминкой | — |
ra4 | RandAugment v4. Вдохновлено гиперпараметрами MobileNetV4. | AdamW или NAdamW, EMA | Косинус с разминкой | Включает рецепты ResNet с длительным расписанием; значения бета оптимизатора различаются в зависимости от модели |
am | Рецепт AugMix | SGD (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 эпох. |
| Поиск лучших базовых моделей ViT | sbb | Обучение на ImageNet-1k, предварительное обучение на ImageNet-12k и дообучение; 2 или 4 GPU, как указано в каждом файле. |
| Обучение и дообучение ConvNeXt | Рецепты ConvNeXt | Обучение Atto/Nano на 4 GPU; дообучение Tiny/Small с ImageNet-12k до ImageNet-1k на 8 GPU. |
| ViT, ConvNeXt, CoAtNet и MaxViT | DeiT / Swin | Конфигурации смешанного обучения и дообучения; 4–8 устройств GPU или TPU. Многие используют TFDS. |
| ResNet-D и ECA-ResNet RA2 | ra2 | ResNet-18D/34D/50D и ECA-ResNet-26D; 2 GPU, явные значения коэффициентов обучения. |
| RegNet и RegNetZ | ra3, SGD + AGC | 8 ядер TPU. Некоторые файлы являются шаблонами с model: xxx; в README указано, что для RegNetY-064 рецепт и контрольная точка не совпадают. |
| NFNet с адаптивным обрезанием градиентов | SGD + AGC | Историческая конфигурация ECA-NFNet-L1 в nfnet.yaml; использует Apex fusedsgd. |
| Модели MLP на TPU | AdamW | Исторические прогоны 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_in1k | ImageNet-1k, 256px | 256 / 0.95; 320 / 1.0 | 79.916%; 80.890% |
| vit_medium_patch16_reg4_gap_256.sbb_in1k | ImageNet-1k, 256px | 256 / 0.95 | 83.466% |
| convnext_tiny.in12k_ft_in1k | ImageNet-12k → ImageNet-1k, 224px | 224 / 0.95; 288 / 1.0 | 84.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 под ваше оборудование.