常见模型量化方法介绍

随着深度学习技术的快速发展,越来越多的领域开始与之融合在一起。许多传统领域借助深度学习的赋能解决了很多之前解决不了的问题或者更好的解决了之前的一些问题。于此同时,成本因素也是深度学习技术在各行各业深度融合中不可忽视的因素。所以将深度学习模型部署在边缘设备上对该技术的广泛应用有重要意义。其中模型量化就是一个在减小模型计算量和缩减模型大小的同时保障精度基本不变的技术,这对模型的部署而言有重要意义。在本文中将介绍工业中一些常见的模型量化方法。
经典量化论文《Quantizing deep convolutional networks for efficient inference: A whitepaper》链接: link

文章目录

  • 一、对称量化
  • 二、非对称量
  • 三、通道量化、逐组量化、逐层量化、组合量化
  • 四、dynamic_point_fixed定点量化
  • 五、混合量化
  • 六、总结


一、对称量化

对称量化的一个关键点是零点,即原始的输入数据中的零点通过映射关系转换后仍然对应int8表示的范围[-128,127]中的零点。但是该量化方式的缺点是为了保持量化效果的对齐,存在无法完全有效利用范围。
原输入:max_float = 0.7,min_float = 0.4
对应输出:s = 127/0.7 = 181.42…
max_int8 = 127, min_int8=72.568
本质上就是将浮点数的范围由[min_float,max_float]转换成了[-max_int8,max_int8],
其中:
s = 127/(max(|max_float|,|min_float|))
max_int8 = max_floatS
min_int8 = min_float
S

二、非对称量

非对称量的操作简而言之就是将输入数据映射在[0,255]的范围内,我们只需要确定Z参数(zero_point)和S参数就能求解到对应的映射转换关系。该量化方法使用较多,量化效果较好。
对应转换公式:
S = 255/(max_float - min_float)
Z = 255 - max_float/S

三、通道量化、逐组量化、逐层量化、组合量化

当group为1时 逐层量化等于逐组量化,但使用深度可分离卷积时逐组量化等于通道量化。
通道量化、逐组量化、逐层量化即以单一通道、组、层为单位计算对应float变量范围进行量化,组合量化即将对各神经网络多个结构融合成一块儿进行量化,例如将conv,bn,relu组成一个模块,对对应的范围进行量化。

四、dynamic_point_fixed定点量化

该量化方式即用一部分位数表示整数,一部分位数表示小数位。
例如 以int8为例子 对应 max_float = 2.8,min_float = 0.1,由于整个整数范围0~2 需要两位才能表示对应范围,所以该定点量化方式会用8-1-2=5位去量化小数位

五、混合量化

混合量化,即顾名思义即模型在转换过程中包含了不同的量化方式。该技术主要针对特点结构对量化精度要求较高时,通过对单一结构使用高精度量化的方式,在保证整体计算时间基本不变的基础上,提高模型的推理性能。

六、总结

本文介绍了工业中常见的一些线性量化的方法,具体量化方式的选择还需要看实际的应用需求和设备条件。

你可能感兴趣的:(模型部署,深度学习,边缘计算,计算机视觉)