前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >EasyQuant 后量化算法论文解读

EasyQuant 后量化算法论文解读

作者头像
BBuf
发布2020-07-09 14:26:01
1.1K0
发布2020-07-09 14:26:01
举报
文章被收录于专栏:GiantPandaCVGiantPandaCV

本文的主要内容是解读 「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

端上部署 int7 加速

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%的效率提升的效果,还是挺可观的。

更低bit实验结果

https://arxiv.org/pdf/2006.16669.pdf

论文中还做了更低 bit 的对比实验,从 int8 到 int5,可以看到在不同任务上,EasyQuant 方法大多是优于 TensorRT 的方法的,而且让人惊讶的是图(c),int5 EasyQuant 的精度基本和 int8 相当,没有降多少,这个确实很厉害。

总结

这篇论文提出了一个在低于8bit下精度还能保持比较好的后量化算法,思想相对TensorRT的方法来说更加容易理解,而且实现上也更加的容易,实际端侧推理加速效果也不错。

参考资料:

  • [1] https://zhuanlan.zhihu.com/p/151383244
  • [2] https://zhuanlan.zhihu.com/p/151292945
  • [3] https://www.yuque.com/yahei/hey-yahei/quantization.mxnet2
  • [4] http://on-demand.gputechconf.com/gtc/2017/presentation/s7310-8-bit-inference-with-tensorrt.pdf
  • [5] https://arleyzhang.github.io/articles/923e2c40/
  • [6] https://zhuanlan.zhihu.com/p/65468307
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GiantPandaCV 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言:
  • 之前一些的量化方法算法的不足:
  • 论文算法解读
    • 量化的定义
      • 量化推理的流程图
      • 优化单层量化因子
      • 优化整个网络
  • 端上部署 int7 加速
  • 实验结果分析:
    • 实验设置
      • 精度对比
        • 加速对比
          • 更低bit实验结果
          • 总结
          • 参考资料:
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档