timm documentation
API Model timm
API Model timm
Setiap model timm adalah torch.nn.Module yang berbagi antarmuka umum di atas forward(). Antarmuka ini membagi model menjadi ekstraktor fitur dan kepala klasifikasi, mengekspos fitur perantara, serta menyediakan hook untuk pelatihan (checkpointing gradien, pengelompokan parameter) dan untuk mengubah resolusi input. Kode yang ditulis berdasarkan antarmuka ini berfungsi di berbagai arsitektur, yang merupakan cara skrip pelatihan timm, pembungkus ekstraksi fitur, dan pabrik optimizer menangani setiap model dengan cara yang sama.
Halaman ini menjelaskan antarmuka dari model yang telah dibangun: bagian mana yang disediakan oleh setiap model, bagian mana yang disediakan oleh sebagian besar model, dan bagian mana yang spesifik untuk beberapa keluarga. Cara model dibuat (argumen create_model, tag pretrained, dan konfigurasi pretrained) dibahas dalam referensi model.
Ekstraktor fitur dan kepala
Forward pass sebuah model adalah forward_head(forward_features(x)).
forward_features(x)mengembalikan output yang tidak dipooling dari tahap terakhir, setelah lapisan norm terakhir jika model memilikinya: peta fiturNCHWuntuk model konvolusional, tokenNLC(termasuk token prefix kelas / register apa pun) untuk model gaya ViT.forward_head(x, pre_logits=False)menerapkan global pooling (atau pemilihan token), lapisan pre-logits apa pun, dan klasifikator. Denganpre_logits=True, proses berhenti sebelum klasifikator dan mengembalikan fitur yang telah di-pool.
Tiga atribut menggambarkan ukuran yang terlibat:
| Atribut | Deskripsi |
|---|---|
num_classes | Ukuran output klasifikator, 0 jika klasifikator dihapus |
num_features | Jumlah channel (atau dimensi embedding) dari output forward_features |
head_hidden_size | Ukuran output pre_logits=True, yaitu input klasifikator. Sama dengan num_features kecuali head memiliki lapisan tersembunyi (mis. ConvNeXt dengan head_hidden_size yang disetel) atau concat pooling (catavgmax menggandakannya) |
import torch
import timm
model = timm.create_model('convnext_atto').eval()
x = torch.randn(2, 3, 224, 224)
features = model.forward_features(x) # (2, 320, 7, 7), num_features = 320
pooled = model.forward_head(features, pre_logits=True) # (2, 320), head_hidden_size = 320
logits = model.forward_head(features) # (2, 1000), same as model(x)Beberapa model menyimpang dari bentuk satu tensor masuk, satu tensor keluar: model multi-cabang (CrossViT,
EfficientViM) mengembalikan sebuah list dari forward_features, dan ViT NaFlex / Gemma4 menerima input koordinat patch dan
validitas tambahan untuk resolusi variabel.
Klasifikator
get_classifier()mengembalikan modul klasifikator.reset_classifier(num_classes, global_pool=None)mengganti classifier dengan yang baru, diinisialisasi secara acak.num_classes=0mengganti klasifikator dengan identitas, sehinggamodel(x)mengembalikan fitur yang telah dipooling ketika pooling masih diaktifkan.global_poolmengubah pooling pada saat yang sama.global_pool=''menonaktifkannya; dikombinasikan dengannum_classes=0,model(x)mengembalikan fitur yang tidak di-pool.global_pool=Nonemempertahankan pooling saat ini.
Membuat model dengan num_classes / global_pool yang diset memiliki efek yang sama dengan mereset klasifikator setelahnya,
tanpa mengalokasikan klasifikator asli. Menara visual hanya-encoder (encoder DeepSeek, Gemma4, MobileNetV5, dan Qwen3)
tidak memiliki klasifikator dan tidak mengimplementasikan metode-metode ini.
Fitur perantara
forward_intermediates(x, indices=None, norm=False, stop_early=False, output_fmt='NCHW', intermediates_only=False)menjalankan model dan mengembalikan fitur akhir beserta daftar fitur perantara.indicesmemilih intermediates:Noneuntuk semua,intnuntuknterakhir, atau daftar indeks (nilai negatif dihitung dari akhir).intermediates_only=Truehanya mengembalikan fitur perantara.stop_early=Truemelewati blok setelah indeks terpilih terakhir (beberapa model, misalnya MobileNetV3, memerlukanintermediates_only=True).norm=Truemenerapkan lapisan norm akhir ke setiap intermediate.
feature_infomenjelaskan fitur perantara yang tersedia, satu entri per indeks dengan jumlah saluran (num_chs), stride relatif terhadap input (reduction), dan nama modul (module).prune_intermediate_layers(indices=1, prune_norm=False, prune_head=True)menghapus blok setelah indeks terakhir yang akan digunakan (dan secara opsional norm akhir serta head) serta mengembalikan indeks absolut yang akan diambil. Gunakan ini ketika model hanya akan digunakan untuk mengekstrak intermediates, sebagai backbone untuk head deteksi atau segmentasi.prune_head=Truemenghapus seluruh head (head norm, lapisan pre-logits, attention pooling, dan classifier), meninggalkan paling banyak hanya pooling. Berikanprune_head=Falseuntuk mempertahankan head ketika lebar fitur tidak berubah.- Ketika pruning mengubah lebar fitur (pruning model hierarkis ke tahap sebelumnya), head dan final norm yang berukuran untuk tahap terakhir juga dihapus.
forward_features()kemudian berakhir di fitur terakhir yang dipertahankan, dannum_features/head_hidden_sizeadalah lebarnya. - Dengan nilai bawaan, model yang dipangkas tidak memiliki parameter yang tidak terpakai (DDP bekerja tanpa
find_unused_parameters), kecuali CoaT (blok paralel), CrossViT, dan HRNet ketika hanya sebagian dari skala/cabang paralel mereka yang diambil.
model = timm.create_model('resnet18').eval()
print([(f['num_chs'], f['reduction']) for f in model.feature_info])
# [(64, 2), (64, 4), (128, 8), (256, 16), (512, 32)]
final, intermediates = model.forward_intermediates(x) # all 5 feature levels
last_two = model.forward_intermediates(x, indices=2, intermediates_only=True) # (2, 256, 14, 14), (2, 512, 7, 7)
take_indices = model.prune_intermediate_layers(indices=2, prune_head=True) # [3, 4], no classifier leftSemua fitur dikembalikan sebagai peta NCHW secara default, termasuk milik model gaya ViT, di mana token spasialnya dibentuk ulang menjadi grid dengan token prefix dihapus. Opsi output_fmt lainnya bersifat spesifik keluarga (NLC untuk model gaya ViT, NHWC untuk beberapa model), begitu pula argumen tambahan seperti return_prefix_tokens (keluarga ViT). Membuat model dengan features_only=True membungkusnya sebagai backbone yang mengembalikan peta fitur dari model(x), lihat feature extraction untuk detail kedua pendekatan tersebut.
Ukuran input
Model terbagi menjadi tiga kelompok berdasarkan cara mereka menangani resolusi input:
- Ukuran input apa pun. Sebagian besar model konvolusional, serta hibrida konvolusional tanpa embedding posisi berukuran tetap atau partisi jendela, dapat bekerja pada ukuran input apa pun yang lebih besar dari total stride mereka, tanpa perubahan.
- Ukuran input tetap, dapat diubah. Model dengan position embeddings, partisi jendela attention, atau tabel posisi relatif dibangun untuk satu ukuran, yang ditetapkan oleh argumen
img_sizesaat pembuatan (default:input_sizedari cfg pretrained). Pada keluarga model yang mengimplementasikannya (ViT, DeiT, BEiT, EVA, Swin, MaxViT, dan lainnya, lihat tabel di bawah),set_input_size(img_size=...)mengubahnya kemudian, dengan melakukan resampling pada position embeddings dan tabel posisi relatif serta memperbarui jendela. Beberapa model menerima argumen tambahan, misalnyapatch_sizeuntuk ViT,window_size/window_ratiountuk Swin. Memanggilnya pada ukuran saat ini tidak mengubah model. Model lainnya harus dibuat denganimg_sizeyang akan digunakan. - Ukuran input dinamis. Model keluarga ViT dan EVA yang dibuat dengan
dynamic_img_size=Truemelakukan resampling pada position embedding mereka ke ukuran input pada setiap forward pass, dengan sedikit biaya dalam hal kecepatan. Model Swin, SwinV2, dan SwinV2-CR yang dibuat dengandynamic_img_size=True(atau ekuivalennyastrict_img_size=False) menghitung attention mask mereka untuk ukuran input pada setiap forward pass sebagai gantinya. ViT NaFlex menangani resolusi variabel secara native.
model = timm.create_model('vit_tiny_patch16_224')
model.set_input_size(img_size=(384, 384))
model(torch.randn(1, 3, 384, 384))Hook pelatihan
set_grad_checkpointing(enable=True)mengaktifkan checkpointing aktivasi (gradien), yang menghitung ulang aktivasi maju dari setiap blok pada langkah mundur untuk menghemat memori (--grad-checkpointingditrain.py). Sebagian besar model mendukungnya, tetapi beberapa arsitektur lama (VGG, Inception, NASNet, β¦) akan memicu error.group_matcher(coarse=False)mengembalikan ekspresi reguler yang menetapkan setiap parameter ke grup stem atau blok. Pabrik optimizer menggunakannya untuk menskalakan learning rate per layer untuk layer-wise learning rate decay (layer_decay, lihat referensi optimizers).no_weight_decay(), jika diimplementasikan, mengembalikan nama parameter yang tidak boleh didekay dengan weight decay (position embeddings, class tokens, β¦). Pabrik optimizer mengecualikan parameter-parameter ini dan semua parameter 1D (biases, norm scales) dari weight decay.
Konfigurasi pralatih
model.pretrained_cfg (dan alias lamanya model.default_cfg) adalah dict yang menjelaskan checkpoint sumber: ukuran input, interpolasi, crop, normalisasi, nama modul classifier dan conv pertama, lisensi, serta sumber. Ini digunakan untuk menyesuaikan classifier dan input conv saat bobot pretrained dimuat, serta sebagai nilai default pra-pemrosesan. Lihat referensi model untuk detail field-nya.
Pretrained cfg tidak berubah saat model dibuat atau dimodifikasi agar berbeda dari checkpoint-nya (in_chans, img_size, set_input_size()). Input saat ini dari model dilacak secara terpisah, timm.models.get_model_input_config(model) mengembalikan channel, ukuran, dan constraint ukuran tetapnya, dan timm.data.resolve_input_data_config(model) menyelesaikan data config untuk transformasi terhadapnya. timm.models.get_model_args(model) mengembalikan argumen untuk membangun ulang model seperti saat ini, dan save_for_hf menuliskannya ke config yang diekspor, sehingga model yang di-resize atau diadaptasi dapat dimuat ulang. Lihat adapt and export models.
Dukungan dari keluarga
Tabel di bawah ini merangkum bagian opsional dari antarmuka yang didukung oleh masing-masing keluarga model. Tabel ini dihasilkan oleh hfdocs/generate_model_docs.py, yang membangun dan menjalankan model kecil dari setiap kelas model dalam setiap keluarga. Dukungan dapat bervariasi antar arsitektur dalam satu keluarga, lihat halaman keluarga untuk detailnya.
| Keluarga | Kelas | features_only | forward_intermediates | prune_intermediate_layers | Ukuran input apa pun | set_input_size | dynamic_img_size | Grad checkpointing | Layer decay | reset_classifier |
|---|---|---|---|---|---|---|---|---|---|---|
| Aligned Xception | XceptionAligned | β | β | β | β | β | β | β | β | β |
| BEiT | Beit | β | β | β | β | β | β | β | β | β |
| BYOANet (BoTNet, HaloNet, LambdaNet) | ByobNet | β | β | β | β | β | β | β | β | β |
| BYOBNet (GENet, RepVGG, MobileOne, β¦) | ByobNet | β | β | β | β | β | β | β | β | β |
| CaiT | Cait | β | β | β | β | β | β | β | β | β |
| CoaT | CoaT | β | β | β | β | β | β | β | β | β |
| ConViT | ConVit | β | β | β | β | β | β | β | β | β |
| ConvMixer | ConvMixer | β | β | β | β | β | β | β | β | β |
| ConvNeXt | ConvNeXt | β | β | β | β | β | β | β | β | β |
| CPUBone | CPUBone | β | β | β | β | β | β | β | β | β |
| CrossViT | CrossVit | β | β | β | β | β | β | β | β | β |
| CSATv2 | CSATv2 | β | β | β | β | β | β | β | β | β |
| CSPNet (CSPResNet, CSPDarkNet, DarkNet) | CspNet | β | β | β | β | β | β | β | β | β |
| CSPNeXt | CspNext | β | β | β | β | β | β | β | β | β |
| DaViT | DaVit | β | β | β | β | β | β | β | β | β |
| DeepSeek ViT | DeepseekVitClassifier | β | β | β | β | β | β | β | β | β |
DeepseekVitEncoder | β | β | β | β | β | β | β | β | β | |
| DeiT | VisionTransformer, VisionTransformerDistilled | β | β | β | β | β | β | β | β | β |
| DenseNet | DenseNet | β | β | β | β | β | β | β | β | β |
| DLA | DLA | β | β | β | β | β | β | β | β | β |
| DPN | DPN | β | β | β | β | β | β | β | β | β |
| EdgeNeXt | EdgeNeXt | β | β | β | β | β | β | β | β | β |
| EfficientFormer | EfficientFormer | β | β | β | β | β | β | β | β | β |
| EfficientFormer-V2 | EfficientFormerV2 | β | β | β | β | β | β | β | β | β |
| EfficientNet | EfficientNet | β | β | β | β | β | β | β | β | β |
| EfficientViM | EfficientViM, EfficientViMDistilled | β | β | β | β | β | β | β | β | β |
| EfficientViT (MIT) | EfficientVit, EfficientVitLarge | β | β | β | β | β | β | β | β | β |
| EfficientViT (MSRA) | EfficientVitMsra | β | β | β | β | β | β | β | β | β |
| EVA | Eva | β | β | β | β | β | β | β | β | β |
| FasterNet | FasterNet | β | β | β | β | β | β | β | β | β |
| FastViT | FastVit | β | β | β | β | β | β | β | β | β |
| FocalNet | FocalNet | β | β | β | β | β | β | β | β | β |
| GCViT | GlobalContextVit | β | β | β | β | β | β | β | β | β |
| Gemma 4 ViT | Gemma4VitClassifier | β | β | β | β | β | β | β | β | β |
Gemma4VitEncoder | β | β | β | β | β | β | β | β | β | |
| GhostNet | GhostNet | β | β | β | β | β | β | β | β | β |
| HardCoRe-NAS | MobileNetV3 | β | β | β | β | β | β | β | β | β |
| Hiera | Hiera | β | β | β | β | β | β | β | β | β |
| HieraDet (SAM 2) | HieraDet | β | β | β | β | β | β | β | β | β |
| HRNet | HighResolutionNet | β | β | β | β | β | β | β | β | β |
| Hybrid Vision Transformer | VisionTransformer | β | β | β | β | β | β | β | β | β |
| iFormer | IFormer | β | β | β | β | β | β | β | β | β |
| Inception-ResNet-v2 | InceptionResnetV2 | β | β | β | β | β | β | β | β | β |
| Inception-v3 | InceptionV3 | β | β | β | β | β | β | β | β | β |
| Inception-v4 | InceptionV4 | β | β | β | β | β | β | β | β | β |
| InceptionNeXt | MetaNeXt | β | β | β | β | β | β | β | β | β |
| LeViT | Levit, LevitDistilled | β | β | β | β | β | β | β | β | β |
| LowFormer | LowFormer | β | β | β | β | β | β | β | β | β |
| MambaOut | MambaOut | β | β | β | β | β | β | β | β | β |
| MaxViT dan CoAtNet | MaxxVit | β | β | β | β | β | β | β | β | β |
| MetaFormer (PoolFormer, ConvFormer, CAFormer) | MetaFormer | β | β | β | β | β | β | β | β | β |
| MLP-Mixer, ResMLP dan gMLP | MlpMixer | β | β | β | β | β | β | β | β | β |
| MobileNet-V3 | MobileNetV3 | β | β | β | β | β | β | β | β | β |
| MobileNet-V5 | MobileNetV5 | β | β | β | β | β | β | β | β | β |
MobileNetV5Encoder | β | β | β | β | β | β | β | β | β | |
| MobileViT | ByobNet | β | β | β | β | β | β | β | β | β |
| MViTv2 | MultiScaleVit | β | β | β | β | β | β | β | β | β |
| NaFlex ViT | NaFlexVit | β | β | β | β | β | β | β | β | β |
| NASNet | NASNetALarge | β | β | β | β | β | β | β | β | β |
| NesT | Nest | β | β | β | β | β | β | β | β | β |
| Next-ViT | NextViT | β | β | β | β | β | β | β | β | β |
| NFNet | NormFreeNet | β | β | β | β | β | β | β | β | β |
| PiT | PoolingVisionTransformer | β | β | β | β | β | β | β | β | β |
| PNASNet | PNASNet5Large | β | β | β | β | β | β | β | β | β |
| PP-HGNet | HighPerfGpuNet | β | β | β | β | β | β | β | β | β |
| PP-LCNetV2 | LCNetV2 | β | β | β | β | β | β | β | β | β |
| PVTv2 | PyramidVisionTransformerV2 | β | β | β | β | β | β | β | β | β |
| Qwen3 ViT | Qwen3VitClassifier | β | β | β | β | β | β | β | β | β |
Qwen3VitEncoder | β | β | β | β | β | β | β | β | β | |
| RDNet | RDNet | β | β | β | β | β | β | β | β | β |
| RegNet | RegNet | β | β | β | β | β | β | β | β | β |
| RepGhost | RepGhostNet | β | β | β | β | β | β | β | β | β |
| RepViT | RepVit | β | β | β | β | β | β | β | β | β |
| Res2Net | ResNet | β | β | β | β | β | β | β | β | β |
| ResNeSt | ResNet | β | β | β | β | β | β | β | β | β |
| ResNet | ResNet | β | β | β | β | β | β | β | β | β |
| ResNetV2 (BiT) | ResNetV2 | β | β | β | β | β | β | β | β | β |
| ReXNet | RexNet | β | β | β | β | β | β | β | β | β |
| Segment Anything ViT | VisionTransformerSAM | β | β | β | β | β | β | β | β | β |
| SelecSLS | SelecSls | β | β | β | β | β | β | β | β | β |
| SENet (legacy) | SENet | β | β | β | β | β | β | β | β | β |
| Sequencer | Sequencer2d | β | β | β | β | β | β | β | β | β |
| SHViT | SHViT | β | β | β | β | β | β | β | β | β |
| SKNet | ResNet | β | β | β | β | β | β | β | β | β |
| StarNet | StarNet | β | β | β | β | β | β | β | β | β |
| SwiftFormer | SwiftFormer | β | β | β | β | β | β | β | β | β |
| Swin Transformer | SwinTransformer | β | β | β | β | β | β | β | β | β |
| Swin Transformer V2 | SwinTransformerV2 | β | β | β | β | β | β | β | β | β |
| Swin Transformer V2 (CR) | SwinTransformerV2Cr | β | β | β | β | β | β | β | β | β |
| TinyViT | TinyVit | β | β | β | β | β | β | β | β | β |
| TNT | TNT | β | β | β | β | β | β | β | β | β |
| TResNet | TResNet | β | β | β | β | β | β | β | β | β |
| Kembar | Twins | β | β | β | β | β | β | β | β | β |
| VGG | VGG | β | β | β | β | β | β | β | β | β |
| Visformer | Visformer | β | β | β | β | β | β | β | β | β |
| Transformator Visi (posisi relatif) | VisionTransformerRelPos | β | β | β | β | β | β | β | β | β |
| Vision Transformer (ViT) | VisionTransformer | β | β | β | β | β | β | β | β | β |
| ViTamin | VisionTransformer | β | β | β | β | β | β | β | β | β |
| VOLO | VOLO | β | β | β | β | β | β | β | β | β |
| VoVNet | VovNet | β | β | β | β | β | β | β | β | β |
| Xception (legacy) | Xception | β | β | β | β | β | β | β | β | β |
| XCiT | Xcit | β | β | β | β | β | β | β | β | β |
β didukung, β (persegi) hanya berfungsi untuk ukuran persegi, β tidak didukung, β tidak diperlukan (model sudah menerima ukuran input apa pun). Setiap kelas model dalam sebuah keluarga diperiksa dengan menjalankan setiap fitur pada model yang diinisialisasi secara acak dari arsitektur terkecil (non-test) dalam keluarga tersebut. Kelas dengan hasil yang sama berbagi satu baris, dan halaman keluarga mencantumkan arsitektur yang digunakan untuk masing-masing.
Menerapkan model
Model baru harus mengimplementasikan antarmuka agar dapat bekerja dengan skrip pelatihan, ekstraksi fitur, dan pabrik optimizer tanpa kasus khusus:
forward_features,forward_head(x, pre_logits=False)danforwardsebagai komposisinya, dengannum_classes,num_featuresdanhead_hidden_sizediatur.get_classifierdanreset_classifier(num_classes, global_pool=None).forward_intermediates,prune_intermediate_layersdan daftarfeature_info.set_grad_checkpointing,group_matcher, danno_weight_decayuntuk parameter mana pun yang tidak boleh didekay.set_input_sizejika model dibangun untuk ukuran input tetap.- Argumen konstruktor standar:
num_classes,in_chans,global_pool,drop_rate,drop_path_rate, dandevice/dtypeuntuk pembuatan parameter.
tests/test_models.py memeriksa bagian antarmuka forward, backward, features, intermediates, classifier reset, dan pretrained cfg untuk model-model yang terdaftar (model terbesar dikecualikan dari beberapa tes untuk menjaga waktu CI tetap rendah).