量化总结

卷积神经网络量化

一、为什么要量化?

卷积神经由于参数量和计算量太大,无法在移动设备上部署。在深度神经网络模型应用中,量化是削减模型大小的一种常用方法。为什么要削减模型,是因为硬件平台的自身性能不理想,如计算力低,内存、电量消耗等限制,导致模型推断速度慢、功耗高。而定点运算指令比浮点运算指令在单位时间内能处理更多数据,同时,量化后的模型可以减少存储空间。当然,也可以将量化后的模型部署在高效的定制化计算平台上以达到更快的推断速度。

二、量化的好处?

1.正常卷积神网络是浮点32位的,我们可以量化成int8 或者int4(YOLO V2 浮点是12M,量化后为3.8M);
2.像CNN这种神经网络模型在精度上有很强的鲁棒性,在前向推理的时候用低精度的数值去代替全精度的的浮点数值,最后的准确率还可以接受甚至还会提升模型的泛化能力;
3.8bit量化不仅能够减少计算量,还可以节省面积,增大硬件的并行度。

三、怎样量化?

量化本质上是对数值范围的重新调整,可以大致理解为是一种线性映射,把每一个浮点值一一映射到一个定点值,也就是每一个值都有一个SCALE和零点,靠这两个值用定点模仿前向推理,反向训练得时候还是用的浮点数。
用r表示浮点实数,表示q量化后的定点整数,S表示scale,表示实数和整数之间的比例关系,Z表示零点,表示实数中的 0 经过量化后对应的整数。浮点和整型之间的换算公式为:
在这里插入图片描述

由于卷积网络中的卷积层和全连接层本质上都是矩阵乘法,将浮点运算上的矩阵转换为定点运算:
在这里插入图片描述

假设 在这里插入图片描述
由于M通常都是 (0, 1) 之间的实数,因此可以表示成
在这里插入图片描述
其中M0是一个定点实数,在区间[0.5,1]之间是非负整数。

四、需要的数据格式:

量化后的模型对于每一层来说有S1(输入),S2(权重),S3(输出)。

1.卷积过程需要的数据格式:

权重A(8bit)和图片B(8bit),bias=C/S1/S2向下去取整(32bit),SCALE因子(32bit),N(右移次数)。
SCALE和N:为了保持精度,让S3不断得乘2让它处于0.5-1.0之间,为了保持精度,然后乘232 得到SCALE(32bit),N就是乘以2的次数。

2.卷积过程数据格式变化:

  1. 有图片uint8(A)和权重int8(B),把它们转换成补码uint16,但是为了和bias(32bit)相加,我们用32位来保留它。

    C(32bit)=A*B

  2. 32位的结果(C)和bias(D)相加还是32位。
    C+D(32bit)=F(32bit)

  3. 然后加完bias的结果(F)和SCALE因子相乘得到64bit,直接省掉低32位,得到H(32bit)。
    F(32bit)*SCALE(32bit)=G(64bit)

  4. 然后H右移N次直接截取低8位。
    H>>N=U(8bit)

  5. 最后U就是这一层定点结果,如果需要浮点根据转回去即可。

参考:
https://zhuanlan.zhihu.com/p/149659607

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值