轻量化神经网络CondenseNet--对DenseNet的进一步改进

CondenseNet通过引入可学习的分组卷积,解决了DenseNet的冗余问题,实现了网络的高效压缩。在训练期间,它直接对权重进行剪枝,保持网络的平滑性。全稠密连接不仅在块内,也在块间进行,通过pooling解决尺寸问题。此外,增长率指数级增长,提高深层网络性能。CondenseNet在保持精度的同时,计算量仅为DenseNet的十分之一,甚至优于MobileNet和ShuffleNet。
摘要由CSDN通过智能技术生成

原文地址:

《CondenseNet: An Efficient DenseNet using Learned Group Convolutions》

亮点:

  1. 提出了可学习的分组卷积(Learned Group Convolutions):利用网络压缩技术中的稀疏网络原理,在训练期间根据卷积核的L1值对卷积核进行置零操作;
  2. 剪枝:训练一开始就直接对权重做剪枝,而不是对训练好后的模型做剪枝操作,不仅能准确地剪枝,还能继续训练,使网络权重更平滑;
  3. 全稠密连接DenseNet的稠密连接只在相应的block中进行,而本文作者将不同的block之间的特征也进行相连,做concatenate操作,对于特征图size不同的问题,则通过pooling操作下采样;
  4. 指数增长率:增长率(Growth Rate)为指数增长,对于深层网络来说,高水平特征对模型的效果影响更大,所以通过增加后面层的通道数的方式提升网络性能。

1. 存在的问题 

  • DenseNet冗余度高,实际运行占用现存较多:DenseNet 通过稠密连接,将网络的早期特征输入到后续所有层中,实现特征重用,同时也增加了训练过程中梯度的流动,但是并不是所有早期特征对后续层都有帮助,所以很难去判断浅层网络的哪些特征是真正有用的,因此其内在连接存在很多冗余,即早期的特征不需要复用到较后的层;
  • 1x1卷积加传统分组,对模型的精度影响较大:在传统的1x1分组卷积方法后,模型的精度会有较大程度的下降,即便加入shuffe操作,效果也不会改善很多,原因是一般1x1卷积层的作用是对前面层的输出特征做通道上的融合,如果加入分组,那么融合的输入就减少了许多,因此输出的多样性就得不到保证。

 2. DenseNet与CondenseNet对比

左边图(left)为DenseNet的结构:第三层的1*1 Conv主要起到channel增减的作用(channel数量从lk到4k),第五层的3*3 Conv生成k个channel的输出。

中间图(middle)是CondenseNet在训练时候的结构:Permute层的作用是为了降低引入1*1 L-Cconv对结果的不利影响,实现的是channel之间的调换过程(类似于shuffle)。需要注意的是原来1*1 Conv替换成了1*1 L-Conv(learned group convolution),原来的3*3 Conv替换成了3*3 G-Conv(group convolution)。

右边图(right)是CondenseNet测试时候的结构:其中的index层(索引层)的作用在于feature selection,即具体要选择哪些feature map是在中间图中训练完的时候就确定的,因此index层只是一个类似0-1操作。另外要注意由于添加了Index层,所以原来中间图中的1*1 L-Conv层在Figure1右边图中替换成常规的卷积group层:1*1 G-Conv。

3. 可学习分组卷积 (learned group convolution)

左图为普通卷积操作:假设输入输出feature map的channel数为M和N,那么计算量为k^{2}*m^{2}*M*N,其中k为卷积核大小,m是输出feature map的大小;

右图为分组卷积操作:其实就是将输入channel分成n个group(图中为3个group),同时卷积核也分成n个group;然后每个group里的卷积核(图中每个group有2个卷积核)只跟一一对应的group中的feature map(图中是4个feature map)做卷积得到输出。如果采用G个group来做,计算量为\frac{k^{2}*m^{2}*M*N}{G},所以相比之下就是原来计算量的1/G。

1*1卷积层的作用是对前面层的输出特征做channel上的融合,如果加入group,那么融合的输入就少了许多,则输出的多样性就得不到保证。所以加入一个类似ShuffleNet那样的shuffle操作,就能增加输出多样性。因此作者通过添加Permute层(变换通道顺序,这样后面每个group的3*3卷积的输入就可以包含1*1卷积的所有group输出),这可以在一定程度上降低在1*1卷积中引入group操作对结果的影响。

可学习分组卷积(Learned Group Convolution)可以分成两个阶段:浓缩(Condensing)阶段和优化(Optimizing)阶段。其中浓缩阶段用于剪枝没用的特征,优化阶段用于优化剪枝之后的网络。

condensation factor C=3表示每个group可以包含的输入channel个数是[R/C],R是输入channel的总数,[]是取整的意思,也就是剪枝即最终保留1/C的连接。在图中分组数G=3。浓缩率C=3,即只保留原来1/3的特征。

Condensing Stage1是普通的卷积过程;在训练该网络时使用了分组lasso正则项,这样学到的特征会呈现结构化稀疏分布,好处是在后面剪枝部分不会过分的影响精度;

Condensing Stage2是自动选择group的过程,浓缩率为C的CondenseNet会有C-1个浓缩阶段,在每次浓缩阶段训练完成之后会有\frac{1}{C}的特征被剪枝掉。也就是经过C-1个浓缩阶段后,仅有\frac{1}{C}的特征被保留下来,CondenseNet的剪枝并不是直接将这个特征删除,而是通过掩码的形式将被剪枝的特征置0,因此在训练的过程中CondenseNet的时间并没有减少,反而会需要更多的显存用来保存掩码;
Optimization Stage是在group确定的前提下进行的剪枝,也就是筛选出每个group中不是很重要的输入feature map,它会针对剪枝之后的网络单独做权值优化。CondenseNet用于优化阶段的总Epoch数和浓缩阶段是相同的:假设网络的总训练Epoch数是M,压缩率是C。它会有C-1个浓缩阶段,每个阶段的Epoch数均是\frac{M}{2*(C-1)}。优化阶段的Epoch数为\frac{M}{2}  ;
Testing部分主要是一个index layer操作和一个常规的group操作。经过训练过程的剪枝之后我们得到了一个系数结构,目前这种形式是不能用传统的分组卷积的形式计算的,如果使用训练过程中的掩码的形式则剪枝的意义就不复存在。为了解决这个问题,在测试的时候CondenseNet引入了索引层(Index Layer),索引层的作用是将输入Feature Map重新整理以方便分组卷积的高效运行。举例:图中,组1使用的输入Feature Maps是(3,7,9,12),组2使用的Feature Maps是(1,5,10,12),组3使用的Feature Maps是(5,6,8,11),索引层的作用就是将输入Feature Map排列成(3,7,9,12,1,5,10,12,5,6,8,11)的形式,之后便可以直接连接标准的分组卷积。

例子:

正常的分组卷积:假设输入通道总数为12,每一组的输入通道数应该为12/3=4;

可学习分组卷积:假设condensation factor=4(C=4),分成3组(G=3),那么每一组的输入通道数为12/4=3。也就是这个condensation fractor控制着每一个分组的输入通道数,这样就能够进一步压缩网络。

C=4时的CondenseNet的训练Epoch分布情况以及cosine学习率:

训练使用cosine学习率退火,训练过程如图所示,前三个阶段为condensing stage,第四个阶段为optimization stage中间的损失突然上升是由于最后的condensing阶段后剪枝了一半的权重导致的。

4.  CondenseNet网络结构

全密集连接:不同block的feature map也相互连接,DenseNet中只有一个block内部的几个层之间有dense connection,因此可以在图中看到一些2*2 pooling或4*4pooling层就是为了解决不同block的feature map连接时候的尺寸问题;

Growth rate的指数级增长:随着网络的加深增大了growth rate,growth rate是DenseNet中每一层的输出channel数量,假设有m个block,K0为常量(也是第0个block的growth rate),那么第m个block的growth rate就是:K=2^{M-1}*K0。因此最终的结果就是加宽了网络。

在ImageNet数据集上用的CondenseNet网络结构: 

这里写图片描述 

5. 总结

相比于DenseNet:CondenseNet在相同的精度水平下,计算量是前者的十分之一。

相比于MobileNet和ShuffleNet:相同的精度水平下,计算量是前两者的二分之一。在相同的计算量下,top-1误差比前两者低3%。

 CondenseNet特点在于可学习分组卷积的提出,整体的结构设计十分巧妙。以往的剪枝工作都是在网络训练后进行的,导致精度有较大的下降,而可学习分组卷积结合训练过程进行剪枝,不仅能准确地剪枝,还能继续训练,使网络权重更平滑。

参考:

CondenseNet详解

CondenseNet算法笔记 

如何评价论文:CondenseNet?

仅为学习记录,侵删! 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

胖虎记录学习

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

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

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

打赏作者

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

抵扣说明:

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

余额充值