PoolFormer: MetaFormer Is Actually What You Need for Vision (CVPR 2022 Oral)
PoolFormer: MetaFormer Is Actually What You Need for Vision (CVPR 2022 Oral)
Figure 2: (a) **The overall framework of PoolFormer.** (b) **The architecture of PoolFormer block.** Compared with Transformer block, it replaces attention with an extremely simple non-parametric operator, pooling, to conduct only basic token mixing. ## Bibtex ``` @inproceedings{yu2022metaformer, title={Metaformer is actually what you need for vision}, author={Yu, Weihao and Luo, Mi and Zhou, Pan and Si, Chenyang and Zhou, Yichen and Wang, Xinchao and Feng, Jiashi and Yan, Shuicheng}, booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition}, pages={10819--10829}, year={2022} } ``` **Detection and instance segmentation on COCO** configs and trained models are [here](detection/). **Semantic segmentation on ADE20K** configs and trained models are [here](segmentation/). The code to visualize Grad-CAM activation maps of PoolFomer, DeiT, ResMLP, ResNet and Swin are [here](misc/cam_image.py). The code to measure MACs are [here](misc/mac_count_with_fvcore.py). ## Image Classification ### 1. Requirements torch>=1.7.0; torchvision>=0.8.0; pyyaml; [apex-amp](https://github.com/NVIDIA/apex) (if you want to use fp16); [timm](https://github.com/rwightman/pytorch-image-models) (`pip install git+https://github.com/rwightman/pytorch-image-models.git@9d6aad44f8fd32e89e5cca503efe3ada5071cc2a`) data prepare: ImageNet with the following folder structure, you can extract ImageNet by this [script](https://gist.github.com/BIGBALLON/8a71d225eff18d88e469e6ea9b39cef4). ``` │imagenet/ ├──train/ │ ├── n01440764 │ │ ├── n01440764_10026.JPEG │ │ ├── n01440764_10027.JPEG │ │ ├── ...... │ ├── ...... ├──val/ │ ├── n01440764 │ │ ├── ILSVRC2012_val_00000293.JPEG │ │ ├── ILSVRC2012_val_00002138.JPEG │ │ ├── ...... │ ├── ...... ``` ### 2. PoolFormer Models | Model | #Params | Image resolution | #MACs* | Top1 Acc| Download | | :--- | :---: | :---: | :---: | :---: | :---: | | poolformer_s12 | 12M | 224 | 1.8G | 77.2 | [here](https://github.com/sail-sg/poolformer/releases/download/v1.0/poolformer_s12.pth.tar) | | poolformer_s24 | 21M | 224 | 3.4G | 80.3 | [here](https://github.com/sail-sg/poolformer/releases/download/v1.0/poolformer_s24.pth.tar) | | poolformer_s36 | 31M | 224 | 5.0G | 81.4 | [here](https://github.com/sail-sg/poolformer/releases/download/v1.0/poolformer_s36.pth.tar) | | poolformer_m36 | 56M | 224 | 8.8G | 82.1 | [here](https://github.com/sail-sg/poolformer/releases/download/v1.0/poolformer_m36.pth.tar) | | poolformer_m48 | 73M | 224 | 11.6G | 82.5 | [here](https://github.com/sail-sg/poolformer/releases/download/v1.0/poolformer_m48.pth.tar) | All the pretrained models can also be downloaded by [BaiDu Yun](https://pan.baidu.com/s/1HSaJtxgCkUlawurQLq87wQ) (password: esac). * For convenient comparison with future models, we update the numbers of MACs counted by [fvcore](https://github.com/facebookresearch/fvcore) library ([example code](misc/mac_count_with_fvcore.py)) which are also reported in the [new arXiv version](https://arxiv.org/abs/2111.11418). #### Web Demo Integrated into [Huggingface Spaces ](https://huggingface.co/spaces) using [Gradio](https://github.com/gradio-app/gradio). Try out the Web Demo: [](https://huggingface.co/spaces/akhaliq/poolformer) #### Usage We also provide a Colab notebook which run the steps to perform inference with poolformer: [](https://colab.research.google.com/drive/1n1UK4ihfiySTWTDuusAhm_6CLm1h4bTj?usp=sharing) ### 3. Validation To evaluate our PoolFormer models, run: ```bash MODEL=poolformer_s12 # poolformer_{s12, s24, s36, m36, m48} python3 validate.py /path/to/imagenet --model $MODEL -b 128 \ --pretrained # or --checkpoint /path/to/checkpoint ``` ### 4. Train We show how to train PoolFormers on 8 GPUs. The relation between learning rate and batch size is lr=bs/1024*1e-3. For convenience, assuming the batch size is 1024, then the learning rate is set as 1e-3 (for batch size of 1024, setting the learning rate as 2e-3 sometimes sees better performance). ```bash MODEL=poolformer_s12 # poolformer_{s12, s24, s36, m36, m48} DROP_PATH=0.1 # drop path rates [0.1, 0.1, 0.2, 0.3, 0.4] responding to model [s12, s24, s36, m36, m48] CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 ./distributed_train.sh 8 /path/to/imagenet \ --model $MODEL -b 128 --lr 1e-3 --drop-path $DROP_PATH --apex-amp ``` ### 5. Visualization The code to visualize Grad-CAM activation maps of PoolFomer, DeiT, ResMLP, ResNet and Swin are [here](misc/cam_image.py). ## Acknowledgment Our implementation is mainly based on the following codebases. We gratefully thank the authors for their wonderful works. [pytorch-image-models](https://github.com/rwightman/pytorch-image-models), [mmdetection](https://github.com/open-mmlab/mmdetection), [mmsegmentation](https://github.com/open-mmlab/mmsegmentation). Besides, Weihao Yu would like to thank TPU Research Cloud (TRC) program for the support of partial computational resources.
No open issues yet, or sync has not completed.