rknn(Rknn模型无效)

rknn(Rknn模型无效)目录 什么是模型量化 为什么要进行模型量化 压缩参数 提升速度 降低内存 nbsp nbsp nbsp nbsp 模型量化的分类 二值化 线性量化 对数量化 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 量化就是把高位宽 Float32 表示的权值或者激活值用较低位宽来近似表示 INT8 INT4 在数值上的体现就是将连续的值离散化




目录

什么是模型量化?

为什么要进行模型量化?

压缩参数

提升速度

降低内存   

模型量化的分类

二值化

线性量化

对数量化


               量化就是把高位宽(Float32)表示的权值或者激活值用较低位宽来近似表示(INT8, INT4,……),在数值上的体现就是将连续的值离散化。简单说:即原来表示一个权重需要使用float32表示,量化后只需要使用int8位。

                卷积神经网络具有很好的精度,甚至在一些任务上比如人脸识别、图像分类,已经超越了人类精度。但其缺点也比较明显,具有较大的参数量,计算量,以及内存占用。而模型量化可以缓解现有卷积神经网络参数量大、计算量大、内存占用多等问题,具有为神经网络压缩参数提升速度、降低内存占用等“潜在”优势。为什么“潜在”是加引号的呢?因为想同时达到这三个特性并不容易,在实际应用过程中存在诸多限制和前提条件。

rknn不量化转模型 量化模型失效_非对称

2.1压缩参数

                模型量化在最初的定义里是为了压缩模型参数,比如韩松在ICLR2016上获得best paper的论文,首次提出了参数量化方法。其使用k-mean聚类,让相近的数值聚类到同一个聚类中心,复用同一个数值,从而达到用更少的数值表示更多的数,这是量化操作的一种方案。反过来,从量化数变到原始数的过程,称之为反量化,反量化操作完之后,模型就可以按照原来的方式进行正常的计算。

rknn不量化转模型 量化模型失效_整型_02

2.2提升速度

                即对大多数处理器而言,整型运算的速度一般(但不总是)要比浮点运算快,访问一次  位浮点型可以访问四次  整型。

rknn不量化转模型 量化模型失效_整型_03

2.3降低内存   

                模型量化还有一个潜在的好处是降低运行时内存占用,这个特性无论是在移动端还是云端都是具有现实意义的。如果降低内存占用,可以得到如下好处:

1、降低访存量,存在提升速度的可能 。

2、在同样硬件环境下,同时处理更多视频或者视频路数 。

3、训练更大的模型。

我们分析下运行时内存都是被什么东西占用的,大家关心的参数weight只占很少一部分, 大部分内存占用来自激活值activation。如果你做低比特量化只关注卷积的话(很多论文其实也是只量化了卷积),那么是无法带来内存占用降低的。

如何才能用量化降低内存占用,只有一个方式: 将尽可能多的layer的激活值都进行量化 。

                

rknn不量化转模型 量化模型失效_浮点_04

已知提速概率较大的量化方法主要有如下三类,

3.1二值化量化

                其可以用简单的位运算来同时计算大量的数。对比从nvdia gpu到x86平台,1bit计算分别有5到128倍的理论性能提升。且其只会引入一个额外的量化操作,该操作可以享受到SIMD(单指令多数据流)的加速收益。

具体可参考论文:

IR-Net: Forward and Backward Information Retention for Highly Accurate Binary Neural Networks

(CVPR 2020)

3.2线性量化

                又可细分为非对称,对称和ristretto几种。在nvdia gpu,x86和arm平台上,均支持8bit的计算,效率提升从1倍到16倍不等,其中tensor core甚至支持4bit计算,这也是非常有潜力的方向。由于线性量化引入的额外量化/反量化计算都是标准的向量操作,也可以使用SIMD进行加速,带来的额外计算耗时不大。

rknn不量化转模型 量化模型失效_整型_05

rknn不量化转模型 量化模型失效_rknn不量化转模型_06

这里我们用 r 表示浮点实数,q 表示量化后的定点整数。

浮点和整型之间的换算公式:

rknn不量化转模型 量化模型失效_整型_07

其中,S是 scale,表示实数和整数之间的比例关系,Z 是 zero point,表示实数中的 0 经过量化后对应的整数,它们的计算方法为:

rknn不量化转模型 量化模型失效_整型_08

rmax 、 rmin 分别是r的最大值和最小值, qmax、 qmin 同理 。

3.2.1对称量化

                对称量化的浮点值和  位定点值的映射关系如下图,从图中可以看出,对称量化就是将一个  中的

rknn不量化转模型 量化模型失效_整型_09

内的 FP32值分别映射到  数据的  的范围内,中间值按照线性关系进行映射,称这种映射关系是对称量化。可以看出,对称量化的浮点值和量化值范围都是相对于零对称的。

当上面公式中的Z=0时即为下图中的对称量化

rknn不量化转模型 量化模型失效_浮点_10

3.2.3非对称量化

                因为对称量化的缩放方法可能会将 FP32 零映射到 INT8 零,但我们不希望这种情况出现,于是出现了数字信号处理中的均一量化,即非对称量化

当上面公式中的Z=min(x)时即为下图中的非对称量化

rknn不量化转模型 量化模型失效_人工智能_11

3.3对数量化

                一个比较特殊的量化方法。可以想象一下,两个同底的幂指数进行相乘,那么等价于其指数相加,降低了计算强度。同时加法也被转变为索引计算。但没有看到有在三大平台上实现对数量化的加速库,可能其实现的加速效果不明显。只有一些专用芯片上使用了对数量化。

编程小号
上一篇 2025-03-25 19:46
下一篇 2025-03-26 15:33

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/59530.html