PyTorch image models, scripts, pretrained weights -- ResNet, ResNeXT, EfficientNet, EfficientNetV2, NFNet, Vision Transformer, MixNet, MobileNet-V3/V2, RegNet, DPN, CSPNet, and more
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Go to file
Ross Wightman 38d8f67570
Fix potential issue with change to num_classes arg in train/validate.py defaulting to None (rely on model def / default_cfg)
4 years ago
.github Create config.yml 4 years ago
convert Add working Gluon Xception-65 model. Some cleanup still needed. 5 years ago
docs Add BiT references and knowledge distill links to readme/docs 4 years ago
notebooks ImageNet-1k vs ImageNet-v2 comparison 5 years ago
results Merge branch 'master' into imagenet21k_datasets_more 4 years ago
tests Refactor vision_transformer entrpy fns, add pos embedding resize support for fine tuning, add some deit models for testing 4 years ago
timm Fix potential issue with change to num_classes arg in train/validate.py defaulting to None (rely on model def / default_cfg) 4 years ago
.gitattributes Add .gitattributes 5 years ago
.gitignore Implement Eca modules 5 years ago
LICENSE Add Apache LICENSE file 6 years ago
MANIFEST.in Fix pruned txt files not being installed during pip install 5 years ago
README.md Update README.md and bump version to 0.4.0 4 years ago
avg_checkpoints.py Default to old checkpoint format for now, still want compatibility with older torch ver for released models 4 years ago
clean_checkpoint.py Default to old checkpoint format for now, still want compatibility with older torch ver for released models 4 years ago
distributed_train.sh Fix distributed train script 6 years ago
hubconf.py Simpler approach to loading entrypoints in hubconf works properly 5 years ago
inference.py Merge branch 'master' into imagenet21k_datasets_more 4 years ago
mkdocs.yml Fix some documentation rendering issues 4 years ago
requirements-docs.txt Fix some documentation rendering issues 4 years ago
requirements-sotabench.txt Update requirements so PyTorch 1.4 is min, add separate sotabench reqs to force 1.4 and prevent error with 1.5 5 years ago
requirements.txt Update requirements so PyTorch 1.4 is min, add separate sotabench reqs to force 1.4 and prevent error with 1.5 5 years ago
setup.cfg Add setup.cfg for conda / fastai integration 4 years ago
setup.py Update setup.py 4 years ago
sotabench.py Add ViT to sotabench 4 years ago
sotabench_setup.sh Add Adafactor and Adahessian optimizers, cleanup optimizer arg passing, add gradient clipping support. 4 years ago
train.py Fix potential issue with change to num_classes arg in train/validate.py defaulting to None (rely on model def / default_cfg) 4 years ago
validate.py Fix potential issue with change to num_classes arg in train/validate.py defaulting to None (rely on model def / default_cfg) 4 years ago

README.md

PyTorch Image Models, etc

What's New

Jan 25, 2021

  • Add ResNetV2 Big Transfer (BiT) models w/ ImageNet-1k and 21k weights from https://github.com/google-research/big_transfer
  • Add official R50+ViT-B/16 hybrid models + weights from https://github.com/google-research/vision_transformer
  • Add model defs and weights for DeiT Vision Transformer models from https://github.com/facebookresearch/deit
  • Refactor dataset classes into ImageDataset/IterableImageDataset + dataset specific parser classes
  • Add Tensorflow-Datasets (TFDS) wrapper to allow use of TFDS image classification sets with train script
    • Ex: train.py /data/tfds --dataset tfds/oxford_iiit_pet --val-split test --model resnet50 -b 256 --amp --num-classes 37 --opt adamw --lr 3e-4 --weight-decay .001 --pretrained -j 2
  • Add improved .tar dataset parser that reads images from .tar, folder of .tar files, or .tar within .tar
    • Run validation on full ImageNet-21k directly from tar w/ BiT model: validate.py /data/fall11_whole.tar --model resnetv2_50x1_bitm_in21k --amp
  • Models in this update should be stable w/ possible exception of ViT/BiT, possibility of some regressions with train/val scripts and dataset handling

Jan 3, 2021

  • Add SE-ResNet-152D weights
    • 256x256 val, 0.94 crop top-1 - 83.75
    • 320x320 val, 1.0 crop - 84.36
  • Update results files

Dec 18, 2020

  • Add ResNet-101D, ResNet-152D, and ResNet-200D weights trained @ 256x256
    • 256x256 val, 0.94 crop (top-1) - 101D (82.33), 152D (83.08), 200D (83.25)
    • 288x288 val, 1.0 crop - 101D (82.64), 152D (83.48), 200D (83.76)
    • 320x320 val, 1.0 crop - 101D (83.00), 152D (83.66), 200D (84.01)

Dec 7, 2020

  • Simplify EMA module (ModelEmaV2), compatible with fully torchscripted models
  • Misc fixes for SiLU ONNX export, default_cfg missing from Feature extraction models, Linear layer w/ AMP + torchscript
  • PyPi release @ 0.3.2 (needed by EfficientDet)

Oct 30, 2020

  • Test with PyTorch 1.7 and fix a small top-n metric view vs reshape issue.
  • Convert newly added 224x224 Vision Transformer weights from official JAX repo. 81.8 top-1 for B/16, 83.1 L/16.
  • Support PyTorch 1.7 optimized, native SiLU (aka Swish) activation. Add mapping to 'silu' name, custom swish will eventually be deprecated.
  • Fix regression for loading pretrained classifier via direct model entrypoint functions. Didn't impact create_model() factory usage.
  • PyPi release @ 0.3.0 version!

Oct 26, 2020

  • Update Vision Transformer models to be compatible with official code release at https://github.com/google-research/vision_transformer
  • Add Vision Transformer weights (ImageNet-21k pretrain) for 384x384 base and large models converted from official jax impl
    • ViT-B/16 - 84.2
    • ViT-B/32 - 81.7
    • ViT-L/16 - 85.2
    • ViT-L/32 - 81.5

Oct 21, 2020

  • Weights added for Vision Transformer (ViT) models. 77.86 top-1 for 'small' and 79.35 for 'base'. Thanks to Christof for training the base model w/ lots of GPUs.

Oct 13, 2020

  • Initial impl of Vision Transformer models. Both patch and hybrid (CNN backbone) variants. Currently trying to train...
  • Adafactor and AdaHessian (FP32 only, no AMP) optimizers
  • EdgeTPU-M (efficientnet_em) model trained in PyTorch, 79.3 top-1
  • Pip release, doc updates pending a few more changes...

Sept 18, 2020

  • New ResNet 'D' weights. 72.7 (top-1) ResNet-18-D, 77.1 ResNet-34-D, 80.5 ResNet-50-D
  • Added a few untrained defs for other ResNet models (66D, 101D, 152D, 200/200D)

Sept 3, 2020

  • New weights
    • Wide-ResNet50 - 81.5 top-1 (vs 78.5 torchvision)
    • SEResNeXt50-32x4d - 81.3 top-1 (vs 79.1 cadene)
  • Support for native Torch AMP and channels_last memory format added to train/validate scripts (--channels-last, --native-amp vs --apex-amp)
  • Models tested with channels_last on latest NGC 20.08 container. AdaptiveAvgPool in attn layers changed to mean((2,3)) to work around bug with NHWC kernel.

Aug 12, 2020

  • New/updated weights from training experiments
    • EfficientNet-B3 - 82.1 top-1 (vs 81.6 for official with AA and 81.9 for AdvProp)
    • RegNetY-3.2GF - 82.0 top-1 (78.9 from official ver)
    • CSPResNet50 - 79.6 top-1 (76.6 from official ver)
  • Add CutMix integrated w/ Mixup. See pull request for some usage examples
  • Some fixes for using pretrained weights with in_chans != 3 on several models.

Aug 5, 2020

Universal feature extraction, new models, new weights, new test sets.

  • All models support the features_only=True argument for create_model call to return a network that extracts feature maps from the deepest layer at each stride.
  • New models
    • CSPResNet, CSPResNeXt, CSPDarkNet, DarkNet
    • ReXNet
    • (Modified Aligned) Xception41/65/71 (a proper port of TF models)
  • New trained weights
    • SEResNet50 - 80.3 top-1
    • CSPDarkNet53 - 80.1 top-1
    • CSPResNeXt50 - 80.0 top-1
    • DPN68b - 79.2 top-1
    • EfficientNet-Lite0 (non-TF ver) - 75.5 (submitted by @hal-314)
  • Add 'real' labels for ImageNet and ImageNet-Renditions test set, see results/README.md
  • Test set ranking/top-n diff script by @KushajveerSingh
  • Train script and loader/transform tweaks to punch through more aug arguments
  • README and documentation overhaul. See initial (WIP) documentation at https://rwightman.github.io/pytorch-image-models/
  • adamp and sgdp optimizers added by @hellbell

June 11, 2020

Bunch of changes:

  • DenseNet models updated with memory efficient addition from torchvision (fixed a bug), blur pooling and deep stem additions
  • VoVNet V1 and V2 models added, 39 V2 variant (ese_vovnet_39b) trained to 79.3 top-1
  • Activation factory added along with new activations:
    • select act at model creation time for more flexibility in using activations compatible with scripting or tracing (ONNX export)
    • hard_mish (experimental) added with memory-efficient grad, along with ME hard_swish
    • context mgr for setting exportable/scriptable/no_jit states
  • Norm + Activation combo layers added with initial trial support in DenseNet and VoVNet along with impl of EvoNorm and InplaceAbn wrapper that fit the interface
  • Torchscript works for all but two of the model types as long as using Pytorch 1.5+, tests added for this
  • Some import cleanup and classifier reset changes, all models will have classifier reset to nn.Identity on reset_classifer(0) call
  • Prep for 0.1.28 pip release

May 12, 2020

May 3, 2020

May 1, 2020

  • Merged a number of execellent contributions in the ResNet model family over the past month
  • 200 pretrained models in total now with updated results csv in results folder

April 5, 2020

  • Add some newly trained MobileNet-V2 models trained with latest h-params, rand augment. They compare quite favourably to EfficientNet-Lite
    • 3.5M param MobileNet-V2 100 @ 73%
    • 4.5M param MobileNet-V2 110d @ 75%
    • 6.1M param MobileNet-V2 140 @ 76.5%
    • 5.8M param MobileNet-V2 120d @ 77.3%

March 18, 2020

  • Add EfficientNet-Lite models w/ weights ported from Tensorflow TPU
  • Add RandAugment trained ResNeXt-50 32x4d weights with 79.8 top-1. Trained by Andrew Lavin (see Training section for hparams)

Introduction

PyTorch Image Models (timm) is a collection of image models, layers, utilities, optimizers, schedulers, data-loaders / augmentations, and reference training / validation scripts that aim to pull together a wide variety of SOTA models with ability to reproduce ImageNet training results.

The work of many others is present here. I've tried to make sure all source material is acknowledged via links to github, arxiv papers, etc in the README, documentation, and code docstrings. Please let me know if I missed anything.

Models

All model architecture families include variants with pretrained weights. The are variants without any weights. Help training new or better weights is always appreciated. Here are some example training hparams to get you started.

A full version of the list below with source links can be found in the documentation.

Features

Several (less common) features that I often utilize in my projects are included. Many of their additions are the reason why I maintain my own set of models, instead of using others' via PIP:

Results

Model validation results can be found in the documentation and in the results tables

Getting Started

See the documentation

Train, Validation, Inference Scripts

The root folder of the repository contains reference train, validation, and inference scripts that work with the included models and other features of this repository. They are adaptable for other datasets and use cases with a little hacking. See documentation for some basics and training hparams for some train examples that produce SOTA ImageNet results.

Awesome PyTorch Resources

One of the greatest assets of PyTorch is the community and their contributions. A few of my favourite resources that pair well with the models and componenets here are listed below.

Training / Frameworks

Computer Vision / Image Augmentation

Knowledge Distillation

Metric Learning

Object Detection, Instance and Semantic Segmentation

Licenses

Code

The code here is licensed Apache 2.0. I've taken care to make sure any third party code included or adapted has compatible (permissive) licenses such as MIT, BSD, etc. I've made an effort to avoid any GPL / LGPL conflicts. That said, it is your responsibility to ensure you comply with license here and conditions of any dependent licenses. Where applicable, I've linked the sources/references for various components in docstrings. If you think I've missed anything please create an issue.

Pretrained Weights

So far all of the pretrained weights available here are pretrained on ImageNet with a select few that have some additional pretraining (see extra note below). ImageNet was released for non-commercial research purposes only (http://www.image-net.org/download-faq). It's not clear what the implications of that are for the use of pretrained weights from that dataset. Any models I have trained with ImageNet are done for research purposes and one should assume that the original dataset license applies to the weights. It's best to seek legal advice if you intend to use the pretrained weights in a commercial product.

Pretrained on more than ImageNet

Several weights included or references here were pretrained with proprietary datasets that I do not have access to. These include the Facebook WSL, SSL, SWSL ResNe(Xt) and the Google Noisy Student EfficientNet models. The Facebook models have an explicit non-commercial license (CC-BY-NC 4.0, https://github.com/facebookresearch/semi-supervised-ImageNet1K-models, https://github.com/facebookresearch/WSL-Images). The Google models do not appear to have any restriction beyond the Apache 2.0 license (and ImageNet concerns). In either case, you should contact Facebook or Google with any questions.

Citing

BibTeX

@misc{rw2019timm,
  author = {Ross Wightman},
  title = {PyTorch Image Models},
  year = {2019},
  publisher = {GitHub},
  journal = {GitHub repository},
  doi = {10.5281/zenodo.4414861},
  howpublished = {\url{https://github.com/rwightman/pytorch-image-models}}
}

Latest DOI

DOI