【模型剪枝】Network Slimming:卷积核剪枝

paper:Learning Efficient Convolutional Networks through Network Slimming

这是一篇做剪枝的paper,2017的ICCV文章。

主要亮点在于直接使用BN层的gamma参数进行剪枝评估。在卷积核的级别做剪枝,非常方便好用。

问题:

这篇paper中,Lamda的选择标准和阈值标准没有给出,应该就是作者实验试出来的。

因此,lamda能不能通过网络学习得到呢,这样其实更实用。


Idea

先看Batch Norm(BN): 

image

image

上图是剪枝的示意图,可以看到,是在卷积核层面进行的剪枝。

一般情况下的网络剪枝是通过额外增加一些对原网络层的计算,得到卷积层的重要性信息。

Network Slimming:想法比较巧妙,通过BN层gamma参数进行重要性评估。(每一个channel有一个gamma值,作者认为gamma值反映了该通道的重要性)。

剪枝的过程就是将小的值对应的卷积核减掉。

如上图,橙色对应的部分会被剪枝掉。

因此呢,非常重要的就是gamma参数的选择过程了!


gamma参数

image

上图表示了gamma参数的分布情况。

图一为对gamma参数不做任何限制,分布比较分散,直接剪枝影响网络性能。

图2和3分别表明,在使用不同的lambda进行L1 norm的情况。约束的情况是不同的。

image ,g(s) = |s|

作者在损失函数中增加了BN层gamma参数的L1正则化。Lamda代表加入的损失的权重值。

剪枝完成后做fine-tune。迭代进行。微调过程如下:

Prune

整个fine tune的示意图如下所示:

image

具体步骤如下:

1、导入initial network

2、通过修订的损失函数训练,训练到一定准确率后根据gamma参数和要剪枝的比率计算阈值thresh。

3、将低于thresh的卷积核剪枝。

4、fine-tune一定的epoch,使map等参数升高。

重复进行234步骤,使网络达到较好的性能

Experiment

在CIFAR-10和CIFAR-100在分类上的实验结果。

image

压缩和加速效果比较明显

image

现有问题

除了前面所说的lambda参数的学习外,感觉还有这么一点问题:

针对卷积核的剪枝,其实非常有效的可以减少运算量。但是我们想要实现的硬件芯片中时,应该如何做呢。

这样没有block化的模块,应该如何设计和应用,也是目前的一个问题。

发布了49 篇原创文章 · 获赞 41 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/DL_wly/article/details/100142380