Home

Awesome

PatchDropout: Economizing Vision Transformers Using Patch Dropout

WACV 2023

This is a PyTorch implementation of the paper PatchDropout: Economizing Vision Transformers Using Patch Dropout.

<p float="left"> <img src="images/figure1.jpg" width="300" /> <img src="images/figure4.jpg" width="500" /> </p>

Vision transformers have demonstrated the potential to outperform CNNs in a variety of vision tasks. But the computational and memory requirements of these models prohibit their use in many applications, especially those that depend on high-resolution images, such as medical image classification. Efforts to train ViTs more efficiently are overly complicated, necessitating architectural changes or intricate training schemes. In this work, we show that standard ViT models can be efficiently trained at high resolution by randomly dropping input image patches. This simple approach, PatchDropout, reduces FLOPs and memory by at least 50% in standard natural image datasets such as ImageNet, and those savings only increase with image size. On CSAW, a high-resolution medical dataset, we observe a 5 times savings in computation and memory using PatchDropout, along with a boost in performance. For practitioners with a fixed computational or memory budget, PatchDropout makes it possible to choose image resolution, hyperparameters, or model size to get the most performance out of their model.

@article{liu2022patchdropout,
  title={PatchDropout: Economizing Vision Transformers Using Patch Dropout},
  author={Liu, Yue and Matsoukas, Christos and Strand, Fredrik and Azizpour, Hossein and Smith, Kevin},
  journal={arXiv preprint arXiv:2208.07220},
  year={2022}
}

PatchDropout is easy to implement

To implement PatchDropout you can use our implementation and add it to your codebase using a single line of code.

All you have to do is to call PatchDropout(keep_rate) before the transformer blocks (assuming you have added the positional embeddings).

Setting up Docker environment

Go to folder docker/.

docker build -f Dockerfile -t patchdropout \
--build-arg username=$(username) .
docker run -it --shm-size 60G --gpus all \
-v /path/to/dir/:/home/username/PatchDropout/ \
-v /path/to/storage/:/storage/ patchdropout

Training ViT models with PatchDropout

Go to folder scripts/.

python main.py

Setting up the experiment configuration

Edit the json file in scripts/yaml/train_yaml/