# Pytorch-Auto-Slim-Tools **Repository Path**: aiproach/Pytorch-Auto-Slim-Tools ## Basic Information - **Project Name**: Pytorch-Auto-Slim-Tools - **Description**: No description available - **Primary Language**: Unknown - **License**: GPL-3.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2021-06-03 - **Last Updated**: 2022-04-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # pytorch-Autoslim2.0 A pytorch toolkit for structured neural network pruning automatically 完全自动化的模型剪枝工具 ## 1 Introduction 项目介绍 ### ① Architecture 系统架构 **用户层**:人人都会用的剪枝工具,仅需二行代码即可完成全自动化剪枝 **中间层**:提供统一接口,让开发者可以自己封装SOTA剪枝算法,不断更新工具 **系统底层**:自动分析网络结构并构建剪枝关系 ## 2 Support 支持度 ### ① Supported Models 支持的模型 |模型类型|
支持
|
已测试
| | --- | --- | --- | | 分类模型 |√ |AlexNet,VGG,ResNet系列等 | | 检测模型 |√ |CenterNet,YOLO系列等 | | 分割模型 |√ | 正在测试 | ### ② Pruning Algorithm 剪枝算法 |函数名|
剪枝算法
| | --- | --- | | l1_norm_pruning |[Pruning Filters for Efficient ConvNets](https://arxiv.org/abs/1608.08710)| | l2_norm_pruning |[Pruning Filters for Efficient ConvNets](https://arxiv.org/abs/1608.08710)| | fpgm_pruning |[Filter Pruning via Geometric Median for Deep Convolutional Neural Networks Acceleration](https://arxiv.org/abs/1811.00250)| 在原始剪枝算法上,做了部分调整。此外,后续会支持更多的剪枝算法。 ## 3 Installation 安装 ```bash pip install -e ./ ``` ## 4 Instructions 使用介绍 **model可以来源于torchvision,也可以是自己在Pytorch中构建的model** ### Automatic Pruning 自动化剪枝 ```python import torch_pruning as pruning from torchvision.models import resnet18 import torch # 模型建立 model = resnet18() flops_raw, params_raw = pruning.get_model_complexity_info( model, (3, 224, 224), as_strings=True, print_per_layer_stat=False) print('-[INFO] before pruning flops: ' + flops_raw) print('-[INFO] before pruning params: ' + params_raw) # 选择裁剪方式 mod = 'fpgm' # 剪枝引擎建立 slim = pruning.Autoslim(model, inputs=torch.randn( 1, 3, 224, 224), compression_ratio=0.5) if mod == 'fpgm': config = { 'layer_compression_ratio': None, 'norm_rate': 1.0, 'prune_shortcut': 1, 'dist_type': 'l1', 'pruning_func': 'fpgm' } elif mod == 'l1': config = { 'layer_compression_ratio': None, 'norm_rate': 1.0, 'prune_shortcut': 1, 'global_pruning': False, 'pruning_func': 'l1' } slim.base_prunging(config) flops_new, params_new = pruning.get_model_complexity_info( model, (3, 224, 224), as_strings=True, print_per_layer_stat=False) print('\n-[INFO] after pruning flops: ' + flops_new) print('-[INFO] after pruning params: ' + params_new) ``` ## 5 Examples 使用案例 ### ①Resnet-cifar10 #### Train 训练 ```bash python prune_resnet18_cifar10.py --mode train --round 0 ``` #### Pruning 剪枝 ```bash python prune_resnet18_cifar10.py --mode prune --round 1 --total_epochs 60 ``` #### Train 微调 ```bash python cifar100_prune.py --mode train --round 2 --total_epochs 10 --batch_size 512 ``` ## 6 致谢 感谢以下仓库: [https://github.com/TD-wzw/Autoslim](https://github.com/TD-wzw/Autoslim) [https://github.com/microsoft/nni](https://github.com/microsoft/nni)