date: 2020/04/19

빙 고(Bingo) - 乌龟组合:这节奏有点欢乐…


介绍一下旷视Face++的ShuffleNet,跟MobileNet一样都是出色的轻量化网络,其最大的特色在于使用通道混洗(ChannelShuffle)技术加强群卷积的组间信息流通。


ShuffleNet-v1

论文:《ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices (CVPR2018)

借鉴 Xception的深度可分离卷积 、 ResNeXt的分组卷积 ,并提出通道混洗技术来加强分组卷积的组间信息流通,从而构建出ShuffleNet-v1网络。


通道混洗(Channel Shuffle)

作者观察到分组卷积在使用时切断了组与组之间的信息流通,提出用通道混洗技术来解决该问题。

image.png

  1. 如a所示,使用分组卷积时,不同组之间是互不相关的,这将阻断组与组之间的信息流通;
  2. 如b所示,直观点的思路是将每一组的通道进一步成若干小块,分别送往下一个分组卷积的不同组中;
  3. 如c所示,b在实现上比较麻烦,作者提出可以直接对特征图进行通道上的混洗,达到相同的目的,而不需要额外改造卷积的实现


ShuffleUnit-v1

image.png

  1. a将深度可分离卷积应用到了ResNet的BottleNeck上
  2. b在a的基础上将1x1卷积进一步改为分组卷积以降低参数量和计算量
    1. 第一个1x1GConv之后使用通道混洗,解决通道间信息流通的问题
    2. 第二个1x1GConv之后则不使用通道混洗,实验结果表明此处使用通道混洗没有带来提升
  1. c是下采样的BottleNeck,与ResNet下采样不同的是,ShuffleNet Unit-v1将两分支的结果拼接起来,而不是1x1卷积上扩增通道来实现通道数的倍增


整体设计

image.png


ShuffleNet-v2

论文:《ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design (ECCV2018)

访存(Memory Access Cost, MAC)影响网络预测速度的重要因素,因此FLOPS并不能很好反映模型的预测速度。作者通过设计benchmark实验,提出了四条设计高效网络的原则,基于这四条原则,提出了ShuffleNet-v2网络。


image.png

(MobileNetv2和ShuffleNetv1网络中各OP占用的时间)

  1. 网络预测的主要时间都耗费在卷积计算上
  2. 在GPU上,数据的读取和预处理占了很大一块时间
  3. 直觉上Elemwise开销很小(甚至我们计算FLOPS都不考虑它的影响),但事实并非如此
  4. 通道混洗Channel Shuffle在时间上的开销是很小的


访存友好的四条原则

以下实验主要通过控制通道数量,控制FLOPS尽量保持不变。


  1. 减小输入、输出通道数的差距,最好能保持一致
    image.png
  2. 减小分组卷积的组数,尤其是在GPU上
    image.png
  3. 减少分支数量,适当减小深度
    image.png
  4. 减小逐元素相加(elewise+)的使用
    image.png


ShuffleUnit-v2

image.png

a.v1 block;    b.v1 downsample;    c.v2 block;    d.v2 downsample


  1. 对于BasicBlock
    1. 入口处按通道切片(通常是对半分),只有一部分进入残差路径,另一部分直接送上短连接路径
    2. 残差路径的通道数已经足够小了,所以不再使用1x1的分组卷积;由于没有分组卷积,相应的通道混洗操作也可以取消;同时三个卷积的输入输出通道数都保持相等(原则1、2)
    3. 残差路径和短连接路径采用拼接的形式融合,而非逐元素相加;同时应用通道混洗,将两路径上的特征图混合起来,加强两组特征图间的信息流通(原则4)
  1. 对于Downsample
    1. 入口处不再切片,以保证后续拼接时能直接倍增通道数,而不需要通过卷积来完成通道扩增(原则1)
    2. 短连接路径不再直接用平均池化做下采样,而是使用一组深度可分离卷积


整体设计

image.png


实验结果

image.png

(ImageNet上的实验结果)