timm documentation
HParams
HParams
수년간 라이브러리와 모델이 발전하면서 다양한 하이퍼파라미터로 timm 모델이 학습되었습니다. 모든 사례를 기록하지는 않았지만, 매우 좋은 시작점이 될 수 있는 많은 사례를 기록해 두었습니다.
기록된 실행에 대한 config file gists로 시작하거나, YAML 파일에 복사할 수 있는 설정을 위한 아래 selected recipes를 사용할 수 있습니다. training script examples에는 해당 명령줄 동등물이 표시됩니다.
태그
대부분의 timm 학습 모델에는 pretrained 태그에 식별자가 포함되어 있으며, 이는 수년에 걸쳐 사용해 온 하이퍼파라미터의 계열/버전과 (대략적으로) 관련이 있습니다.
레시피 패밀리는 힌트일 뿐 완전한 구성이 아닙니다. 구성을 선택할 때는 전체 체크포인트 이름, 학습 데이터셋, 해상도를 일치시켜야 합니다. 예를 들어, vit_medium_patch16_reg4_gap_256.sbb_in1k는 ImageNet-1k에서 학습된 반면, .sbb_in12k_ft_in1k는 ImageNet-12k 사전 학습 후 ImageNet-1k 미세 조정을 나타냅니다. 일부 태그는 패밀리 이름 대신 스케줄과 해상도를 인코딩합니다: MobileNetV4의 e500_r256_in1k는 태그에 ra4가 없더라도 ra4 패밀리에 속합니다.
| 태그 | 설명 | 옵티마이저 | LR 스케줄 | 기타 참고 사항 |
|---|---|---|---|---|
a1h | A1 레시피인 ResNet Strikes Back에 기반하여 | LAMB | Warmup이 포함된 Cosine | 논문 A1 레시피보다 더 강한 dropout, stochastic depth, RandAugment |
ah | A1 레시피인 ResNet Strikes Back에 기반하여 | LAMB | Warmup이 포함된 Cosine | CutMix 없음. 논문 A1 레시피보다 더 강한 dropout, stochastic depth, RandAugment |
a1, a2, a3 | ResNet의 반격 A{1,2,3} 레시피 | BCE 손실을 사용한 LAMB | Warmup이 포함된 Cosine | — |
b1, b2, b1k, b2k | B 레시피(즉, timm의 RA2 레시피와 동일)에 기반한 ResNet Strikes Back | RMSProp (TF 1.0 동작) | Step (exponential decay w/ staircase) with warmup | — |
c, c1, c2, c3 | C 레시피를 기반으로 한 ResNet Strikes Back | AGC를 적용한 SGD (Nesterov) | Warmup이 포함된 Cosine | — |
ch | C 레시피를 기반으로 한 ResNet Strikes Back | AGC를 적용한 SGD (Nesterov) | Warmup이 포함된 Cosine | 논문 C1/C2 레시피보다 더 강한 dropout, stochastic depth, RandAugment |
d, d1, d2 | D 레시피를 기반으로 한 ResNet Strikes Back | BCE 손실을 사용한 AdamW | Warmup이 포함된 Cosine | — |
sw | ConvNeXt 및 하이브리드 모델에도 사용되는 DeiT / Swin 스타일의 학습/프리트레인 레시피 | AdamW, 보통 gradient clipping과 함께 | Warmup이 포함된 Cosine | EMA는 실행마다 달라집니다 |
sbb | 더 나은 ViT 베이스라인 탐색 | AdamW 또는 NAdamW | Warmup이 포함된 Cosine | 반복 증강; 미세 조정용 레이어 감쇠 |
ra, ra2, ra3, racm, raa | RandAugment 레시피. EfficientNet의 RandAugment 레시피에서 영감을 받았습니다. ResNet Strikes Back의 B 레시피에 포함되어 있습니다. | RMSProp (TF 1.0 동작), EMA | Step (exponential decay w/ staircase) with warmup | — |
ra4 | RandAugment v4. MobileNetV4 하이퍼파라미터에서 영감을 받았습니다. | AdamW 또는 NAdamW, EMA | Warmup이 포함된 Cosine | 긴 스케줄 ResNet 레시피를 포함하며, 옵티마이저 베타는 모델에 따라 달라집니다 |
am | AugMix 레시피 | JSD 손실을 사용한 SGD (Nesterov) | Warmup이 포함된 Cosine | — |
ram | AugMix (RandAugment 포함) 레시피 | JSD 손실을 사용한 SGD (Nesterov) | Warmup이 포함된 Cosine | — |
bt | Bag-of-Tricks 레시피 | SGD (Nesterov) | Warmup이 포함된 Cosine | — |
Config File Gists
이 컬렉션에는 원본 머신 및 학습 스크립트 버전에 특정한 설정을 포함한 기록된 YAML 구성 파일이 포함되어 있습니다. gist를 열고 모델의 YAML 파일을 선택한 후 Raw를 사용하여 로컬에 저장하세요.
| Gist 컬렉션 | 레시피 계열 | Contents 및 원래 설정 |
|---|---|---|
| MobileNetV4와 긴 스케줄 ResNets | ra4 | Conv 및 하이브리드 MobileNetV4 실행 결과입니다. GPU 수는 파일명에 포함되어 있습니다. 3600에포크 ResNet 구성도 포함되어 있습니다. |
| 더 나은 ViT 베이스라인 탐색 | sbb | ImageNet-1k 학습, ImageNet-12k 사전 학습, 파인튜닝; 각 파일에 명시된 2개 또는 4개 GPU. |
| ConvNeXt 학습 및 미세 조정 | ConvNeXt 레시피 | 4개 GPU에서 Atto/Nano 학습; 8개 GPU에서 Tiny/Small ImageNet-12k에서 ImageNet-1k로 fine-tuning. |
| 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 | nfnet.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 1개). 0이 아닌 lr은 그대로 사용되며 자동으로 재조정되지 않습니다. lr이 설정되지 않은 경우(YAML에서 null), 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개 이미지 = 1024의 전역 배치, 고정 LR 0.002를 사용했습니다.
스케줄은 20개의 warmup epoch에 이어 500개의 cosine epoch(총 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를 사용합니다. bfloat16을 지원하지 않는 GPU에서는 --amp-dtype float16을 사용하세요. 컴파일을 원하지 않는 경우 torchcompile은 생략할 수 있습니다.
레지스터가 있는 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에포크에는 워밍업이 포함되며, 10에포크의 쿨다운이 추가되었습니다.
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에서 fine-tune합니다. 원래 실행에서는 8개 GPU × 512 이미지 = 4096 global batch와 고정된 LR 0.0001을 사용했습니다. warmup을 포함한 75 epochs와 10 cooldown epochs로 구성됩니다.
소스는 1.0 crop으로 평가하며, 위 checkpoint의 벤치마크 결과는 명시된 평가 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
vit-medium.yaml의 경우 4개 프로세스, convnext-tiny-ft.yaml의 경우 8개 프로세스를 사용하여 원래의 전역 배치 크기에 맞추거나, 하드웨어에 맞게 배치 크기, 누적, LR을 조정하세요.