安装

使用pip安装:pip install mnncompress

支持的算法

算法类别 算法名称 TensorFlow1.X Pytorch
线性过参数化 linear over parameterization 改进
低秩分解 Tucker分解,SVD分解
剪枝 TaylorFOChannelPruner 结构化通道剪枝
SIMDOCPruner 1*4半结构化剪枝
SNIPLevelPruner 1*1随机非结构化剪枝
训练量化(也可改做离线量化) LSQ(学习量化参数)
OAQ(overflow aware quantization)
WAQ(winograd aware quantization)
权值量化(也可不训练,查看直接权值量化精度) 对称量化,非对称量化

mnncompress技术路线

mnncompress的技术路线如下图所示:
image.png
通过mnncompress中的模型压缩插件对原始模型进行压缩,然后得到一个原始的float模型,以及该压缩算法所需要的额外的压缩参数(例如对于量化算法来说,需要各个卷积层的scale和zeropoint等信息)。最后将这个float模型和模型压缩参数文件输入到MNN转换器中,得到最终的MNN压缩模型。

关于模型压缩参数文件

在mnncompress的文档中通常命名为“compress_params.bin”,是一个protobuf序列化之后的二进制文件。每执行一个压缩算法都需要保存一个对应的模型压缩参数文件,如果有算法上的叠加(例如剪枝+量化的叠加),那么需要将算法对应的API接口中的append参数设置为True(例如剪枝+量化的叠加,则需要在量化算法保存压缩参数文件时,将对应的接口append参数设置为True,将量化算法所需要的参数append到剪枝算法的模型压缩文件上去),这样MNN模型转换器才会知道你的模型经过了哪些优化,才能进行正确的转换。