ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices--Xiangyu Zhang

要解决的问题:
深度可分离卷积等使用1x1卷积的方法能大大降低计算量,但是1x1卷积如下图左,也需要大量的计算,而且一般会大量使用到1x1卷积,所以如果能改善1x1卷积的计算量问题,就可以进一步提高轻量化。
在这里插入图片描述
解决方式:
对于1x1卷积使用分组卷积实现,如上图右所示,这样就能够大大降低计算量。但是这也有一个缺点,就是分组后只能在组内卷积交流,比如红绿黄三个分组,组间没有信息交流,这回降低网络表征能力。所以本文提出一个新的操作通道混洗(Channel Shuffle):将每个组再次分组并分别插入到下一层的各个组中,从而实现通道间交流。

总之就是:1)使用分组卷积改善1x1卷积的计算量;2)使用Channel Shuffle克服分组卷积的通道信息闭塞问题。从而实现了高效且轻量的ShuffleNet。

0、摘要

我们设计了一种针对有限算力(比如10~150MFLOPs)的移动设备的高效网络:ShuffleNet。

该网络使用两种新的操作:pointwise group convolution(点组卷积)和channel shuffle(通道混洗)。

我们再ImageNet分类任务和MS COCO目标叫测任务上实验并展示超越其他结构的表现。在ImageNet分类任务上比MobileNet更低的top1错误率(absolute 7.8%)。

在基于ARM的移动设备上,在相当的精度下,ShuffleNet实现了比AlexNet快13倍的速度。

1、引入

目标
本文与其他追逐更大更强的网络不同,我们追求在非常有限的计算预算(10或者100MFLOPs,比如普通移动平台:drones,robots,smartphones)条件下,追求最好的精度。

存在的问题
我们注意到,想SOTA的Xception和ResNeXt在极端小型的网络时会变得非常低效,这是因为开销特别大且使用密集的1x1卷积。

解决方法
我们提出使用pointwise group convolution去减少1x1卷积的计算复杂度。

但是pointwise group convolution存在副作用:只在各自对应的通道进行卷积,阻碍了通道间的交流。为了克服这一缺点,我们提出一种新颖的channel shuffle操作,去帮助信息流在通道间交流。

基于这两个技术,我们构建了高效的ShuffleNet网络,我们的ShuffleNet允许更多的特征图通道,帮助解码更多信息,这对于超小网络的性能极为关键。

表现
我们在ImageNet分类任务和MSCOCO目标检测上验证我们模型的效果。
与SOTA模型MobileNet相比,ShuffleNet实现了相当大的优势,比如在ImageNet上更低的7.8%的top1误差率(在40MFLOPs级别)

我们还研究了在实际硬件上的加速比,即基于ARM的现成计算核心。与Alexnet相比,ShuffleNet模型获得了∼13倍的实际加速比(理论加速比为18倍),同时保持了相当的精度

2、相关工作

高效模型设计
在嵌入式设备上运行高质量的深度神经网络的需求日益增长,这鼓励了对高效模型设计的研究。比如:

  • GoogleNet:与简单地堆叠卷积层相比,GoogLeNet以低得多的复杂性增加了网络的深度
  • SqueezeNet:在保持精度的同时显著减少参数量和计算量
  • ResNet:使用高效bottleneck结构实现了显著的表现
  • SeNet:通过很小的计算成本提升了性能

Group Convolution
组卷积在ResNeXt中已经很好地证明了它的有效性。最近,MobileNet利用了深度可分离卷积,在轻量级模型中获得了最先进的结果。我们的工作以一种新的形式推广了群卷积和深度可分卷积。

Channel Shuffle Operation
据我们所知,虽然CNN库Cuda-ConvNet支持随机稀疏卷积,但在以往的高效模型设计工作中很少提到信道洗牌操作的概念,这相当于在随机信道洗牌之后加入一组卷积层。这种“随机洗牌”操作有不同的目的,后来很少被利用。最近,另一项同时进行的工作也采用了这种两阶段卷积的想法。然而,并没有专门研究通道洗牌本身的有效性以及它在微型模型设计中的应用。

3、方法

3.1 用于Group Convolution的Channel Shuffle

我们注意到比如最先进的Xception和ResNeXt等引入深度可分离卷积或组卷积,实现了性能和计算代价的平衡。但是都没有考虑到1x1卷积本身的复杂性,再加上他们大量使用了1x1卷积,所以再计算代价上还有改进空间。

例如再ResNeXt中,只有3x3层配了group convolutions,所以每一个residual uint中pointwise convolutions占据了93.4%的MAdds。在小网络中,昂贵的pointwise convolution会导致满足复杂性约束(理解为有计算量限制)的信道数量有限,这可能会严重影响精度。

要解决这个问题,一个直接的解决方案是应用通道稀疏连接。比如group convolution也在1x1层上。通过保证每个卷积运算只在对应的输入通道组上进行,就会大大降低计算成本(这里需要理解分组卷积的原理:分组卷积(Group Converlution))。

但是分组卷积也有缺点,该层某个通道只与上层某几个通道相关,也就是某个通道的输出只来自一小部分的输入通道,这阻碍了通道组之间的信息交流。
在这里插入图片描述
比如图1的(a),不同颜色代表不同的分组,分组卷积就是组内卷积,可以看到feature层的没有参杂绿色和蓝色等其他通道组,这就相当于各自管各自的,导致了通道组之间信息的闭塞

如果我们允许分组卷积来获取不同组的输入数据,比如图1的(b),那么输出和输入通道就完全相关了。具体操作为将每一个通道组(同一种颜色为同一个通道组)再次划分为若干了子组,然后将不同子组feed到下一层的每一组中。比如有红绿蓝三个通道组,则将红通道组再次分成3个子组,分别feed到下一层的三个通道组。这种shuffle操作可以通过Channel Shuffle高效优雅地实现,如图1地(c)。

Channel Shuffle使得构建堆叠分组卷积层成为可能。

3.2 ShuffleNet Uint

上面介绍了本文提出地骚操作,现在将他们打包成小块Uint,用来方便构建整体网络。
在这里插入图片描述
在图2中,a是我们的基础uint,我们将在这个基础上设计出ShuffleNet uint。

在a中,这是一个典型的深度可分离卷积(多了一个1x1卷积,应该是升维/降维作用)+残差连接。

在b中,我们使用分组卷积代替1x1卷积(让输出通道从跨上层全部通道变为跨上层局部组通道),降低1x1卷积的开销,同时加入Channel Shuffle实现跨通道信息交流。

c结构和b结构都是ShuffleNet uint,只不过结构b需要stride=1时使用,结构c需要stride=2时使用。
与b相比,只做了两个修改(再加上stride=2):

  1. 增加了3x3的avgpooling
    2)改Add为Concat,扩充通道数(与InceptionV2中所说的网格减小,通道增加相契合)

3.3 网络框架

ShuffleNet网络结构如表1所示。该网络主要由一堆shufflenet uint组成,主要分为三个阶段的ShuffleNet uint堆栈组成(Stage2、Stage3、Stage4)。每个阶段中的第一个都是stride=2的块。其他阶段的其他超参数不变,并且下一个Stage的输出通道加倍。
在这里插入图片描述
在ShuffleNet uint中,组数g控制点卷积的连接稀疏性。表1探索了不同的组数,我们调整了输出通道,以确保总体计算成本大致不变。显然在给定的复杂性约束下,加大的组数会导致更多的输出通道(因为可能使用1x1卷积的输入32通道输出64通道和使用分组卷积的输入32通道输出128通道的计算量相当,所以使用分组卷积且组数越多会产生更多的通道)。

为了将网络制定为所需要的复杂度,可以简单在通道数量上应用一个比例因子s。例如,我们将表1中的网络表示为ShuffleNet 1X,那么ShuffleNet sX表示将ShuffleNet中卷积核数量(通道数)乘以s倍,因此总体复杂度大约是ShuffleNet 1X的s平方倍(注意:后面实验对比网络会涉及到ShuffleNet sX的概念)

4、实验

我们主要在ImageNet 2012分类数据集上评估模型。

4.1 消融实验

4.1.1 Pointwise Group Convolutions

为了评估Pointwise Group Convolutions的重要性,我们比较了具有相同复杂度的但分组凑够1~8的ShuffleNet模型。如果组数=1那就不涉及Pointwise Group Convolutions。实验结果见表2
在这里插入图片描述
我们可以看出:

  • 分组总比不分组(g=1)好
  • 模型越小,由分组获得的增益越大
  • 但是ShuffleNet 0.5X的当g=8时表现更差了

对于模型越小,由分组获得的增益越大我们认为对于给定的复杂性约束,组卷积允许更多的特征图,所以假设性能的提高来自更宽(通道数)的特征图,而更小的网络包含更薄的特征图,所以分组后通道拓宽后增益更多(相当于都是增加5RMB,你越穷则收益率越高)。

对于ShuffleNet 0.5X的当g=8时表现更差了,作者认为是分组太多,输出通道和上层的跨通道联系更少,可能会损害其表示能力(也就是之前和上层所有特征都打招呼,现在只能和上层几个打招呼)
结合ShuffleNet 0.25x组数越多约效果越好(ShuffleNet 1x不说了,g=4和g=8一丢丢差别,可以说没长进)表明更宽的特征图会给更小的模型带来更多的好处

4.1.2 Channel Shuffle vs. No Shuffle

混洗操作的目的是实现多个组卷积层的跨组信息流。表3比较了有/无信道混洗的ShuffleNet结构(例如,组号被设置为3或8)的性能。这些评价是在三种不同的复杂程度下进行的。显然,频道混洗持续提高不同设置的分类分数。特别是,当组数相对较大时(例如g=8),通道混洗模型的性能明显优于对应的模型,这表明了跨组信息交换的重要性。
在这里插入图片描述

4.2 和其他结构单元的比较

本文提出了ShuffleNet Uint,作者还在保持ShuffleNet结构时,用不同的比如VGG、GoogleNet、ResNeXt和Xception的典型单元来代替换ShuffleNet Uint,实现与其他网络的公平对比。

在ShuffleNet上采用表1所示的结构,将Stage2~4的ShuffleNet uint替换为其他结构,然后调整通道数以确保复杂性保持不变:

  • VGG-like:我们使用两层3x3卷积作为基本构造块,与原始不同我们每个卷积后增加了BN层,使得端到端训练更容易
  • ResNet:我们采用bottleneck,瓶颈比1:4
  • Xception-like:文献[3]中提出的原始结构涉及不同阶段的花式设计或超参数,我们发现很难在小模型上进行公平比较。相反,我们从ShuffleNet(也等价于g=1的ShuffleNet)中删除了逐点群卷积和信道混洗操作。这种派生结构与[3]中的“深度可分离卷积”的思想相同,在这里称为类异常态结构。
  • RexNeXt:我们使用[40]中建议的基数=16和瓶颈比=1:2的设置。我们还探索了其他设置,例如瓶颈比=1:4,并得到了类似的结果。

我们使用完全相同的设置来训练这些模型。结果如表4所示。在不同的复杂性下,我们ShuffleNet的表现远远超过大多数其他模型。有趣的是,我们发现特征通道和分类精度之间存在着经验关系。
例如,在38 MFLOPs的复杂性。Stage4的输出通道,在VGGlike、ResNet、ResNeXt、Xception-like、ShuffleNet中分别是50、192、192、288、576。
所以由于ShuffleNet的高效设计,我们可以在给定的计算预算中使用更多的通道,因此通常可以获得更好的性能。
在这里插入图片描述

4.3 和MobileNet以及其他模型比较

4.2是否典型网络比较,这里是和同为轻量级的网络比较。
图5展示和MobileNet的比较,很明显ShuffleNet是优于所有MobileNet的,虽然ShuffleNet是专门为小型模型(<150MFPLOs)设计的,但仍然比MobileNet好
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我是一个对称矩阵

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

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

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

打赏作者

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

抵扣说明:

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

余额充值