安装
使用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的技术路线如下图所示:
通过mnncompress中的模型压缩插件对原始模型进行压缩,然后得到一个原始的float模型,以及该压缩算法所需要的额外的压缩参数(例如对于量化算法来说,需要各个卷积层的scale和zeropoint等信息)。最后将这个float模型和模型压缩参数文件输入到MNN转换器中,得到最终的MNN压缩模型。
关于模型压缩参数文件
在mnncompress的文档中通常命名为“compress_params.bin
”,是一个protobuf序列化之后的二进制文件。每执行一个压缩算法都需要保存一个对应的模型压缩参数文件,如果有算法上的叠加(例如剪枝+量化的叠加),那么需要将算法对应的API接口中的append
参数设置为True
(例如剪枝+量化的叠加,则需要在量化算法保存压缩参数文件时,将对应的接口append
参数设置为True
,将量化算法所需要的参数append到剪枝算法的模型压缩文件上去),这样MNN模型转换器才会知道你的模型经过了哪些优化,才能进行正确的转换。