模型通道剪枝 Network Slimming

文章地址 https://arxiv.org/pdf/1708.06519.pdf

pytorch版本的github地址:GitHub - foolwood/pytorch-slimming: Learning Efficient Convolutional Networks through Network Slimming, In ICCV 2017.

文中探讨了其他5种方法的优缺点。

  • 低秩分解。“Exploiting linear structure within convolutional networks for efficient evaluation”用SVD分解这样的低秩分解技术在全连接层表现比较好,可以将模型压缩3倍,但无明显速度提升,因为主要计算量来自卷积层。
  • 权重量化。“Compressing neural networks with the hashing trick”通过量化网络权重,只需存储共享权重和哈希索引,节省存储空间,但不能节省运行内存和推理时间。“Imagenet classification using binary convolutional neural networks” 和“Training deep neural networks with weights and activations constrained to+1 or-1”将权值量化为二值/三值,极大压缩模型大小,提升速度,但精度损失大。
  • 权重剪枝/稀疏化。“Learning both weights and connections for efficient neural network”和“Training sparse neural networks”剪枝掉不重要的连接,使权重稀疏化,但还是占用运行内存,激活值上密集的。
  • 结构剪枝/稀疏化。结构剪枝是对网络结构的(channels,neurons等)一部分做剪枝或稀疏化,而不是对个别权重,因此不太需要特别的库来实现推理加速和运行时的内存节省。本文的通道剪枝也是属于结构剪枝。
  • 神经结构学习。用强化学习学习网络结构,很高效。Network slimming
  • 论文中对每一个通道引入一个缩放因子,与通道的输出相乘。接着联合训练网络权重和这些缩放因子,最后将小缩放因子的通道直接剪除,微调剪枝后的网络。

Network slimming

论文中,通过对每一个通道引入一个缩放因子,将缩放因子与通道的输出相乘。接着联合训练网络权重和这些缩放因子,最后将缩放因子小的通道直接砍掉,得到剪枝后的网络。再微调剪枝后的网络,减小剪枝给模型带来的误差影响。

论文采用将L1正则化施加到BN层的缩放因子gamma上的方法,即认为gamma越接近0,其对应的输出对结果的重要性就越低,开源代码实现如下:

 引入缩放因子正则项之后,网络训练得到的模型,其很多缩放因子正则项都会趋于0。设定模型剪枝的百分比阈值,对缩放因子的绝对值排序后,砍掉模型剪枝百分比阈值以外的通道。为减小剪枝带来的模型误差,再对模型进行finetune,重复进行网络瘦身,就能得到紧凑的小网络了。

 实际代码操作心得:

1、进行模型剪枝训练过程中,缩放因子一般取1e-4或者1e-5

2、实际在对模型进行剪枝的过程中,需要防止某一层的通道全部被砍掉的情况出现

3、一般而言,直筒型模型比残差连接的网络砍掉的参数量要多

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cn是个虾米

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值