README.md 4.0 KB
Newer Older
G
Guanghua Yu 已提交
1
# 自动化压缩工具ACT(Auto Compression Toolkit)
C
ceci3 已提交
2

3
## 简介
4
PaddleSlim推出全新自动化压缩工具(ACT),旨在通过Source-Free的方式,自动对预测模型进行压缩,压缩后模型可直接部署应用。ACT自动化压缩工具主要特性如下:
5 6 7
- **『更便捷』**:开发者无需了解或修改模型源码,直接使用导出的预测模型进行压缩;
- **『更智能』**:开发者简单配置即可启动压缩,ACT工具会自动优化得到最好预测模型;
- **『更丰富』**:ACT中提供了量化训练、蒸馏、结构化剪枝、非结构化剪枝、多种离线量化方法及超参搜索等等,可任意搭配使用。
C
ceci3 已提交
8 9


10
## 环境准备
C
ceci3 已提交
11

C
ceci3 已提交
12 13
- 安装PaddlePaddle >= 2.3版本 (从[Paddle官网](https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/install/pip/linux-pip.html)下载安装)
- 安装PaddleSlim develop版本
C
ceci3 已提交
14

15
## 快速上手
C
ceci3 已提交
16

17 18 19 20 21 22 23 24 25 26 27 28 29
- 1.准备模型及数据集

```shell
# 下载MobileNet预测模型
wget https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/inference/MobileNetV1_infer.tar
tar -xf MobileNetV1_infer.tar
# 下载ImageNet小型数据集
wget https://sys-p0.bj.bcebos.com/slim_ci/ILSVRC2012_data_demo.tar.gz
tar xf ILSVRC2012_data_demo.tar.gz
```

- 2.运行

30 31
```python
# 导入依赖包
32 33 34 35
import paddle
from PIL import Image
from paddle.vision.datasets import DatasetFolder
from paddle.vision.transforms import transforms
36
from paddleslim.auto_compression import AutoCompression
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
paddle.enable_static()
# 定义DataSet
class ImageNetDataset(DatasetFolder):
    def __init__(self, path, image_size=224):
        super(ImageNetDataset, self).__init__(path)
        normalize = transforms.Normalize(
            mean=[123.675, 116.28, 103.53], std=[58.395, 57.120, 57.375])
        self.transform = transforms.Compose([
            transforms.Resize(256),
            transforms.CenterCrop(image_size), transforms.Transpose(),
            normalize
        ])

    def __getitem__(self, idx):
        img_path, _ = self.samples[idx]
        return self.transform(Image.open(img_path).convert('RGB'))

    def __len__(self):
        return len(self.samples)

57
# 定义DataLoader
58 59 60
train_dataset = ImageNetDataset("./ILSVRC2012_data_demo/ILSVRC2012/train/")
image = paddle.static.data(
    name='inputs', shape=[None] + [3, 224, 224], dtype='float32')
61
train_loader = paddle.io.DataLoader(train_dataset, feed_list=[image], batch_size=32, return_list=False)
62 63
# 开始自动压缩
ac = AutoCompression(
C
ceci3 已提交
64
    model_dir="./MobileNetV1_infer",
65 66
    model_filename="inference.pdmodel",
    params_filename="inference.pdiparams",
67
    save_dir="output",
68 69
    strategy_config=None,
    train_config=None,
70
    train_dataloader=train_loader,
71
    eval_dataloader=train_loader)  # eval_function to verify accuracy
72
ac.compress()
C
ceci3 已提交
73 74
```

75 76
**提示:**
- DataLoader传入的数据集是待压缩模型所用的数据集,DataLoader继承自`paddle.io.DataLoader`
77 78
- 如无需验证自动化压缩过程中模型的精度,`eval_callback`可不传入function,程序会自动根据损失来选择最优模型。
- 自动化压缩Config中定义量化、蒸馏、剪枝等压缩算法会合并执行,压缩策略有:量化+蒸馏,剪枝+蒸馏等等。
C
ceci3 已提交
79
- 如果要压缩的模型参数是存储在各自分离的文件中,需要先通过[convert.py](./convert.py) 脚本将其保存成一个单独的二进制文件。
C
ceci3 已提交
80

81
## 应用示例
C
ceci3 已提交
82

83
#### [图像分类](./image_classification)
C
ceci3 已提交
84

85
#### [目标检测](./detection)
C
ceci3 已提交
86

87
#### [语义分割](./semantic_segmentation)
C
ceci3 已提交
88

89
#### [NLP](./nlp)
C
ceci3 已提交
90

91
#### 即将发布
92 93
- [ ] 更多自动化压缩应用示例
- [ ] X2Paddle模型自动化压缩示例
C
ceci3 已提交
94

95 96 97 98
## 其他

- ACT可以自动处理常见的预测模型,如果有更特殊的改造需求,可以参考[ACT超参配置教程](./hyperparameter_tutorial.md)来进行单独配置压缩策略。

99
- 如果你发现任何关于ACT自动化压缩工具的问题或者是建议, 欢迎通过[GitHub Issues](https://github.com/PaddlePaddle/PaddleSlim/issues)给我们提issues。同时欢迎贡献更多优秀模型,共建开源生态。