论文-ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design

1、摘要

  当下神经网络架构设计主要以indirect metric,比如FLOPs,作为指导,但是direct metric,比如speed,也依赖于其他的因素,比如memory acccess cost,platform characters。因此,这篇文章不再局限于FLOPs的评估,而是在target platform上去评估直接的指标,并且通过一系列的控制实验,得出了几个高效网络设计的practical guidelines。

2、背景

  (1)Group convolution和depth-wise convolution是目前轻量化网络(Xception、MobileNet、MobileNetV2、ShuffleNet、CondenseNet等)的关键block。

  (2)为了度量计算复杂度,一个广泛使用的度量是浮点运算的数量,或FLOPs。然而,FLOPs是一个间接的衡量标准。它只是直接指标如speed、latency的一个近似反映,而不等效于它们。

    例如下图(c)所示,同等FLOPs下,速度上:ShuffleNet v2 > Xception > MobileNet v2 > ShuffleNet v1

  

    间接量度和直接量度的不一致主要来源于2个方面:访存开销和并行度。

  

  (3)第二,根据平台的不同,使用相同的FLOPs的操作可能会有不同的运行时间。比如,3*3卷积并不绝对地比1*1卷积慢9倍。

3、高效网络设计的实用指南

  G1:相等的通道宽度最小化内存访问开销(MAC) (Equal channel width minimizes memory access cost (MAC)

  文章针对1*1卷积给出了理论推导和实验验证。

  理论分析:

  1*1卷积的操作数为B=hwc1c2,其中h和w分别为feature map的高和宽,c1和c2分别为输入通道数和输出通道数,则MAC=hw(c1+c2)+c1c2,前面2项为输入和输出feature map的访存,后面一项为kernel的访存。由均值不等式可以得到:

  

  可以看出,在FLOPs一定的情况下,当c1=c2时MAC取下界。

   实验验证:

  

  

   G2:过度的组卷积会增加MAC (Excessive group convolution increases MAC

  组卷积是通过将所有channel之间的稠密卷积变为部分channel之间稀疏卷积来降低计算复杂度(FLOPs)。因此,在一定的FLOPs约束下可以有更多的通道,但增加的通道会导致更多的访存。

  理论分析:

  

  实验验证:

  

   

   G3:网络碎片化降低了并行度 (Network fragmentation reduces degree of parallelism

   GoogLeNet系列和自动生成架构,在每个网络block中广泛采用“multi-path”结构,,类似下图,大量的小操作符(这里称为“片段操作符”)被使用,而不是一些大的操作符.

  

  实验验证:

  

   

   G4:逐点运算不可忽视  (Element-wise operations are non-negligible)

   逐点运算:ReLU, AddTensor, AddBias, etc .They have small FLOPs but relatively heavy MAC. Specially, we also consider depthwise convolution as an elementwise operator as it also has a high MAC/FLOPs ratio.
   实验验证:

  

   

 4、ShuffleNet V2: an Efficient Architecture 

          

   (c)  引入channel split操作,其中C/2通道保持identity连接(遵守“G3碎片化”规则),另外C/2通道在进行1*1卷积、3*3深度卷积、1*1卷积时保持通道不变(遵守“G1通道相等”规则),而且这两个1*1卷积不再进行分组(遵守“G2过度分组”规则),这2个C/2通道最后通过concat合成C个通道,不再进行Element wise的Add操作,并且深度卷积和ReLU现在只粗在于C/2个通道中(遵守“G4逐点运算”规则)

  (d)  对于下采样block,文章没有像(c)那样做很多规则相关的说明,它其实是违反了一些规则的:首先是引入了2个分支(违反“G3碎片化”规则),然后是右边分支存在C-M/2这个升通道的1*1卷积(违反“G1通道相等”规则),当然如果C=M/2就不再违反了。

  

5、实验

   


 

原文地址:https://www.cnblogs.com/wt-seu/p/12586459.html