赞
踩
目录
3.1 Google 8-bit Integer-Arithmetric-Only Inference
本文主要借鉴于Google关于量化的白皮书,Quantizing deep convolutional networks for efficient inference: A whitepaper
并感谢666DZY666大佬的开源项目:https://github.com/666DZY666/model-compression
能力有限,若有描述不当的地方,请大佬勿喷,仅为学习使用,若侵权,请告知,立删。
量化是模型压缩的一种方式。量化就是把高位宽(例如32float)表示的权值或者激活值用较低位宽来近似表示(int8),在数值上的体现就是将连续的值离散化。
量化主要用在边缘计算等硬件限制较大的场景下,即工业应用上(总不能在边缘上都带着GPU吧)。现有很多先进的神经网络(例如resnet,densenet)在分类、识别上都取得了较好的效果,但其普及程度远不及效果稍差但模型小、运算快的mobilenet,而mobilenet就是在权衡速度、识别率下产物。当然了,mobilenet不是量化模型,只是用来举个例子,用于说明量化的潜力。
以下为量化所带来的一些影响:
- 优点1:加快运算速度。当把32float转变为int8表示时,在不考虑系统有浮点加速模块时,定点运算要比浮点运算快,感兴趣的可查阅定点数和浮点数运算的区别
- 优点2:减少存储空间。若将32浮点数转变为8位表示时,存储空间减小到了1/4大小。
- 缺点1:在用低带宽数值近似表示时,会造成一些精度损失。值得高兴的是,神经网络的参数大多是冗余的(或者说是对噪声的容忍度),所以当在近似变换时对精度的影响不是特别大。
下面用图来说明量化是怎么带来损失的,A为实际的浮点值,量化后近似为B,但其表示的值为C点,缩放因子越大,A和C的距离就越远,误差就越大,所以在量化时引入的近似会带来一些精度上的损失。(后面会具体讲解如何设置最值,来找到合适的缩放因子)
本文都以量化到8-bit为例
1)首先,设置浮点数的最大值x_max,最小值x_min:
- 对于权重:权重在训练后大小都是固定的&
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。