Network Slimming-Learning Efficient Convolutional Networks through Network Slimming](https://arxiv.org/abs/1708.06519)

Network Slimming为一种神经网络训练方法,其可以减小模型大小,运行内存,计算量,同时没有精度损失,并最小化训练过程.得到的模型不需要专门的库或者软件来运行.

通道剪枝:

在卷积层的每个通道引入一个尺度因子 γ \gamma,具体操作为将尺度因子 γ \gamma与该通道的输出相乘. 在训练的过程中,对这些尺度因子采用sparsity regularization操作,以自动鉴定不重要的通道.这样需要训练的参数包括网络本身的参数,以及每个通道的尺度因子 γ \gamma,训练目标函数为:

式中,(x,y)表示训练输入,目标输出.W为网络的各层的权重参数. l(f(x,W),y) l(f(x,W),y)表示网络本身的目标函数, λ∑γ∈Tg(γ) \lambda \sum_{\gamma \in T}g(\gamma)表示尺度因子 γ \gamma参数的目标函数.

g(⋅) g(\cdot)函数定义为:

g(s)=|s| g(s)=|s|

batch normalization

在CNN中,通常会引入batch normalization(BN),以加快模型收敛,优化模型生成效果.文献提出,同时将通道中的尺度因子 γ \gamma重新应用于BN层.另 zin,zout z_{in},z_{out}分别为BN层的输入,输出.B为当前的mini-batch,则BN层的计算公式为:


式中, μB,σB \mu _B ,\sigma_B为输入激活函数对B的均值和方差. γ,β \gamma,\beta 为需要训练的仿射变换参数.

对于含有小的尺度因子的通道,如图中橙色标记通道,将其剪去.剪枝后,我们获得了紧凑的模型,如图中有半部分所示.将剪枝厚的模型进行fine-tuned,以达到与完整的网络模型相等甚至更高的精度.

完整的网络训练过程图如下:

模型压缩效果:

代码分析

torch代码:https://github.com/liuzhuang13/slimming
试验代码模型为 VGGNet ,数据为CIFAR-10 dataset.
模型剪枝代码为:

require 'nn'
require 'cunn'
require 'cudnn'opt = lapp[[--percent    (default 0.5)--model  (default '')--save   (default '')
]]
print(opt)model = torch.load(opt.model)
model:cuda()
name = 'cudnn.SpatialBatchNormalization'print(model)total = 0
for k, v in pairs(model:findModules(name)) dototal = total + v.weight:size(1)
endbn = torch.zeros(total)
index = 1
for k, v in pairs(model:findModules(name)) dosize = v.weight:size(1)bn:narrow(1, index, size):copy(v.weight:clone():float():abs())index = index + size
endy, i = torch.sort(bn)
thre_index = math.floor(total * opt.percent)
thre = y[thre_index]pruned = 0for k,v in pairs(model:findModules(name)) doweight_copy = v.weight:clone()mask = weight_copy:abs():gt(thre):float():cuda()pruned = pruned + mask:size(1) - torch.sum(mask)v.weight:cmul(mask) v.bias:cmul(mask)print('layer index: ', k)print('total channel: ', mask:size(1))print('remaining channel: ', torch.sum(mask), '\n')
endpruned_ratio = pruned/totaltorch.save(opt.save, model)print('Successful!')

Network Slimming相关推荐

  1. 【剪枝算法】通过网络瘦身学习高效的卷积网络Learning Efficient Convolutional Networks through Network Slimming论文翻译

    此论文翻译仅仅用于自己方便学习.译文来自其他处. 在许多实际应用中部署深度卷积神经网络(CNN)很大程度上受到其计算成本高的限制.在本文中,我们提出了一种新的CNNs学习方案,能同时1)减小模型大小; ...

  2. Network Slimming——有效的通道剪枝方法(Channel Pruning)

    "Learning Efficient Convolutional Networks through Network Slimming"这篇文章提出了一种有效的结构性剪枝方法,即规 ...

  3. 论文复现:Learning Efficient Convolutional Networks through Network Slimming

    论文核心 论文提出了一种结构化剪枝策略,剪枝对象为 channel ,对 channel 重要性的评价标准使用的是 Batch Normalization 层中的缩放因子,这不会给网络带来额外的开销. ...

  4. 剪枝论文一(Network Slimming)

    本文介绍一种经典的模型压缩方法Network Slimming,可以实现: 减小模型大小 减少运行时的内存占用 在不影响精度的同时,降低计算操作数 论文中提供的示意图如下,可以看到左侧BN层中橙色的神 ...

  5. 模型剪枝经典论文解读:《Learning Efficient Convolutional Networks through Network Slimming》

    Learning Efficient Convolutional Networks through Network Slimming 摘要: CNN在落地中的部署,很大程度上受到其高计算成本的限制.在 ...

  6. 通过Network Slimming学习高效卷积网络

    1.文章信息 本文是2017年发表在计算机视觉领域顶会ICCV的一篇文章,被引量已经达到了1214次,是引用比较广泛的一种模型剪枝方法,作者来自清华大学.英特尔中国实验室.复旦大学和科内尔大学. 2. ...

  7. 【模型剪枝】|Learning Efficient Convolutional Networks through Network Slimming

    作用对象:BN层(和不重要的通道) 作用方式: imposes sparsity-induced regularization on the scaling factors(比例因子) 通过对批量归一 ...

  8. 【论文精读1】基于BN的模型剪枝-Learning Efficient Convolution Networks through Network Slimming

    原论文下载地址 论文思想:先结构剪枝后微调.

  9. 模型裁剪--Rethinking the Value of Network Pruning

    Rethinking the Value of Network Pruning https://github.com/Eric-mingjie/rethinking-network-pruning 网 ...

最新文章

  1. 解决雷达图文字显示不全问题
  2. 点在平面上的投影坐标例题_光测力学-栅线投影(面结构光)技术
  3. Request load debugging - CRM side
  4. LeetCode 581. Shortest Unsorted Continuous Subarray
  5. 微信小程序_简单组件使用与数据绑定
  6. C语言无符号整数和有符号整数的比较
  7. CentOS 6.2安装配置pacemaker
  8. 2020年百度之星 程序设计大赛 初赛一
  9. 基于ArcScene简单实验操作
  10. Python爬虫之scrapy_redis原理分析并实现断点续爬以及分布式爬虫
  11. no bgp default ipv4-unicast
  12. 3D建模技巧:如果想用好ZBrush,必须知道这10点!
  13. 程序员创业:小程序开发费用报价表,包含项目工期和费用明细
  14. 史上最全软件测试工程师常见的面试题总结(九)【多测师】
  15. 判断Checkbox选中两种方法
  16. 设备跟服务器对接需要什么文档,『OneNET设备云平台』云平台对接服务_智能设备...
  17. Idea注释输入中文,显示为日文
  18. 杭电OJ 1026(C++)
  19. 如何用python写汉诺塔游戏的辅助
  20. webstorm -- 2017 激活破解

热门文章

  1. 千年3+db服务器修改无效,《千年3》2019年1月服务器互通公告
  2. 美国南加州大学研究生计算机专业申请条件,美国南加州大学计算机研究生申请条件有哪些呢...
  3. Java实现第九届蓝桥杯付账问题
  4. MySql字段内容加密与解密
  5. 8.21 binary search
  6. Linux创建文件的几种方式
  7. win10企业版 LTSC 安装 MSIX(msixbundle) 文件
  8. oracle orion测试工具的使用
  9. 2020年中国德化陶瓷博览会暨茶具文化节隆重举行—五洲御瓷分会场精品荟萃
  10. 闪送、水滴筹、美团、京东、百度java面试题总结