Network Slimming 算法笔记

27人阅读 评论(0) 收藏 举报
分类:

论文:Learning Efficient Convolutional Networks Through Network Slimming
链接:https://arxiv.org/abs/1708.06519
原代码(Torch实现):https://github.com/liuzhuang13/slimming
第三方代码(PyTorch实现):https://github.com/foolwood/pytorch-slimming

这篇是ICCV2017的文章,通过剪枝来做模型压缩和加速。我们知道在剪枝系列算法中,主要的不同点在于如何评价卷积核或者feature map的重要性,一般都是通过额外增加一些对原网络层的计算得到卷积核或feature map的重要性信息,而这篇文章的剪枝比较有特色,因为其通过网络原有的Batch Normalization层的γ参数进行feature map重要性评估(由BN层γ参数的含义可知feature map的每个channel对应一个γ值,所以这个γ值相当于该channel的重要性),然后将重要性低于某个阈值的feature map剪掉,剪掉feature map相当于生成这些feature map的对应卷积核也被剪掉,这就完成了剪枝的过程,如Figure1所示。factors那一列就是BN层的γ参数,其中比较小的值对应的feature map就会被剪掉(橙色)。
这里写图片描述

当然这里有两个注意的点:1、如果不对BN层的γ参数做一些限制,也就是正常情况下其值是很分散了,那样剪枝的效果就会很差,可以看Figure4的第一个图,λ=0表示不对γ做限制情况下γ值的分布情况。所以作者在原来的损失函数中增加了一项对网络所有BN层的γ参数的L1范数限制,使得γ更加稀疏,如公式1所示。公式1中加号左边部分是原来网络的损失函数,加号右边是增加的γ的L1范数,也就是向量γ的绝对值和,λ是两个loss之间的权重值。增加了γ的L1范数后的γ值分布就如Figure4中第二个和第三个图所示,比如在Figure4中第三个图是λ=0.0001时的γ参数分布,大部分γ都是0值,因此当把这些0值对应的feature map剪掉对网络结果的影响就很小。
这里写图片描述

这里写图片描述

2、剪枝完要做fine tune。如果只是对一个网络做剪枝而不做fine tune,那么结果是比较差的。因此这个剪枝算法的具体过程是这样的(如Figure2所示):导入一个网络结构;通过公式1设定的损失函数进行训练,训练到一定准确率后开始基于该网络的所有BN层的γ参数和要剪枝的比例计算γ的阈值,然后将低于该阈值的γ对应的feature map剪掉;剪枝完的网络要fine tune一定epoch后才能看到准确率等指标慢慢爬升到理想范围。以上就是整个剪枝的过程,整个过程可以重复执行多次,就像Figure2中的虚线箭头所示。

这里写图片描述
举个例子来说明剪枝的过程:比如某个网络的第一层是卷积层(假设卷积核有64个),接下来是BN层,然后在确定好γ的阈值后,假设这个BN层的γ向量(原来γ向量有64个值,和前面卷积核的数量的对应相等的)只有17个值大于这个阈值,那么在构建剪枝后的网络时,第一个卷积层的卷积核参数就设定为17,同时把这17个卷积核的参数赋给剪枝后的网络,同样BN层的γ向量也初始化成长度为17的向量,而且用那17个超过阈值的值来赋值。网络的其他层都是这样按顺序进行赋值,这样就得到了剪枝后的网络了。接下来的fine tune就不细说了,就是常规的网络训练。

实验结果:
文章中大部分的实验是在CIFAR-10和CIFAR-100数据集上做的,网络主要还是VGG,而ResNet和DenseNet的实验较少。整体看加速和压缩的效果还是比较明显的,更多实验结果可以参看论文。
这里写图片描述

最后说下文中主要还是对VGG网络做压缩和加速,并没有ResNet和DenseNet网络在ImageNet数据集上的实验结果,因此不知道是否同样有效,毕竟对于ResNet这样存在skip connection和element-wise add操作的网络而言,如何保证剪枝后做element-wise add时feature map的channel数量一致是关键。上面给出的PyTorch代码逻辑比较清晰,如果看不懂源代码的lua代码,可以考虑看PyTorch实现的代码,PyTorch命令式的编程可以很容易对BN层的梯度进行操作,非常直接地对损失函数做了改造。

查看评论

Network Slimming

Network Slimming-Learning Efficient Convolutional Networks through Network Slimming](https://arxiv.o...
  • u011961856
  • u011961856
  • 2017-08-29 19:40:23
  • 705

模型压缩:Networks Slimming-Learning Efficient Convolutional Networks through Network Slimming

Network Slimming-Learning Efficient Convolutional Networks through Network Slimming(Paper) 2017年ICC...
  • u011995719
  • u011995719
  • 2017-12-13 09:41:44
  • 704

Learning Efficient Convolutional Networks through Network Slimming

【pdf】论文解读  这篇论文介绍了通道层次上的稀疏化。在CNN中,每个卷积核的输出通道数多达32、64、128、256甚至更多,这么多通道都是同等重要的吗?肯定不是的,肯定是由的通道十分重要,有的通...
  • liumingpei
  • liumingpei
  • 2018-01-27 22:58:56
  • 81

RA-CNN算法笔记

论文:Look Closer to See Better: Recurrent Attention Convolutional Neural Network for Fine-grained Imag...
  • u014380165
  • u014380165
  • 2018-02-03 08:38:12
  • 1203

神经网络压缩(2): Dynamic Network Surgery for Efficient DNNs

转自:http://blog.csdn.net/zhangjunhit/article/details/53218211NIPS 2016 http://arxiv.org/abs/1608.044...
  • cookie_234
  • cookie_234
  • 2017-04-28 13:55:50
  • 1404

Dynamic Network Surgery for Efficient DNNs

NIPS 2016 http://arxiv.org/abs/1608.04493code: https://github.com/yiwenguo/Dynamic-Network-Surgery...
  • zhangjunhit
  • zhangjunhit
  • 2016-11-18 16:17:51
  • 2156

论文笔记:Network in network

摘要 Network in Network(‘NIN’) 构造了一个复杂的微型网络结构,用于对数据进行抽象处理(其实就是提取特征)。利用全局平均池化对特征图进行分类,能够有效避免过拟合问题。 特点...
  • baidu_17806763
  • baidu_17806763
  • 2017-02-15 10:31:14
  • 310

Network in Network 笔记

network in network 学习笔记 -lenet等传统cnn网络中的卷积层其实就是用线性滤波器对图像进行内积运算,在每个局部输出后面跟着一个非线性的激活函数,最终得到的叫作特征...
  • luojun2007
  • luojun2007
  • 2017-04-22 11:19:08
  • 399

经典计算机视觉论文笔记——《Network in Network》

这篇论文引用量并不算高,但是提出了一个很有意思观点,就是将全连接层与卷积层统一起来。后续的很多经典网络结构,包括googlenet,FCN,应该都受其启发。作者是颜水成团队,caffe的model z...
  • u010318961
  • u010318961
  • 2016-07-05 15:10:10
  • 1016

(Deep Learning)network in network 学习笔记

摘要 提出一种新的深层网络“NIN”模型在感受野的辨别力。通过建立微型神经网络,在感受野中获得更复杂的抽象结构。 对所有的feature map使用global average pooling(全局均...
  • shouke22
  • shouke22
  • 2017-10-29 19:45:05
  • 91
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 33万+
    积分: 4240
    排名: 8950
    博客专栏
    最新评论