Official Pytorch implementation of our ICCV'23 paper Efficient Joint Optimization of Layer-Adaptive Weight Pruning in Deep Neural Networks (Kaixin Xu*, Zhe Wang*, Xue Geng, Jie Lin, Min Wu, Xiaoli Li, Weisi Lin).
- *Equal contribution
- Clone this repository
git clone https://github.com/Akimoto-Cris/RD_PRUNE.git
cd RD_PRUNE
- Install NVIDIA-DALI for imagenet experiments:
- Please refer to official installation guide
Set the desired dataset location in the tools/dataloaders.py (L9-10):
data_route = {'cifar': '/path/to/cifar',
'imagenet': '/path/to/imagenet'}
- ResNet-32 on CIFAR:
python iterate.py --dataset cifar --model resnet32_cifar --pruner rd --worst_case_curve --calib_size 1024
- ResNet-50 on ImageNet:
python iterate.py --dataset imagenet --model resnet50 --pruner rd --worst_case_curve --calib_size 256
- ResNet-50 on ImageNet:
python iterate.py --dataset imagenet --model resnet50 --pruner rd --worst_case_curve --calib_size 256 --synth_data
This can be performed simply by modifying the tools/modelloaders.py and amount-per-iteration configuration. E.g. For One-shot pruning of ResNet-50 on Imagenet at 50% sparsity, change the L101 of tools/modelloaders.py as:
amount = 0.5
then run the following script:
python iterate.py --dataset imagenet --model resnet50 --pruner rd --worst_case_curve --calib_size 256 --iter_end 1
We've also left the baseline methods in the tools/pruners.py, which means you can run baseline methods by setting the flag --pruner
of the above scripts to the corresponding methods (E.g. lamp/glob/unif/unifplus/erk
).
- Iterative Pruning
Model | Dataset | Sparsity (%) | FLOPs Remained (%) | Top-1 | Dense | Top-1 diff |
---|---|---|---|---|---|---|
ResNet-32 | CIFAR-10 | 95.5 | 3.59 | 90.83 ± 0.24 | 93.99 | -3.16 |
VGG-16 | CIFAR-10 | 98.85 | 3.43 | 92.14 ± 0.18 | 91.71 | +0.43 |
DenseNet-121 | CIFAR-10 | 98.85 | 2.02 | 87.7 ± 0.24 | 91.14 | -3.44 |
EfficientNet-B0 | CIFAR-10 | 98.85 | 4.58 | 85.63 ± 0.31 | 87.95 | -2.32 |
VGG-16-BN | ImageNet | 89.3 | 17.71 | 68.88 | 73.37 | -4.49 |
ResNet-50 | ImageNet | 41 | 53.5 | 75.90 | 76.14 | -0.24 |
- One-shot Pruning
Model | Dataset | Sparsity (%) | FLOPs Remained (%) | Top-1 | Dense | Top-1 diff |
---|---|---|---|---|---|---|
ResNet-50 | ImageNet | 58 | 34.5 | 75.59 | 76.14 | -0.55 |
- Zero-data Pruning
Model | Dataset | Sparsity (%) | FLOPs Remained (%) | Top-1 | Dense | Top-1 diff |
---|---|---|---|---|---|---|
ResNet-50 | ImageNet | 50 | 42.48 | 75.13 | 76.14 | -1.01 |
This implementation is built on top of ICLR'21 LAMP. We thank authors for the awesome repo.
We appreciate it if you would please cite the following paper if you found the implementation useful for your work:
@InProceedings{Xu_2023_ICCV,
author = {Xu, Kaixin and Wang, Zhe and Geng, Xue and Wu, Min and Li, Xiaoli and Lin, Weisi},
title = {Efficient Joint Optimization of Layer-Adaptive Weight Pruning in Deep Neural Networks},
booktitle = {Proceedings of the IEEE/CVF International Conference on Computer Vision (ICCV)},
month = {October},
year = {2023},
pages = {17447-17457}
}