深度神经网络模型的压缩--network slimming

注:文章来自于我的博客shawnluo.com,欢迎访问~!

作者:Zhuang Liu, Jianguo Li, Zhiqiang Shen, Gao Huang, Shoumeng Yan,
Changshui Zhang

发表信息:Computer Vision and Pattern Recognition(2017)

一、问题动机

随着大规模数据集、高端的GPU和新型网络结构的出现使得近年的CNN网络结构发展十分迅速,其网络规模也越来越大越大、网络深度也越来越深。然而,这些网络尽管有着更强的表现能力,但是其需要消耗和占用的的资源更多(如152层的ResNet有超过6000万的参数并且在处理一张224×224分辨率的图片时需要20G的浮点数操作),这在一些资源限制性的平台上如移动设备、可穿戴设备或者IoT设备上。其主要限制有以下几条:(1)模型的尺寸过大(2)运行时所需的内存过大(3)计算操作过多。

目前已经有很多工作在致力于压缩大型的CNN模型,其中包括低秩逼近、网络量化与二值化、权重修剪、动态推论等。然而大多数方法都只能解决以上一或两个问题。此外,有的方法还需要特定的软/硬件加速来加快执行速度。而另一种减少大型CNN网络消耗的方法是对网络进行稀疏化,这种方法可以用在很多网络结构中,但是他们都还是需要特殊的软/硬件加速来获得内存或者运行时间上的减少。

针对这些问题,该论文提出了一种network slimming方法,一种简单有效的的网络训练方法,可以使得网络在资源限制性的设备上部署时有效的处理以上的几点限制。

二、解决思路:

1.对Batch Normalization层中的缩放因子γ添加L1正则化,使得其在训练过程中逐渐趋向于0,从而使得我们可以判别出那些通道是不重要的(每个缩放因子γ又对应于特定的卷积通道或是完全连接层中的神经元,当缩放因子越小时,说明其重要性越低),这为之后的剪枝操作做好了准备:当其小于某个阈值时,便将其剪掉。原理图如下:

深度神经网络模型的压缩--network slimming

其中,channel scaling factors即是缩放因子γ,当其低于某个阈值时(如左侧图中橙色的的feature map),其便会被删除,剪掉feature map相当于生成这些feature map的对应卷积核也被剪掉,这就完成了剪枝的过程(右侧图)。

2.total loss的巧妙设计:

深度神经网络模型的压缩--network slimming

在total loss中,除了基本的loss之外,还添加了γ的L1正则化项。这可以达到一边训练一边剪枝的效果,也即在训练中自动剪枝,十分高效。

3.Network Slimming的整体流程:

深度神经网络模型的压缩--network slimming

首先导入一个网络结构;通过公式(1)设定的损失函数进行训练,训练到一定准确率后开始基于该网络的所有BN层的γ参数和要剪枝的比例计算γ的阈值,然后将低于该阈值的γ对应的feature map剪掉。剪枝完的网络要finetune一定的epoch后才能看到准确率等指标慢慢恢复到到理想范围。

以上就是整个剪枝的过程,整个过程可以重复执行多次。

三、方法亮点:

  1. 对BN层的γ系数添加L1正则化,诱导BN层的稀疏化,根据γ的大小进行剪枝。
  2. 将对γ系数的L1正则化项加入到目标函数中,达到在训练中自动剪枝的效果。
  3. 网络裁剪是在channel-level实施的规整操作,因此生成的精简模型能够直接运行在成熟框架(Pytorch、MXnet或TensorFlow等)或硬件平台上(GPU、FPGA等),无需特殊算法库的支持。

四、存在问题:

对于一些层数很深的网络,剪枝之后精度损失很大,即使经过finetune,也不能很好的提升精度。

注:文章来自于我的博客shawnluo.com,欢迎访问~!


分享到:


相關文章: