论文笔记:ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices

论文链接:https://arxiv.org/abs/1707.01083v2

中心思想

  • 看到了在形如Xception & ResNext等网络存在大量1x1的卷积,虽然降低了参数量,但使得Latency增加,不够高效
  • 使用了point-wise group conv + channel shuffle的操作来减少1x1卷积的计算负担
  • channel shuffle是本文的最大特点,加强了特征图每个channel之间的信息流通

设计思路

  • 对于Xception, ResNext这些网络,利用了DepthWise 或者 Group Conv来权衡精度与速度
  • 但DepthWise 或者 Group Conv并没有考虑到对1x1卷积的优化,使得在整体网络中,1x1卷积占用了大部分的计算量(但其实真正对感受野提升起作用的,真正能够提升模型容量的往往是3x3的卷积)
  • 为了减缓1x1卷积的计算量,常规的做法是减少1x1卷积输入/输出的channel数,避免过重
  • 这里给出另一种直观的思路:在1x1上也加上Group Conv。但这么做会使得输出只依赖于一部分输入,如Fig 1(a)所示,从而使得channel之间的交融减少,削弱了模型(Feature Map)的表达能力
  • 如果将上一个group conv的输出结果进行重排,如Fig. 1(b)所示,比如第一个group中的每个元素,依次被重新划分到了其他group,作为下一个conv的输入,这就能够产生足够的联通
  • 刚好上述的操作可以通过reshape + transpose来实现,不需要增加任何的计算量(但其实这样也会增加latency,效率取决于具体实现,而且全局的shuffle会增加带宽)
    论文笔记:ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices_第1张图片

ShuffleNet Unit

具体将这个改进用在ResNet Block里面的设计思路如Fig2所示。

  • Fig 2(a)是一个BottleNeck形状的ResBlock(没有考虑pre-activation)
  • Fig 2(b)是将1x1 conv改成了1x1 group conv + channel shuffle,根据实验结果,去掉了第二个1x1 group conv的channel shuffle,并且仿照Xception,去掉了第二个1x1卷积的Relu
  • 对于降采样Block,修改如Fig 3©。一方面,加入了stride = 2 的avg pooling,另一方面通过concat的方式,复用输入Feature Map的channel,从而减少计算量
    论文笔记:ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices_第2张图片

整体网络结构

基于ShuffleNet Unit构造了ShuffleNet,具体结构如Tab. 1所示
论文笔记:ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices_第3张图片

  • 总共有4个stage,涉及到shuffle block的有stage 2 - 4,每个stage中第一个shuffle block stride = 2,也就是使用了Fig 3©中的结构
  • 第一个stage由于channel数比较少,为了保证模型容量,没必要使用
  • 仿照ResNet,将bottleNeck中的channel缩减到输入的1/4
  • 通过#group(group conv的分组个数,具体见:Convolution & DepthWise Conv)
  • #group越大,说明分组越多,每个组中的计算量就越低,整体计算量也越低,但这样会导致shuffle的范围不够,需要增大总的channel来弥补,可以看到其总的算力是不变的,大约在140M FLOPs左右
  • 这里用了类似MobileNet中的可扩展参数,可以根据实际算力需求,将channel数整体缩放s倍(s = 0.5或者0.25)

总结

  • 整体来看,本文结合了resnet, mobilenet, xception中的思想,外加对1x1卷积的优化,形成了shufflenet,对目前主流的轻量化网络的算力瓶颈进行了优化
  • 但这种做法虽然带有channel shuffle,可以减缓channel增大给网络算力带来的影响,但同时增大了每层带宽,并且shuffle操作也增大了系统的延时

你可能感兴趣的:(论文笔记)