README.md 2.0 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
# 动态图离线量化

本示例介绍如何对动态图模型进行离线量化,示例以常用的MobileNetV1和MobileNetV3模型为例,介绍如何对其进行离线量化。


## 分类模型的离线量化流程

#### 准备数据

在当前目录下创建``data``文件夹,将``ImageNet``的验证集解压在``data``文件夹下,解压后``data/ILSVRC2012``文件夹下应包含以下文件:
- ``'val'``文件夹,验证图片
- ``'val_list.txt'``文件

#### 准备需要离线量化的模型

本示例直接使用[paddle vision](https://github.com/PaddlePaddle/Paddle/tree/develop/python/paddle/vision/models)内置的模型结构和预训练权重。通过以下命令查看支持的所有模型:

```
python ptq.py --help
```

## 启动命令
以MobileNetV1为例,通过以下脚本启动PTQ任务:

```bash
python ptq.py \
      --data=dataset/ILSVRC2012/ \
      --model=mobilenet_v1 \
      --activation_observer='mse' \
      --weight_observer='mse_channel_wise' \
      --quant_batch_num=10 \
      --quant_batch_size=10 \
      --output_dir="output_ptq"
```

其中,通过 `activation_observer` 配置用于激活的量化算法,通过 `weight_observer` 配置用于权重的量化算法。
更多支持的量化算法,请执行以下命令查看:

```
python ptq.py --help
```

## 评估精度

执行以下命令,使用 PaddleInference 推理库测试推理精度:

```bash
python eval.py --model_path=output_ptq/mobilenet_v1/int8_infer/ --data_dir=dataset/ILSVRC2012/ --use_gpu=True
```

- 评估时支持CPU,并且不依赖TensorRT,MKLDNN。


## 量化结果

| 模型        | FP32模型准确率(Top1/Top5) | 量化方法(activation/weight)     | 量化模型准确率(Top1/Top5) |
| ----------- | --------------------------- | ------------ | --------------------------- |
| MobileNetV1 | 70.10%/90.10%                 | mse / mes_channel_wise | 69.10%/89.80%                |
| MobileNetV2 | 71.10%/90.90%                 | mse / mes_channel_wise | 70.70%/90.10%               |