海思开发:relu、relu6 在量化前后的精度变化及原因思考

本文探讨了ReLU6与ReLU在模型量化前后的精度变化,实验表明ReLU6能有效降低量化精度损失。通过分析,作者认为ReLU6通过限制梯度,缓解了权值相差过大的问题,从而减少了量化误差。
摘要由CSDN通过智能技术生成

一、前言

以前部署 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}}{ {\partial y}} * \frac{ {\partial y}}{

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值