当前位置:   article > 正文

海思开发:relu、relu6 在量化前后的精度变化及原因思考_relu6函数与relu的区别

relu6函数与relu的区别

一、前言

以前部署 HopeNet 的时候,发现了relu6与relu的差异。具体就是 relu 模型量化后精度下降 14%,relu6 模型量化(指量化前直接替换成relu,再做量化)后精度下降 2.5%。这两个模型除了 backbone、激活函数不一样,其他都一样。所以 relu6 可以减少量化精度损失?因为上面两个模型backbone不一样,所以考虑再进行一个条件更严格的对比实验。

二、实验

特意选了 MobileNet v2,它的激活函数刚好是 relu6,测试数据集类别数是 2,数据集大小为正负类各 500个,精度就是分类的准确率,然后还给每个类别计算了类别精度。我们训练两款模型 MobileNet v2-relu 和 MobileNet v2-relu6 ,它们除了激活函数不同,其余都一样。pytorch 下面训练、测试,因为我的 caffe 不支持 relu6。rgb图片转为bgr格式的图片demo在这里
1. pytoch 推理结果如下:

模型 MobileNet v2-relu
总精度 97.9%
0 类别精度 97.2%
1 类别精度 98.6%
模型 MobileNet v2-relu6
总精度 97.6%
0 类别精度 97.6%
1 类别精度 97.6%

2. 海思 nnie 推理结果

模型 MobileNet v2-relu
总精度 97.7%
0 类别精度 97.0%
1 类别精度 98.4%
模型 MobileNet v2-relu6
总精度 97.8%
0 类别精度 97.6%
1 类别精度 98.0%

注:海思不支持 relu6(勘正一下,后来我在海思上部署relu6成功,相关博客),我是 pytorch 转 caffe 时,直接用 relu 替换的。
由上面数据可见,虽然 MobileNet v2-relu 精度损失不大,但是 relu6 对减少量化精度损失还是有着积极作用。

三、 后言

感觉差距不是很明显,说服力不是很强,考虑以后再做些实验,提高说服力。

四、原因思考

自从发现这个问题而来,就一直在思考背后的原因,虽然该结论还没有得到多个案例的支持,但还是想简单探讨一下,各位老哥看看就好,说的不好可以指出来,我进行修改,谢谢!
一开始思考很久,一直不得门路,后来看量化相关的技术博客时,提到关于权值量化(量化相关博客,这个博客更方便新手学习),想到会不会是:relu 导致权值范围相差过大,而使用 relu6 则缓解了这一现象
所以下面有两个问题需要讨论:
1. 为什么 relu6 能缓解权值相差过大的情况?
2. 为什么权值相差过大会使得量化后精度下降?

先说第一个问题,请出链式法则,
tensor流程图
在这里插入图片描述
上图是 简单的 tensor 流程图,下图是 relu6 的图。
∂ l o s s ∂ w = ∂ l o s s ∂ y ∗ ∂ y ∂ B ∗ ∂ B ∂ w = ∂ l o s s ∂ y ∗ ∂ y ∂ B ∗ A \frac{ {\partial loss}}{ {\partial w}} = \frac{ {\partial loss

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/137351
推荐阅读
相关标签
  

闽ICP备14008679号