文章目录

  • 1 前言
  • 2 神经网络计算复杂度衡量方式
  • 2.1 FLOPS / FLOPs
  • 2.2 速度
  • 3 轻量化网络四条实用性指导原则(Guidelines)
  • 4 ShuffleNet
  • 4.1 ShuffleNet Unit
  • 4.2 ShuffleNet整体结构



     开始之前首先学习一个单词热热身:
     carefree 英[ˈkeəfriː]
     adj. 无忧无虑的; 无牵挂的; 不负责任的;


判断深度学习网络轻量化的标准_深度学习


1 前言

论文链接:https://arxiv.org/abs/1807.11164v1     
     ShuffleNet V2是2018年提出的,它是对于ShuffleNet V1的改进,主要的创新点是提出了4条轻量化的原则,并基于此4条原则提出了ShuffleNet V2网络结构。

      目前大部分的轻量级模型在对比模型速度时用的指标是FLOPs,这个指标主要衡量的就是卷积层的乘法操作。但是实际运用中会发现,同一个FLOPs的网络运算速度却不同,只用FLOPs去衡量的话并不能完全代表模型速度。FLOPs可以间接度量神经网络的计算复杂度,而神经网络速度的直接度量取决于MAC(memory access cost, 内存使用量)和硬件性能。
     
     “We note that the FLOPs metric only account for the convolution part. Although this part consumes most time, the other operations including data I/O, data shuffle and element-wise operations(AddTensor, ReLU, etc) also occupy considerable amount of time. Therefor, FLOPs is not an accurate enough estimation of actual time.”


2 神经网络计算复杂度衡量方式

     在衡量计算复杂度时,通常使用的是FLOPs,但FLOPs是一个间接衡量的指标,它是一种近似但不等价于直接衡量指标。在实际中,我们所关心的是速度或者延时,而这些才是直接衡量的指标。因此,使用FLOPs作为唯一衡量计算复杂度的指标,是不充分的,而且容易导致次优的网络设计。

2.1 FLOPS / FLOPs

FLOPS(floating point operations per second): 大写S,指每秒浮点运算次数,理解为计算的速度。是衡量硬件性能的一个指标。(硬件)

FLOPs(floating point operations): 小写s,指浮点运算数,理解为计算量。可以用来衡量算法/模型的复杂度。(模型)

      在论文中常用GFLOPs(1 GFLOPs = 109 FLOPs)

2.2 速度

下图为不同网络的不同操作在不同硬件上的运行时间占比图。
     可以看到,在GPU上运行的模型,其卷积运行时间仅仅占总运行时间的一半左右,而在ARM上运行的模型,其卷积运行时间达到了90%左右!


判断深度学习网络轻量化的标准_机器学习_02


3 轻量化网络四条实用性指导原则(Guidelines)

  1. 卷积层的输入和输出特征通道数相等时MAC最小,此时模型速度最快;
  2. 2、过量使用分组卷积会增加MAC;
  3. 网络碎片化会降低并行度;
  4. 不能忽略元素级操作,比如ReLU、AddTensor,ADDBias,虽然它们的FLOPs较小,但是却需要较大的MAC。

     作者评估了部分轻量化网络:在ShuffleNetv1的模块中,大量使用了1x1组卷积,这违背了G2原则,另外v1采用了类似ResNet中的瓶颈层(bottleneck layer),输入和输出通道数不同,这违背了G1原则。同时使用过多的组,也违背了G3原则。短路连接中存在大量的元素级Add运算,这违背了G4原则。


4 ShuffleNet

4.1 ShuffleNet Unit

     根据上述的4条原则,设计一种高效而且轻量化网络的关键是,如何保持大通道数和通道数不变的情况下,即不使用过多卷积,又不过多分组。


判断深度学习网络轻量化的标准_判断深度学习网络轻量化的标准_03

     为了改善v1的缺陷,v2版本引入了一种新的运算:channel split。具体来说,在开始时先将输入特征图在通道维度分成两个分支:通道数分别为 判断深度学习网络轻量化的标准_卷积_04判断深度学习网络轻量化的标准_判断深度学习网络轻量化的标准_05 ,在论文中判断深度学习网络轻量化的标准_判断深度学习网络轻量化的标准_06 。左边分支做恒等映射,右边的分支包含3个连续的卷积,并且输入和输出通道相同,这符合G1;而且两个1x1卷积不再是组卷积,这符合G2;另外channel split后得到的两个分支相当于已经分成两组。两个分支的输出不再是Add元素,而是concat在一起,紧接着是对两个分支concat结果进行channle shuffle,以保证两个分支信息交流。其实concat和channel shuffle可以和下一个模块单元的channel split合成一个元素级运算,这符合原则G4。

     对于下采样模块,不再有channel split,而是每个分支都是直接copy一份输入,每个分支都有stride=2的下采样,最后concat在一起后,特征图空间大小减半,但是通道数翻倍。

4.2 ShuffleNet整体结构

     ShuffleNetv2的整体结构如下图所示,基本与v1类似,其中设定每个block的channel数,如0.5x,1x,可以调整模型的复杂度。


判断深度学习网络轻量化的标准_卷积_07

  1. 当输入图片为224,224,3时,经过一次卷积压缩+一次最大池化,此时网络的shape由224,224,3->112,112,24->56,56,24。
  2. 经过一次右边的ShuffleNet下采样模块后进行三次左边的ShuffleNet模块。此时网络的shape由56,56,24->28,28,116。
  3. 经过一次右边的ShuffleNet下采样模块后进行七次左边的ShuffleNet模块。此时网络的shape由28,28,116->14,14,232。
  4. 经过一次右边的ShuffleNet下采样模块后进行三次左边的ShuffleNet模块。此时网络的shape由14,14,232->7,7,464。
  5. 卷积到1024,此时网络的shape由7,7,464->7,7,1024。
  6. 全局池化后,进行全连接,用于预测。