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 모델이 학습되었습니다. 모든 사례를 기록하지는 않았지만, 매우 좋은 시작점이 될 수 있는 많은 사례를 기록해 두었습니다.

기록된 실행에 대한 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 스케줄기타 참고 사항
a1hA1 레시피인 ResNet Strikes Back에 기반하여LAMBWarmup이 포함된 Cosine논문 A1 레시피보다 더 강한 dropout, stochastic depth, RandAugment
ahA1 레시피인 ResNet Strikes Back에 기반하여LAMBWarmup이 포함된 CosineCutMix 없음. 논문 A1 레시피보다 더 강한 dropout, stochastic depth, RandAugment
a1, a2, a3ResNet의 반격 A{1,2,3} 레시피BCE 손실을 사용한 LAMBWarmup이 포함된 Cosine—
b1, b2, b1k, b2kB 레시피(즉, timm의 RA2 레시피와 동일)에 기반한 ResNet Strikes BackRMSProp (TF 1.0 동작)Step (exponential decay w/ staircase) with warmup—
c, c1, c2, c3C 레시피를 기반으로 한 ResNet Strikes BackAGC를 적용한 SGD (Nesterov)Warmup이 포함된 Cosine—
chC 레시피를 기반으로 한 ResNet Strikes BackAGC를 적용한 SGD (Nesterov)Warmup이 포함된 Cosine논문 C1/C2 레시피보다 더 강한 dropout, stochastic depth, RandAugment
d, d1, d2D 레시피를 기반으로 한 ResNet Strikes BackBCE 손실을 사용한 AdamWWarmup이 포함된 Cosine—
swConvNeXt 및 하이브리드 모델에도 사용되는 DeiT / Swin 스타일의 학습/프리트레인 레시피AdamW, 보통 gradient clipping과 함께Warmup이 포함된 CosineEMA는 실행마다 달라집니다
sbb더 나은 ViT 베이스라인 탐색AdamW 또는 NAdamWWarmup이 포함된 Cosine반복 증강; 미세 조정용 레이어 감쇠
ra, ra2, ra3, racm, raaRandAugment 레시피. EfficientNet의 RandAugment 레시피에서 영감을 받았습니다. ResNet Strikes Back의 B 레시피에 포함되어 있습니다.RMSProp (TF 1.0 동작), EMAStep (exponential decay w/ staircase) with warmup—
ra4RandAugment v4. MobileNetV4 하이퍼파라미터에서 영감을 받았습니다.AdamW 또는 NAdamW, EMAWarmup이 포함된 Cosine긴 스케줄 ResNet 레시피를 포함하며, 옵티마이저 베타는 모델에 따라 달라집니다
amAugMix 레시피JSD 손실을 사용한 SGD (Nesterov)Warmup이 포함된 Cosine—
ramAugMix (RandAugment 포함) 레시피JSD 손실을 사용한 SGD (Nesterov)Warmup이 포함된 Cosine—
btBag-of-Tricks 레시피SGD (Nesterov)Warmup이 포함된 Cosine—

Config File Gists

이 컬렉션에는 원본 머신 및 학습 스크립트 버전에 특정한 설정을 포함한 기록된 YAML 구성 파일이 포함되어 있습니다. gist를 열고 모델의 YAML 파일을 선택한 후 Raw를 사용하여 로컬에 저장하세요.

Gist 컬렉션레시피 계열Contents 및 원래 설정
MobileNetV4와 긴 스케줄 ResNetsra4Conv 및 하이브리드 MobileNetV4 실행 결과입니다. GPU 수는 파일명에 포함되어 있습니다. 3600에포크 ResNet 구성도 포함되어 있습니다.
더 나은 ViT 베이스라인 탐색sbbImageNet-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, 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의 레시피/체크포인트 불일치가 명시되어 있습니다.
적응적 그래디언트 클리핑을 사용한 NFNetSGD + AGCnfnet.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_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개 이미지 = 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을 조정하세요.

Update on GitHub