ShuffleNet:轻量化网络

1. ShuffleNet V1

ShuffleNet V1是由旷视科技在2017年底为移动设备打造的轻量级卷积神经网络。其创新之处在于采用了组卷积(Group Convolution)和通道打散(Channel Shuffle)的方法,保证网络准确率的同时,大幅度降低了所需的计算资源。

论文地址:https://arxiv.org/pdf/1707.01083.pdf

视频讲解:https://www.aideeplearning.cn/mcv_lesson/973/

1.1 组卷积

首先将组卷积、普通卷积和深度可分离卷积进行比较,普通卷积如图1所示,为方便理解,图中只有一个卷积核,此时输入输出数据为:

(1)输入数据尺寸:W×H×C,分别对应的宽、高、通道数。

(2)单个卷积核尺寸:k×k×C,分别对应单个卷积核的宽、高、通道数。

(3)输出特征图尺寸:W‘×H’,输出通道数等于卷积核数量,输出的宽和高与卷积步长有关,这里不关心这两个值。

(4)参数量:k×k×C

(5)运算量:k×k×C×W‘×H’(只考虑浮点乘数量,不考虑浮点加)。

image

图1 常规卷积

组卷积的组数是一个可以任意调整的超参数。对于图1中的卷积输入特征图,可以将其分成两组,同时也将卷积核相应地分成两组。接下来,在每个组内进行卷积操作,分组卷积的示意图如图2所示。图中分组数为2,即图片上方的一组输入数据只和上方的一组卷积核做卷积,下方的一组输入数据只和下方的一组卷积核做卷积。每组卷积都生成一个特征图,共生成2个特征图,此时输入输出数据为:

(1)每组输入数据尺寸:W×H×C/g,分别对应的宽、高、通道数,共有g组(图2中g=2)。

(2)单个卷积核尺寸:k×k×C/g,分别对应单个卷积核的宽、高、通道数,一个卷积核被分成g组。

(3)输出特征图尺寸:W‘×H’×g,共生成g个特征图。

(4)参数量:k×k×C/g×g=k2×C

(5)运算量:k×k×C/g×W‘×H’×g=k2×C×W‘×H’

image

图2 组卷积

组卷积的参数量和计算量与常规卷积相同,但组卷积得到了相对于常规卷积g倍的特征图数量。所以组卷积常用在轻量型高效网络中,因为它用少量的参数量和运算量就能生成大量的特征图,而大量的特征图意味着能提取更多的信息。

从分组卷积的角度来看,分组数g就像一个控制旋钮,最小值是1,此时的卷积就是常规卷积;最大值是输入数据的通道数,此时的卷积就是逐通道卷积。

逐层卷积是一种特殊形式的分组卷积,其分组数等于输入数据的通道数。这种卷积形式是最高效的卷积形式,相比普通卷积,使用同等的参数量和运算量就能够生成与输入通道数相等的特征图,而普通卷积只能生成一个特征图。逐层卷积过程如图3所示。

image

图3 逐层卷积

因此,深度分离卷积几乎是构造轻量高效模型的必备结构,如Xception、MobileNet、MobileNet V2、ShuffleNet、ShuffleNet V2和CondenseNet等。

1.2 通道打散操作

就上述组卷积而言,一个显而易见的问题是在卷积过程中只有该组内的特征图进行融合,而不同组别之间缺乏计算。长此以往,不同组内的特征图对于其他组的特征了解就越来越少,虽然网络顶层的全连接层会帮助不同特征图相互连接,但是这样的连接融合的次数较少,不如常规卷积的情况。

基于上述情况,作者提出把每个组的特征图经过组卷积计算之后,对结果进行一定程度的乱序排列,然后再送入下一层组卷积,以这样的方式增加特征图在不同组间的信息交互,过程如图4所示。

正常的组卷积模式如图4(a)所示,不同分组几乎没有信息交流;通道打散方式如图4(b)和(c)所示。

image

图4 通道打散操作示意图

1.3 ShuffleNet模块

整个ShuffleNet模块如图5所示,MobileNet系列网络中的DWConv模块如图5(a)所示,通道打散模块如图5(b)和(c)所示。

3×3卷积的步长等于1时使用的模块如图5(b)所示,与DWConv非常相似,只是为了进一步减少参数量,将卷积核尺寸为1×1的卷积优化成1×1组卷积,而且添加通道打散来确保不同组之间的信息交互。

3×3卷积的步长等于2时使用的模块如图5(c)所示,步长等于2可以使得输出特征图尺寸减半,通道维度增加为原先的2倍,为了保证最后能在通道维度上拼接特征图,需要保证两个分支的输出特征图尺寸相同,因此,在捷径分支上添加步长为2的3×3全局池化。

image

图5 ShuffleNet模块

1.4 ShuffleNet V1模型结构

ShuffleNet V1模型结构的详细参数见表1。其中stride表示步长,不同步长对应不同的通道打散模块;Repeat表示重复次数,例如Stage3的意思是重复步长为2的通道打散模块一次,重复步长为1的通道打散模块单元7次。

1 ShuffleNet模型结构

image

论文中以每秒浮点运算次数(FLOPs)作为衡量标准,从表1的最后一行可以看到,随着分组的增加,最终的复杂度相应地减少,这和作者对于组卷积操作的期望相同。ShuffleNet模型和其他模型的准确率比较见表2。

2模型准确率对比

image

除了标准网络,作者也按照MobileNet V1的思路,对网络设置了一个缩放网络大小的超参数s,通过相乘对特征通道数量进行缩放,例如s=1,即标准的网络结构;s=0.5表明每个Stage的输出和输入通道数都为上图中通道数的一半。具体通道数见表3。

3 ShuffleNet模型规模

image

ShuffleNet不同模型大小下的实验精度见表4。

4 ShuffleNet模型实验数据

image

1.5 ShuffleNet V1小结

ShuffleNet V1是一种轻量级的深度学习卷积神经网络架构,由中国的团队于2017年提出。它旨在为移动设备和嵌入式系统提供高性能、低计算复杂性和低参数数量的解决方案。ShuffleNet V1的主要特点如下:

(1)分组卷积:ShuffleNet V1采用了分组卷积的策略,将输入通道分成多个组,每个组内的通道之间进行卷积。这种方法相较于传统卷积能显著减少计算量和参数数量。

(2)通道打散:为了增强组内卷积的表达能力,ShuffleNet V1引入了通道打散操作。通过在组之间重新分配通道,该操作确保不同组的信息能够相互交流,从而提高模型性能。

(3)调整网络宽度:ShuffleNet V1使用通道数乘子这一超参数来调整网络的宽度。用户可以根据设备性能和应用场景选择合适的参数,权衡模型精度和速度。

(4)高效性能:ShuffleNet V1在保持轻量化、低延迟和低计算资源占用的同时,具有良好的性能。它适用于多种计算机视觉任务,如图像分类、物体检测和语义分割等。

总之,ShuffleNet V1是一种高效、轻量级的深度学习模型,适用于移动设备和嵌入式系统。其主要特点包括采用分组卷积策略、通道打散操作、调整网络宽度的超参数,以及在多种计算机视觉任务中展现出高效性能。

2. ShuffleNet V2

2.1 ShuffleNet V2模型设计动机

研究发现,FLOPs这个通常用来衡量计算复杂度的指标,并不能准确地反映出网络的速度。实际上,即使两个网络的FLOPs相似,它们的速度也可能会有很大的差别。因此,不能仅仅以FLOPs作为衡量计算速度的指标,还需要考虑内存访问消耗以及GPU并行计算等其他因素。基于上述发现,论文提出了轻量级网络设计的四个要点,并根据这些设计要点提出ShuffleNet V2。

论文地址:https://arxiv.org/pdf/1807.11164.pdf

2.2 轻量级网络设计的4个经验总结

1.G1: Equal Channel Width Minimizes Memory Access Cost (MAC)

G1的是解释是:在FLOPs相同的情况下,当卷积的输入和输出通道数相同的时候,将最小化内存访问成本,输入/输出通道数(c1和c2)的四种不同比率测试结果见表5,而四种比率下的总FLOPs通过改变通道数来固定。输入图像大小为56×56。当输入和输出的通道数量一致时,每秒处理的照片数量最多。

5 相等的通道宽度下最小化内存访问成本

image

2.G2: Excessive Group Convolution Increases MAC

G2的解释是:在FLOPs相同的情况下,过多的分组卷积会加大内存访问成本,测试结果见表6,过多的分组会导致计算速度急速下降,尤其是在GPU上。在一个显卡运行时,使用8个组卷积会使得速度下降4倍。

6 过多的组卷积对内存访问成本的影响

image

3.G3: Network Fragmentation Reduces Degree of Parallelism

G3的解释是:在FLOPs相同的情况下,碎片操作将减小网络的平行度,从而降低计算速度。其中碎片操作指的是将一个大的卷积操作分为多个小的卷积操作进行。作者使用自己搭建了一些网络进行了验证,网络的结构如图6所示。

image

6 模块碎片化

作者在实际设备上进行对比实验,在固定FLOPs情况下,分别比较串行和并行分支结构的性能。结果见表7,一个有趣的现象,即我们认为可能增加并行度的并行结构,结果居然是降低了计算速度。不过,由于下一个经验提到元素级的操作对计算速度也有一定影响,因此不能下定论是因为平行结构还是最后的相加操作降低了计算速度。

7 模块碎片化的影响

image

4.G4: Element-wise Operations Are Non-negligible

G4的解释是不要忽略元素级操作,元素级操作指的就是ReLU、TensorAdd、BiasAdd等矩阵的元素级操作。可以推测出这些操作其实基本没有被计算在FLOPs中,但是对于内存访问成本这个参数的影响确实比较大。

作者为了验证这个想法,对Bottleneck这个层级进行了相应的修改,测试了是否含有Relu函数和残差连接(Short-cut)两种操作的情况,对比见表8。

8 元素级操作的影响

image

很明显,当没有这两种操作时,模型的训练速度会更快。有趣的是:相比使用ReLU函数,移除跳远结构对于训练速度的提升更为显著。这可以理解为ReLU函数只是对一个张量进行操作,而残差连接是对两个张量进行的操作。

image

图7 各具体操作的时间占用

作者还分析了MobileNet和ShuffleNet中具体操作的时间占用,结果如图7所示。Elemwise指激活函数、残差连接等非线性操作。可以看出其时间占用并不少,并不能像计算FLOPs那样可以被忽略。

随后作者还分析了最近的一些比较热门的网络结构:ShuffleNet V1极度依赖于分组卷积,这违反了原则G2,并且它使用类似瓶颈的构建块,这与原则G1相违背。另外,MobileNet V2 采用了一种倒置的瓶颈结构,违反了原则G1。它在“厚重”的特征图上使用深度卷积和ReLU,这违反了原则G4。

此外,通过NAS搜索技术自动生成的结构往往具有高度碎片化,这违反了G3标准。

2.3 ShuffleNet V2模型结构

首先,作者回顾了ShuffleNet V1,并指出目前一个关键问题:保持大多数卷积的输入通道数和输出通道数相等。针对这个目标,作者提出了通道分离(Channel Split)的操作,并构建出了ShuffleNet V2的单元,如图8所示。ShuffleNet V1的模块如图8(a)和(b)所示;改进后的V2版模块如图8(c)和(d)所示。

image

图8 ShuffleNet 通道分离操作

改进后优势:

ShuffleNetV2引入了一种简单的操作,称为“通道拆分”。这一操作在图8(c)中有所展示。在每个单元的开始,输入的具有c个特征通道的数据会被拆分成两个分支,每个分支具有相等的通道数量。根据原则G3,一个分支保持原样。另一个分支包含三个具有相同输入和输出通道数的卷积,以满足原则G1。与ShuffleNetV1不同,这两个1×1的卷积不再是分组卷积。这部分是为了遵循原则G2,部分原因是因为拆分操作本身已经产生了两个分组。

经过卷积之后,这两个分支会被合并。因此,通道数保持不变(满足G1)。接着,使用与ShuffleNetV1中相同的“通道洗牌”操作,以实现两个分支之间的信息交流。

洗牌操作之后,下一个单元开始。值得注意的是,ShuffleNet v1 中的“Add”操作不再存在。像ReLU和深度卷积这样的逐元素操作只存在于一个分支中。同时,三个连续的逐元素操作,“Concat”(合并)、“Channel Shuffle”(通道洗牌)和“Channel Split”(通道拆分),被合并为一个单独的逐元素操作。根据原则G4,这些更改是有益的。

最后,给出ShuffleNet V2的网络结构详细参数,见表9。

9 ShuffleNet V2 模型结构

image

2.4ShuffleNet V2小结

ShuffleNet V2是在ShuffleNet V1的基础上于2018年提出。它旨在进一步提高网络的性能和效率,适用于移动设备和嵌入式系统。ShuffleNet V2的主要特点如下:

(1)网络设计原则:ShuffleNet V2遵循了四个网络设计原则,包括平衡网络输入和输出通道的数量、减少分组卷积的冗余计算、减少网络中的网络连接瓶颈和平衡每一层的计算量。

(2)通道打散:ShuffleNet V2沿用了ShuffleNet V1的通道打散操作,使得组间通道信息能够相互交流,从而提高模型性能。

(3)轻量化单元结构:ShuffleNet V2采用了简化的轻量化单元结构,包括1×1卷积、通道打散、3×3深度可分离卷积和1×1卷积。这种设计有助于降低计算复杂性和参数数量,提高效率。

(4)调整网络宽度:与ShuffleNet V1类似,ShuffleNet V2也使用通道数乘子这一超参数来调整网络的宽度。用户可以根据设备性能和应用场景选择合适的参数,权衡模型精度和速度。

(5)更高的性能与效率:相较于ShuffleNet V1,ShuffleNet V2在保持轻量化、低延迟和低计算资源占用的基础上,进一步提高了性能和效率。这使得它在多种计算机视觉任务中表现更优。

© 版权声明
THE END
共同营造AI社区,喜欢就支持一下吧~
点赞3705 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容