模型剪枝-ICCV2017-Learning Efficient Convolutional Networks through Network Slimming

方案目标

1)减小模型大小; 2)减少运行时内存占用; 3)在不影响准确率的情况下降低计算操作的数量。

方案实现

通过在网络中进行通道层次稀疏来实现

CNN部署限制

1)模型大小:CNN的强大表现力来自其数百万可训练参数。这些参数以及网络结构信息需要存储在磁盘上并在推理期间加载到内存中。例如,存储一个ImageNet上训练的典型CNN会占用超过300MB的空间,这对嵌入式设备来说是一个很大的资源负担。 2)运行时内存(占用情况):在推理期间,即使批量大小为1,CNN的中间激活/响应占用的内存空间甚至可以比存储模型的参数更多.这对于高端GPU来说不是问题,但是对于许多计算能力低的应用而言是无法承受的。 3)计算操作的数量:在高分辨率图像的卷积操作上是计算密集的。大型CNN在移动设备上处理单个图像可能需要几分钟,这使得在实际应用中采用大型CNN是不现实的。

network slimming

对批量归一化(BN)层中的缩放因子强加L1正则化,因此很容易实现,而不会对现有CNN架构进行任何更改。通过L1正则化将BN缩放因子的值逼近零使得我们能够识别不重要的通道(或神经元),因为每个缩放因子对应于特定的卷积通道(或完全连接的层中的神经元)。
在这里插入图片描述
这里对应的缩放因子γ越小,说明这个channel越不重要,则可以对其进行剪枝。
在这里插入图片描述

why bn?

1)如果直接加在CNN后面(没有BN),就是个线性变换,对没有归一化的数据进行线性变换,是没有意义上的,加不加效果都一样。
2)如果加在BN前面,BN的normalization就把scaling的效果抵消了。了解bn层的公式,发现分子分母都乘个系数没有变化,所以归一化的过程将系数效果抵消,将scaling放在BN层前面同样没有意义。
3)如果加在BN后面,BN已经有一个scaling,就多余了。

bn层为什么一般用在线性层和卷积层后面,而不是放在非线性单元后

因为非线性单元的输出分布形状会在训练过程中变化,归一化无法消除他的方差偏移,相反的,全连接和卷积层的输出一般是一个对称,非稀疏的一个分布,更加类似高斯分布,对他们进行归一化会产生更加稳定的分布。其实想想也是的,像relu这样的激活函数,如果你输入的数据是一个高斯分布,经过他变换出来的数据能是一个什么形状?小于0的被抑制了,也就是分布小于0的部分直接变成0了,这样不是很高斯了

裁剪策略

使用全局阈值在所有层上修剪通道,其被定义为所有比例因子值的特定百分位数。 例如,我们通过选择百分比阈值为70%来修剪具有较低缩放因子的70%通道。 通过这样做,我们获得了一个更紧凑的网络,具有更少的参数和运行时内存,以及更少的计算操作。当修剪比例高时,修剪可能暂时导致一些精确度损失。 但是,这可以通过修剪网络上的后续微调过程得到很大程度的补偿。 在我们的实验中,在许多情况下,微调的轻量化网络甚至可以实现比原始未修网络更高的精度。
在这里插入图片描述

处理跨层连接和预激活结构

上面介绍的网络瘦身过程可以直接应用于大多数简单的CNN架构,如AlexNet 和VGGNet 。 当它应用于具有跨层连接的现代网络和预激活设计(如ResNet 和DenseNet)时,需要进行一些调整。 对于这些网络,层的输出可以被视为多个后续层的输入,其中BN层被放置在卷积层之前。 在这种情况下,在层的输入端实现稀疏性,即,该层选择性地使用它接收的通道子集。 为了在测试时获得参数和计算节省,我们需要设置一个通道选择层来屏蔽我们识别出的无关紧要的通道。修剪过程是通过构建一个新的较窄的模型并从稀疏训练的模型中复制相应的权重来实现的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值