【轻量级网络系列二】ShuffleNet:An Extremely Efficient Convolutional Neural Network for Mobile Devices论文总结

前言

ShuffleNet是被设计来手机设备上(这种算力比较有限,一般在10-150MFLOPs左右)。这里的FLOPs:全称 floating point operations per second,意指每秒浮点运算次数,可以大致理解为算力评估的一个标准。ShuffleNet利用了pointwise group convolution and channel shuffle操作来达到减小计算量的效果。

现在的CNN模型所取到很好的结果上,FLOPs往往达到十亿次,本论文探求一种在保持FLOPs在10-100M数量级左右,以保证这些model可以很好的运行在移动平台上,如智能手机,机器人等。现有的小网络都是通过对原网络进行修剪,压缩来进行的。ShuffleNet使用pointwise group convolution来替代1*1卷积,以下降计算复杂度。而channel shuffle是用来克服pointwise group convolution带来的副作用。

相关工作

分组卷积 

AlexNet里面首次用到分组卷积,在两张不同的卡上进行分布式分组卷积训练,当时是因为一张卡放不下。ResNeXt里面阐述他的高效性,Xception提出了Depthwise separable convolution,MobileNet(可见我的另一篇blog)利用depthwise separable convolutions取得了很好的轻量级网络效果。本篇文章以另一种形式改进了分组卷积。

Channel Shuffle Operation

第一次被提出是在cuda-convnet这篇文章中,在random channel shuffle之后接了一个组卷积层,其中的random channel shuffle有着与本文不同的目的,在这之后就很少被其他学者关注到。最近,有一个工作改善了他,但是做的并不好。

模型加速

此方面的工作是为了加速推断时的速度同时尽可能的保留预训练模型的准确性。通过修剪网络的连接以及减少冗余的通道可以达到相同的表现。量化和分解通过减少计算的冗余来对网络进行加速。知识迁移可以用一个大网络教一个小网络学习,小网络表现会差一些。

方法

Channel Shuffle for Group Convolutions

Xception和ResNeXt高效使用了depthwise separable convolutions或者group convolutions。但是,这两个model都没有完全的使用好1*1卷积,1*1卷积(也被叫做pointwise convolutions)是传统CNN模型里面很费计算量的一部分。比如在ResNeXt中的残差单元1*1卷积在乘加部分占了93.4%。在小的网络中,1*1卷积造成了限制通道数量,这样才可以减小计算复杂度,但由于通道数量的减少导致了准确率的下降。

为了解决这个问题,可以应用通道稀疏连接,例如是组卷积,通常用在1*1卷积上。在这里,作者列举了两个组卷积的模式,以及一个他们怎么处理组卷积的。如图1(a)就描述了组卷积带来的问题,每一组对应了之前输入组的输出,这样就导致了数据流动方式(在图上就是同一个颜色)一致,导致网络的拟合特征能力下降。可以像图1(b)一样可以通过随机打乱输出通道对应之前的组。而作者在此提出一种等价于(b)的模式(如图1(c)),原文这么描述,输入通道有g组,输出通道为g*n组,帮他reshape成(g,n),将其转置。在这里,我的理解就是一开始有g组,后面将输出通道分为n组,这样就保证了每个组之间都有信息交换。这个Channel Shuffle是可导的,所以整个过程是可以完成一个端到端的训练过程。

ShuffleNet Unit

ShuffleNet Unit是对于residual block的改进,首先对于残差块的3*3卷积替换成3*3的depthwise convolution,这样的结构描述在图2(a)中,在将其中耗时的1*1卷积替换成1*1组卷积和Channel Shuffle,在这里只有一个1*1卷积使用了Channel Shuffle,作者解释说是为了简便,而且会在后面实验部分给出对比数据。值得注意的是,在depthwise convolution之后作者并没有使用ReLU激活函数。而在ShuffleNet unit中3*3卷积有stride的版本里,作者做了两个修正,首先对于短路连接中x做了一个平均池化,之后对于本来是相加的操作改成了通道concat,来在不怎么耗费计算力的前提下提高通道的数量。

得益于组卷积和Channel Shuffle,ShuffleNet unit比ResNet和ResNeXt计算量要少很多,如果输入的特征大小为C*H*W,bottleneck的通道为m,分组卷积的组数为g,那么ResNet unit需要hw(2cm+9m^{2})FLOPs,ResNeXt需要hw(2cm+9m^{2}/g)FLOPs。而ShuffleNet unit仅需要hw(2cm/g+9m),可以看到,大约是ResNet和ResNeXt的1/mg/m倍。

尽管depthwise convolution很好,可以减少计算复杂度,但是在ShuffleNet中只用在bottleneck feature maps(即上图中的unit)。因为他们发现在低电源移动设备上,很难完全的使用depthwise convolution的效益,由于计算/内存访问率较低。

网络结构 

网络结构总体情况就如上表所示,ShuffleNet的网络结构很像ResNet,就把ResNet的unit改成ShuffleNet unit,每个stage的第一模块是stride为2的卷积,然后bottleneck的channel是输出的四分之一。文章中也给出了几种不同组数的情况以及复杂度,都控制在140MFLOPs左右。在同样的计算复杂度限制下,分组数越多,导致输出通道数越多,这帮助网络编码更多的信息,但也会导致一些不好的作用,作者在实验小节描述了这种作用。

在本小节的最后,作者用了一个放缩通道的因子s来表示对于上表中通道的放缩,上表中代表1个单位,之后的0.5X,0.25X就是通道是上表中的一半和四分之一。

实验部分

对于超参数的设计,本文大部分的参数保持着和残差网络那篇一样,有两个例外,第一个权重衰减调小了,还用了线性衰减学习率;第二个就是在数据处理中较少的使用尺寸规模扩大。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值