本文的主要内容是解读 「EasyQuant: Post-training Quantization via Scale Optimization」 这篇由格灵深瞳出品的文章。
「论文地址:」https://arxiv.org/pdf/2006.16669.pdf
「论文代码:」https://github.com/deepglint/EasyQuant
优化目标
https://arxiv.org/pdf/2006.16669.pdf
首先看下论文里的这张图片,展示了第l层卷积层量化推理的流程图。
https://arxiv.org/pdf/2006.16669.pdf
首先看最左边的方框,权值和激活从float32量化到int8,权值因为可以分通道量化,所以可以看到权值的量化因子是分了3种不同颜色的立方体分别对应了权值3个不同颜色的通道。
https://arxiv.org/pdf/2006.16669.pdf
然后中间的方框,表示推理阶段量化版本卷积的实现,可以看到有根据kernel设置分别优化,还有具体实现上用 im2col+gemm 或者 Winograd 优化实现等等
https://arxiv.org/pdf/2006.16669.pdf
最后看最右边的方框,表示得到卷积层输出量化激活结果之后,如果下一层不是量化计算层,则直接除以权值和输入激活的量化因子,得到反量化的输出(Dequantize)。如果下一层也是量化层,则除了除以权值和输入激活的量化因子还需要再乘以下一层的输入量化因子得到量化后的下一层的输入(Requantize)。
https://arxiv.org/pdf/2006.16669.pdf
https://arxiv.org/pdf/2006.16669.pdf
https://github.com/deepglint/EasyQuant/issues/3
作者回复说推荐按照论文里面的设置,大家如果自己做实验的时候可以结合论文和官方代码。
然后看下对于整个网络的优化算法流程图:
https://arxiv.org/pdf/2006.16669.pdf
https://arxiv.org/pdf/2006.16669.pdf
https://arxiv.org/pdf/2006.16669.pdf
https://arxiv.org/pdf/1712.05877.pdf
论文对比了 TensorRT 的方法,对于TensorRT 量化参数的计算,采用了1000个样本,而对于本论文的方法则是采用了50个样本来搜索量化参数,感觉还是挺惊人的,只用50个样本就能超过TensorRT的方法。
https://arxiv.org/pdf/2006.16669.pdf
在imagenet2012验证集上的结果,可以看到不管是量化到int8还是int7,EasyQuant的精度都超过TensorRT,而且很接近浮点的结果。
https://arxiv.org/pdf/2006.16669.pdf
然后从物体检测和人脸任务上来看,EasyQuant基本也是超过TensorRT的。
https://arxiv.org/pdf/2006.16669.pdf
实验还对比了 EasyQuant和 训练量化QAT(Quantize Aware Training),可以按到在ResNet50上结果还是不错的,稍微超过QAT。
https://arxiv.org/pdf/2006.16669.pdf
然后来看下实际端上推理时候 int8 和 int7 的推理速度对比,可以看到不管是单线程还是多线程,int7 推理的延迟都要少于 int8,有20%~30%的效率提升的效果,还是挺可观的。
https://arxiv.org/pdf/2006.16669.pdf
论文中还做了更低 bit 的对比实验,从 int8 到 int5,可以看到在不同任务上,EasyQuant 方法大多是优于 TensorRT 的方法的,而且让人惊讶的是图(c),int5 EasyQuant 的精度基本和 int8 相当,没有降多少,这个确实很厉害。
这篇论文提出了一个在低于8bit下精度还能保持比较好的后量化算法,思想相对TensorRT的方法来说更加容易理解,而且实现上也更加的容易,实际端侧推理加速效果也不错。
本文分享自 GiantPandaCV 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!