模型量化

模型量化将模型的计算从浮点型转为整型,从而加速模型的预测计算速度,在移动端/边缘端设备上降低模型的体积。

注:量化后的模型,通过PaddleLite转换为PaddleLite部署的模型格式后,模型体积将会大幅压缩。如若量化后的模型仍是以服务端本地部署格式(文件包括__model__和__params__),那么模型的文件大小是无法呈现参数变化情况的。

使用方法

PaddleX中已经将量化功能作为模型导出的一个API,代码使用方式如下,本示例代码和模型数据均可通过GitHub项目上代码tutorials/slim/quant/image_classification获取得到

import paddlex as pdx
model = pdx.load_model('mobilenetv2_vegetables')
# 加载数据集用于量化
dataset = pdx.datasets.ImageNet(
                data_dir='vegetables_cls',
                file_list='vegetables_cls/train_list.txt',
                label_list='vegetables_cls/labels.txt',
                transforms=model.test_transforms)

# 开始量化
pdx.slim.export_quant_model(model, dataset,
			  batch_size=4,
			  batch_num=5,
	                  save_dir='./quant_mobilenet',
	                  cache_dir='./tmp')

在获取本示例代码后,执行如下命令即可完成量化和PaddleLite的模型导出

# 将mobilenetv2模型量化保存
python mobilenetv2_quant.py
# 将量化后的模型导出为PaddleLite部署格式
python paddlelite_export.py

量化效果

在本示例中,我们可以看到模型量化后的服务端部署模型格式server_mobilenetquant_mobilenet两个目录中,模型参数大小并无变化。 但在使用PaddleLite导出后,mobilenetv2.nbmobilenetv2_quant.nb大小分别为8.8M, 2.7M,压缩至原来的31%。