原理
将float卷积转换为int8卷积进行计算(仅量化卷积,建议将FC转为1*1卷积实现),同时会通过MNN几何计算机制将量化信息在网络中进行传播,以支持尽可能多的算子的量化计算。模型大小减少为原始模型的1/4,并减少内存,提高推理速度(某些模型可能量化之后变慢,因为float的计算可以使用winograd、strassen等优化算法,而离线量化的int8计算并没有这些优化,如果要使用int8量化的特殊优化,如OAQ、WAQ等,需要使用mnncompress)。
单输入、图片输入模型的量化
这类模型可以使用 quantized.out
(或mnnquant
)进行量化,使用文档在:https://www.yuque.com/mnn/cn/tool_quantize
通用模型的量化
通用模型量化工具可以支持任意输入和任意输入类型的模型的量化,基于MNN python包,使用文档在:https://github.com/alibaba/MNN/tree/master/tools/MNNPythonOfflineQuant
注意:calibration_dataset.py
中__getitem__
返回为一个输入sample,其形状不应该包含batch维度,在量化时我们会根据工具命令行中传入的batch参数,stack出一个batch的数据,但我们默认batch维度在第一维,所以,如果你的某个输入的batch维不在第一维,你需要在你对应的输入之前加一个transpose。