timm documentation
HParams
HParams
A lo largo de los años, muchos modelos de timm se han entrenado con diversos hiperparámetros a medida que las librerías y los modelos evolucionaban. No tengo un registro de cada instancia, pero he documentado muchas que pueden servir como un muy buen punto de partida.
Comience con los gists de archivos de configuración para las ejecuciones registradas, o con las recetas seleccionadas a continuación para configuraciones que puede copiar en un archivo YAML. Los ejemplos de scripts de entrenamiento muestran sus equivalentes en línea de comandos.
Etiquetas
La mayoría de los modelos entrenados con timm tienen un identificador en su etiqueta de preentrenamiento que los relaciona (aproximadamente) con una familia o versión de hiperparámetros que he utilizado a lo largo de los años.
La familia de recetas es una pista, no una configuración completa. Al elegir una configuración, asegúrese de que coincidan el nombre completo del checkpoint, el conjunto de datos de entrenamiento y la resolución. Por ejemplo, vit_medium_patch16_reg4_gap_256.sbb_in1k se entrenó en ImageNet-1k, mientras que .sbb_in12k_ft_in1k identifica un preentrenamiento en ImageNet-12k seguido de un ajuste fino en ImageNet-1k. Algunas etiquetas codifican un calendario y una resolución en lugar de un nombre de familia: la etiqueta e500_r256_in1k de MobileNetV4 pertenece a la familia ra4 aunque ra4 no aparezca en la etiqueta.
| Etiqueta(s) | Descripción | Optimizador | Programa de LR | Otras notas |
|---|---|---|---|---|
a1h | Basado en la receta A1 de ResNet Strikes Back | LAMB | Coseno con calentamiento | Dropout más fuerte, profundidad estocástica y RandAugment que la receta del artículo A1 |
ah | Basado en la receta A1 de ResNet Strikes Back | LAMB | Coseno con calentamiento | Sin CutMix. Dropout, profundidad estocástica y RandAugment más intensos que la receta del artículo A1 |
a1, a2, a3 | ResNet contraataca A{1,2,3} receta | LAMB con pérdida BCE | Coseno con calentamiento | — |
b1, b2, b1k, b2k | Basado en la receta B de ResNet Strikes Back (equivalente a las recetas RA2 de timm) | RMSProp (comportamiento de TF 1.0) | Paso (decaimiento exponencial con escalera) con calentamiento | — |
c, c1, c2, c3 | Basado en las recetas C de ResNet Strikes Back | SGD (Nesterov) con AGC | Coseno con calentamiento | — |
ch | Basado en las recetas C de ResNet Strikes Back | SGD (Nesterov) con AGC | Coseno con calentamiento | Dropout más fuerte, profundidad estocástica y RandAugment que las recetas C1/C2 del artículo |
d, d1, d2 | Basado en la receta D de ResNet Strikes Back | AdamW con pérdida BCE | Coseno con calentamiento | — |
sw | Recetas de entrenamiento/preentrenamiento estilo DeiT / Swin, también utilizadas para ConvNeXt y modelos híbridos | AdamW, a menudo con recorte de gradiente | Coseno con calentamiento | EMA varía según la ejecución |
sbb | Buscando mejores líneas base de ViT | AdamW o NAdamW | Coseno con calentamiento | Aumento repetido; decaimiento de capas para el ajuste fino |
ra, ra2, ra3, racm, raa | Recetas de RandAugment. Inspiradas en las recetas de RandAugment de EfficientNet. Cubiertas por la receta B en ResNet Strikes Back. | RMSProp (comportamiento de TF 1.0), EMA | Paso (decaimiento exponencial con escalera) con calentamiento | — |
ra4 | RandAugment v4. Inspirado en los hiperparámetros de MobileNetV4. | AdamW o NAdamW, EMA | Coseno con calentamiento | Incluye recetas de ResNet con programación larga; los betas del optimizador varían según el modelo |
am | Receta de AugMix | SGD (Nesterov) con pérdida JSD | Coseno con calentamiento | — |
ram | Receta de AugMix (con RandAugment) | SGD (Nesterov) con pérdida JSD | Coseno con calentamiento | — |
bt | Receta Bag-of-Tricks | SGD (Nesterov) | Coseno con calentamiento | — |
Gists de archivos de configuración
Estas colecciones contienen las configuraciones YAML grabadas, incluidos los ajustes específicos de las máquinas originales y de la versión del script de entrenamiento. Abra un gist, elija el archivo YAML de un modelo y use Raw para guardarlo localmente.
| Colección de gists | Familia de recetas | Contenido y configuración original |
|---|---|---|
| MobileNetV4 y ResNets con programación larga | ra4 | Ejecuciones de Conv y MobileNetV4 híbridos; las cantidades de GPU están en los nombres de archivo. También incluye configuraciones de ResNet de 3600 épocas. |
| Buscando mejores líneas base de ViT | sbb | Entrenamiento en ImageNet-1k, preentrenamiento en ImageNet-12k y ajuste fino; 2 o 4 GPUs, tal como se indica en cada archivo. |
| Entrenamiento y ajuste fino de ConvNeXt | Recetas de ConvNeXt | Entrenamiento de Atto/Nano en 4 GPUs; ajuste fino de Tiny/Small de ImageNet-12k a ImageNet-1k en 8 GPUs. |
| ViT, ConvNeXt, CoAtNet y MaxViT | Estilo DeiT / Swin | Configuraciones de entrenamiento y ajuste fino mixtos; 4–8 dispositivos GPU o TPU. Muchos usan TFDS. |
| ResNet-D y ECA-ResNet RA2 | ra2 | ResNet-18D/34D/50D y ECA-ResNet-26D; 2 GPUs, tasas de aprendizaje explícitas. |
| RegNet y RegNetZ | ra3, SGD + AGC | 8 núcleos TPU. Algunos archivos son plantillas con model: xxx; el README señala una discrepancia entre la receta y el checkpoint para RegNetY-064. |
| NFNet con recorte adaptativo de gradientes | SGD + AGC | Configuración histórica de ECA-NFNet-L1 en nfnet.yaml; usa Apex fusedsgd. |
| Modelos MLP en TPU | AdamW | Ejecuciones históricas de gMLP, gMixer y ResMLP vinculadas a la rama experimental bits_and_tpu. |
| Modelos de prueba pequeños | Derivado de MobileNetV4 | ViTs y ConvNeXts de prueba pequeños con programas de 1600 a 1800 épocas. |
Adaptar una configuración grabada
Pasa un archivo local con --config hparams.yaml; los argumentos de línea de comandos sobrescriben sus valores. Consulta archivos de configuración para más detalles.
- Establezca
--data-dirpara su máquina. Para un conjunto de datos ImageFolder, también sobrescriba un conjunto de datos TFDS guardado con--dataset imagefolder/. El entrenamiento espera subcarpetas de clases bajotrain/yvalidation/(o elija el directorio de validación con--val-split). - Comprueba
model,pretrained,num_classesy las rutas de cualquier checkpoint. Una configuración de fine-tuning necesita su checkpoint preentrenado original; un nombre de arquitectura por sí solo puede seleccionar pesos predeterminados diferentes hoy en día. - Los archivos antiguos pueden contener opciones eliminadas, como
apex_amp,native_amp,amp_imploforce_cpu. Eltrain.pyactual emite una advertencia sobre las claves desconocidas. Las configuraciones en línea a continuación utilizan opciones actuales. Los nombres de optimizador antiguosfusedadamw/fusedsgdse refieren a implementaciones de Apex; cambiar aadamw/sgdes una adaptación de esa ejecución.
Para el entrenamiento de tamaño fijo, el tamaño de lote global efectivo es:
batch_size × number of training processes × grad_accum_steps
batch_size es por proceso (normalmente una GPU). Un lr no nulo se usa directamente y no se reescala automáticamente. Con lr sin establecer (null en YAML), lr_base se escala en relación con lr_base_size.
Establece lr_base_scale: sqrt para las recetas de AdamW/NAdamW a continuación; el escalado lineal se usa comúnmente para SGD/RMSProp.
Los grandes cambios en el tamaño del lote aún requieren ajuste. La acumulación de gradientes preserva el tamaño efectivo del lote, pero no aumenta el lote visto por BatchNorm.
Para los programas de coseno, warmup_prefix: true añade un período de calentamiento antes del programa de epochs; cooldown_epochs añade un período final en la LR mínima. Mantén estas configuraciones al adaptar una ejecución anterior.
Recetas seleccionadas
Estos ejemplos conservan la configuración de entrenamiento de archivos gist específicos y omiten rutas de máquina y opciones no utilizadas.
Las etiquetas del modelo fijan la configuración de preprocesamiento; los pesos se cargan solo cuando pretrained: true.
Las precisiones de referencia a continuación son evaluaciones de los puntos de control publicados en results-imagenet.csv,
no mediciones obtenidas de la reejecución de estos ejemplos. La resolución y el recorte de validación son importantes al comparar resultados.
| Punto de control publicado | Entrenamiento | Tamaño / recorte de evaluación | 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.
La ejecución original utilizó 2 GPUs × 512 imágenes = 1024 de lote global, con una LR fija de 0.002.
El programa consiste en 20 épocas de calentamiento seguidas de 500 épocas coseno (520 en total). Guárdalo 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: inductorEste ejemplo usa AMP con bfloat16, como en la ejecución original; use --amp-dtype float16 en GPUs sin soporte para bfloat16. torchcompile puede omitirse si no se desea la compilación.
ViT Medium con registros
Fuente: train-vit_medium_reg4-4gpu-in1k.yaml,
también disponible como train_hparams.yaml del checkpoint.
Esta ejecución de SBB utilizó 4 GPUs × 256 imágenes = 1024 de lote global. La escalación por raíz cuadrada da 0.0008 × sqrt(1024 / 512) ≈ 0.001131. Sus 600 épocas incluyen warmup, con 10 épocas de cooldown añadidas.
Guárdalo 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: inductorLa configuración de inicialización (fix_init y un clasificador inicializado a cero) forma parte de esta receta.
Esta ejecución en particular utilizó AdamW y no EMA; otros archivos SBB utilizan NAdamW o diferentes configuraciones de preentrenamiento.
Ajuste fino de ConvNeXt Tiny
Fuente: hparams_84_00-convnext_tiny.in12k-args.yaml.
Comience desde convnext_tiny.in12k, reemplace su clasificador con
1000 clases y ajuste fino en ImageNet-1k. La ejecución original utilizó 8 GPUs × 512 imágenes = 4096 lote global y
una LR fija de 0.0001. Tiene 75 épocas incluyendo warmup, más 10 épocas de cooldown.
La fuente evalúa con un crop de 1.0; los resultados de benchmark del checkpoint anteriores utilizan los crops de evaluación indicados.
Guarde 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: float16Por ejemplo, inicie la configuración de MobileNetV4 guardada con:
torchrun --standalone --nproc_per_node=2 train.py \ --config mobilenetv4.yaml --data-dir /data/imagenet --experiment mobilenetv4-cm
Use 4 procesos para vit-medium.yaml o 8 para convnext-tiny-ft.yaml para coincidir con los tamaños de lote globales originales, o ajuste el tamaño de lote, la acumulación y la LR para su hardware.