文章目录
- 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%左右!
3 轻量化网络四条实用性指导原则(Guidelines)
- 卷积层的输入和输出特征通道数相等时MAC最小,此时模型速度最快;
- 2、过量使用分组卷积会增加MAC;
- 网络碎片化会降低并行度;
- 不能忽略元素级操作,比如ReLU、AddTensor,ADDBias,虽然它们的FLOPs较小,但是却需要较大的MAC。
作者评估了部分轻量化网络:在ShuffleNetv1的模块中,大量使用了1x1组卷积,这违背了G2原则,另外v1采用了类似ResNet中的瓶颈层(bottleneck layer),输入和输出通道数不同,这违背了G1原则。同时使用过多的组,也违背了G3原则。短路连接中存在大量的元素级Add运算,这违背了G4原则。
4 ShuffleNet
4.1 ShuffleNet Unit
根据上述的4条原则,设计一种高效而且轻量化网络的关键是,如何保持大通道数和通道数不变的情况下,即不使用过多卷积,又不过多分组。
为了改善v1的缺陷,v2版本引入了一种新的运算:channel split
。具体来说,在开始时先将输入特征图在通道维度分成两个分支:通道数分别为 和 ,在论文中 。左边分支做恒等映射,右边的分支包含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,可以调整模型的复杂度。
- 当输入图片为224,224,3时,经过一次卷积压缩+一次最大池化,此时网络的shape由224,224,3->112,112,24->56,56,24。
- 经过一次右边的ShuffleNet下采样模块后进行三次左边的ShuffleNet模块。此时网络的shape由56,56,24->28,28,116。
- 经过一次右边的ShuffleNet下采样模块后进行七次左边的ShuffleNet模块。此时网络的shape由28,28,116->14,14,232。
- 经过一次右边的ShuffleNet下采样模块后进行三次左边的ShuffleNet模块。此时网络的shape由14,14,232->7,7,464。
- 卷积到1024,此时网络的shape由7,7,464->7,7,1024。
- 全局池化后,进行全连接,用于预测。