# MABN **Repository Path**: yilun_xu/MABN ## Basic Information - **Project Name**: MABN - **Description**: 一种较新的归一化方法。使用方法见https://blog.csdn.net/c2250645962/article/details/104043495/ - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-02-13 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Moving Average Batch Normalization This reposity is the Pytorch implementation of **Moving Average Batch Normalization** on Imagenet classfication, COCO object detection and instance segmentation tasks. The paper has been published as an ICLR2020 conference paper (https://openreview.net/forum?id=SkgGjRVKDS¬eId=BJeCWt3KiH). ## Results ### Overall comparation of MABN and its counterparts Top 1 Error versus Batch Size: Inference Speend | Norm | Iterations/second | |:-------:|:-------------:| | BN/MABN | 237.88 | | Instance Normalization | 105.60 | | Group Normalization | 99.37 | | Layer Normalization | 125.44 | ### Imagenet | Model | Normalization Batch size | Norm | Top 1 Accuracy | |:--------:|:-----------:|:----:|:------:| | ResNet50 | 32 | BN | 23.41 | | ResNet50 | 2 | BN | 35.22 | | ResNet50 | 2 | BRN | 30.29 | | ResNet50 | 2 | MABN | 23.67 | ### COCO | Backbone | Method | Training Strategy | Norm | Batch Size | APb | APb0.50 | APb0.75 | APm | APm0.50 | APm0.75 | |:-------------:|:------------:|:---------:|:----:|:------:|:----:|:----:|:----:|:----:|:----:|:----:| | R50-FPN | Mask R-CNN | 2x from scratch | BN | 2 | 32.38 | 50.44 | 35.47 | 29.07 | 47.68 | 30.75 | | R50-FPN | Mask R-CNN | 2x from scratch | BRN | 2 | 34.07 | 52.66 | 37.12 | 30.98 | 50.03 | 32.93 | | R50-FPN | Mask R-CNN | 2x from scratch | SyncBN | 2x8 | 36.80 | 56.06 | 40.23 | 33.10 | 53.15 | 35.24 | | R50-FPN | Mask R-CNN | 2x from scratch | MABN | 2 | 36.50 | 55.79 | 40.17 | 32.69 | 52.78 | 34.71 | | R50-FPN | Mask R-CNN | 2x fine-tune | SyncBN | 2x8 | 38.25 | 57.81 | 42.01 | 34.22 | 54.97 | 36.34 | | R50-FPN | Mask R-CNN | 2x fine-tune | MABN | 2 | 38.42 | 58.19 | 41.99 | 34.12 | 55.10 | 36.12 | ## Usage The formal implementation of MABN is in **MABN.py**. You can use MABN by directly replacing **torch.nn.BatchNorm2d** and **torch.nn.Conv2d** with **MABN2d** and **CenConv2d** respectively in your project. Please don't forget to set extra args in MABN2d. ## Demo One node with 8 GPUs. ### Imagenet **Notice the Imagenet classification simulate the small batch training settings by using small normalization batch size and regular SGD batch size.** ```bash cd /your_path_to_repo/cls # 8 GPUs Train and Test python3 -m torch.distributed.launch --nproc_per_node=8 train.py --gpu_num=8 \ --save /your_path_to_logs \ --train_dir /your_imagenet_training_dataset_dir \ --val_dir /your_imagenet_eval_dataset_dir \ --gpu_num=8 # Only Test the trained model python3 -m torch.distributed.launch --nproc_per_node=1 train.py --gpu_num=1 \ --save /your_path_to_logs \ --val_dir /your_imagenet_eval_dataset_dir \ --checkpoint_dir /your_path_to_checkpoint \ --test_only ``` ### COCO #### Install Please refer to [INSTALL.md](det/INSTALL.md) for installation and dataset preparation. To use SyncBN, please do: ```bash cd /your_path_to_repo/det/maskrcnn_benchmar/distributed_syncbn bash compile.sh ``` #### Imagenet Pretrained model You can download the pretrained model of ResNet-50 in: Dropbox: https://www.dropbox.com/sh/fbsi6935vmatbi9/AAA2jv0EBcSgySTgZnNZ3lmPa?dl=0 ; Baiduyun: https://pan.baidu.com/s/1Md_UzwWEiZZKu84R0yZ6aw password: zww2 . Notice **R-50-2.pkl** is the for SyncBN, while **R50-wc.pth** is for MABN. #### Run Experiment ```bash cd /your_path_to_repo/det # Train MABN from scratch python3 -m torch.distributed.launch --nproc_per_node=8 tools/train_net.py \ --skip-test \ --config-file configs/e2e_mask_rcnn_R_50_FPN_mabn_2x_from_scratch.yaml \ DATALOADER.NUM_WORKERS 2 \ OUTPUT_DIR /your_path_to_logs # Train MABN fine tuning (Download the pertrained model and set the path in configs at first) python3 -m torch.distributed.launch --nproc_per_node=8 tools/train_net.py \ --skip-test \ --config-file configs/e2e_mask_rcnn_R_50_FPN_mabn_2x_fine_tune.yaml \ DATALOADER.NUM_WORKERS 2 \ OUTPUT_DIR /your_path_to_logs # Test model python3 -m torch.distributed.launch --nproc_per_node=8 tools/test_net.py \ --config-file configs/e2e_mask_rcnn_R_50_FPN_mabn_2x_from_scratch.yaml \ MODEL.WEIGHT /your_path_to_logs/model_0180000.pth \ TEST.IMS_PER_BATCH 8 ``` ## Thanks This implementation of COCO is based on maskrcnn-benchmark. Ref to this [link](https://github.com/facebookresearch/maskrcnn-benchmark) for more details about maskrcnn-benchmark. ## Citation If you use Moving Average Batch Normalization in your research, please cite: ```bibtex @inproceedings{ yan2020towards, title={Towards Stablizing Batch Statistics in Backward Propagation of Batch Normalization}, author={Junjie Yan, Ruosi Wan, Xiangyu Zhang, Wei Zhang, Yichen Wei, Jian Sun}, booktitle={International Conference on Learning Representations}, year={2020}, url={https://openreview.net/forum?id=SkgGjRVKDS} } ```