fp32和int8模型的区别_模型压缩入门

本文详述模型压缩方法,包括剪枝、蒸馏和量化,以VGG16和ResNet34为例,探讨在CIFAR10数据集上的效果。直接减通道和BN剪枝的剪枝策略降低模型尺寸,通过蒸馏补偿精度。量化实验表明,fp32模型量化为int8后,模型尺寸显著减小,但推理速度和精度有所牺牲。
摘要由CSDN通过智能技术生成

本教程介绍了模型压缩的三大方法:剪枝、蒸馏、量化,最终在pc端完成部署。这些方法均采用各领域的经典思路来实现,剪枝部分(BN剪枝、直接减通道)、蒸馏部分(参考Hinton论文)、量化(MNN离线量化)。教程的目的是帮助自己快速在模型压缩领域入门,通过实验体会剪枝、蒸馏、量化的效果,并在模型调试方面积累经验。

模型压缩核心:先缩小模型尺寸,再补偿下降的精度

实验模型:VGG16,ResNet34

数据集:CIFAR10

剪枝

1. 直接减通道数

以VGG16为例,直接减通道的剪枝策略直接在每一层上将其通道数减半或减1/4,相当于按照VGG16的结构重新搭建了一个通道数更少的模型,这类模型直接初始化训练即可。该方案严格上应该不属于剪枝的范畴,只是仿照一个较好的模型结构,去减少通道数。一般来说适用于模型较大,任务相对比较简单的场景中,大模型应用在较简单的场景中往往有较多的参数冗余,因此直接采用减通道的方法保留模型结构,快速缩小模型次尺寸。

2. BN剪枝

通常来说,模型会采用Conv+BN的组合,此时BN层的权重可以看作是筛选卷积层通道的重要因子。BN层中某一通道的权重越小,相当于卷积层对应通道的作用越小(卷积层某一通道乘以BN层对应通道的小权重,其输出接近于0,相当于该通道对应的输出为0,因此可以把这些通道视为不重要的通道,通过剪枝剪掉)

核心:在BN层中找到权重较小的通道,对应的在卷积层中把这些通道剪掉,达到保留模型结构,缩小模型尺寸的目的。

问题:常规训练的模型其BN的权重往往不会太接近于0,或者说都比较大,这种情况下,直接通过把权重相对较小的通道剪掉对模型效果的影响会比较大

解决方法:稀疏化训练,在模型的常规损失函数上加上BN参数的正则化损失,强迫BN参数在训练过程中向0靠拢,训练完成后,把最接近于0的这部分BN参数对应的通道剪掉,即等价于把最不重要的通道剪掉。

1. VGG实验直接减通道

注:VGG16是原始结构,VGG16-HALF把所有的通道数减半,VGG16-QUARTER把所有的通道数减为1/4

通道数减为1/2的情况下,参数量降低了4倍,速递提升了2倍左右,精度掉了2%

通道数减为1/4的情况下,参数量降低了16倍,推理速度提升了4倍左右,精度掉了5%

对于上述两种直接减通道的方案,在模型参数量和推理速度的收益还是很明显的,对于丢掉的精度,下面会通过模型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值