图像分类模型:ShuffleNet V1阅读笔记


前言

又是一个周末,前几周复习了轻量级分类模型-MobileNet系列,今天开始复习下另一类轻量级分类模型-ShuffleNet系列,至于说是复习,那是因为老早之前就已经看过了,本着复习的态度来重新学习。

论文标题:ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices


摘要(Abstract)

论文提出一种在计算能力上极其高效的卷积神经网络架构,被命名为ShuffleNet, 它是专门为这种计算能力非常受限的移动设备而设计(比如10-150 MFLOPS)。这种新的架构使用了两种新的操作,基于点的分组卷积(pointwise group convolution)和通道重组(channel shuffle),这样能够在保证准确率的同时极大的减少计算成本。论文在ImageNet分类和MS COCO目标检测数据集上进行实验,证实了ShuffleNet比其它架构更加优秀,比如在ImageNet分类任务中比MobileNet(V1) top-1错误率更低(仅有7.8%),但是它的计算成本却仅有40 MFLOPS。在一个基于ARM的移动设备上,ShuffleNet在保证相当精度的同时实现了比AlexNet快13倍的速度。

1. 介绍(Introduction)

构建更深且更大的卷积神经网络是解决主流视觉识别任务的主要趋势。大部分精确的卷积神经网络通常有上百层,上千通道,因此也就需要数十亿FLOPs的计算成本。这篇论文正相反:在非常受限的计算成本中(几十或者几百的MFLOPs)追求最优精度,集中精力在通用移动平台比如无人机,机器人以及智能手机。很多已有的工作主要集中于剪枝,压缩或者低位表示一个基本的网络架构。论文的目标在于探索一种专为预期计算范围而设计的高效基本架构。

论文注意到最优基本架构比如Xception和ResNeXt在极其小的网络里是非常低效的,这是因为大部分计算成本都花费在了 1 × 1 1\times 1 1×1卷积中。论文提出使用基于点的分组卷积来减少 1 × 1 1\times 1 1×1卷积的计算复杂性。 同时为了克服分组卷积带来的负面影响(分组通道间无法交互),论文提出了一种新颖的通道重组(channel shuffle)来实现特征通道间信息流的交互。基于这两种技术,论文构建了一个高效的架构,被叫做ShuffleNet。和流行的架构相比,在计算复杂性成本方面,ShufffleNet支持更多的特征图通道,这样能帮助编码更多的信息,这对提升小模型的性能尤其重要。

论文在Imagenet分类,MS COCO目标检测任务中进行模型评估。一系列的控制实验证实了论文设计原则的有效性以及模型性能超过了其它架构。和已有的最优模型架构MobileNet相比,ShuffleNet以较大差距实现了更好性能,比如ImageNet top-1错误率低了7.8%,同时计算成本仅有40 MFLOPs

论文也在真实硬件上进行了速度测试,比如基于ARM的计算核。ShuffleNet模型在保持相当精度的同时速度上比AlexNet模型快大约13倍


2. 相关工作(Related Work)

这部分主要从模型设计、分组卷积、通道重组、模型加速方面介绍了前人研究的成果以及存在的一些问题,引出本文的设计思路,这里就不细说了,大家感兴趣可以自行阅读。


3. 方法(Approach)

3.1 关于分组卷积的通道重组(Channel Shuffle for Group Convolutions)

在这里插入图片描述

当今的卷积神经网络通常是由具有相同结构的多个构造快组合而成。在它们中,最优网络比如Xception和ResNeXt在构造块中引入了高效的基于深度可分离可分离卷积,或者分组卷积以此来达到在模型表达能力和计算成本间的折中。然而,论文注意到这两种设计都不能完全解决 1 × 1 1\times 1 1×1卷积计算成本问题。比如,在ResNeXt中仅仅在分组卷积中使用 3 × 3 3\times 3 3×3卷积,因此,在ResNeXt的残差单元中,基于点的卷积占用了 93.4 % 93.4\% 93.4%的计算量(乘、加运算)。在小型模型中,为了适应复杂度的限制,昂贵的基于点的卷积造成了通道数量受限,进而造成精度损失。

为了解决这个问题,一个简单有效的解决方案是使用通道稀疏连接,比如在 1 × 1 1\times 1 1×1层中使用分组卷积。通过确保每一卷积仅在相关输入通道分组中进行,分组卷积极大减少了计算成本。然而,如果多个分组卷积堆叠在一起,有一个负面影响:从一个明确通道的输出仅来源于输入通道中的一部分。Fig 1(a)展示了两个堆叠分组卷积层的情景,它非常清楚的展示了:一个明确分组的输出仅和分组内的输入相关。这条性质阻碍了通道分组间信息流交互,弱化了网络的表达能力。

如果能够让分组卷积获得不同组间的输入数据,如同Fig 1(b)所示那样,那么输入与输出通道将完全相关。尤其是对于从前面的分组层生成的特征图,我们可以首先将每组中的通道划分到不同的子组中,然后将这些不同的子组输入到下一层的每一组中。这就实现了通道重组操作,如图Fig.1©所示:提出一个卷积层有 g g g个组,输出有 g × n g\times n g×n个通道;首先调整输出通道维度为 ( g , n ) (g,n) (g,n),转置然后平铺作为下一层的输入。注意,这种操作即使两个卷积有不同分组数也仍然有效。而且,通道重组也是可微的,这就意味着它可以被嵌入到端到端训练的网络结构中。

通道重组(channel shuffle)操作为构建拥有多个分组卷积层的强大的网络结构提供了基础。下一小节将介绍一个带有通道重组和分组卷积的高效网络单元。

3.2 网络单元(ShuffleNet Unit)

在这里插入图片描述

由于通道重组操作的优势,论文提出了ShuffleNet 单元,它是专为小型网络设计的。首先遵从瓶颈单元的设计原则,如图Fig.2(a)所示,它是一个残差模块。在残差分支中,对于 3 × 3 3\times 3 3×3层,论文在瓶颈特征图上使用了 3 × 3 3\times 3 3×3基于深度的卷积这一计算成本低的操作。然后,论文用基于点的分组卷积(后面紧跟一个通道重组操作)替换残差分支中第一个 1 × 1 1\times 1 1×1层,这就构成了一个ShuffleNet单元,如图Fig.2(b)所示。第二个基于点的分组卷积的目的是恢复通道维度,这样才能和shortcut路径匹配。简单起见,论文没有在第二个基于点的分组卷积层后使用通道重组操作,这样得到的分数差别不大。ShuffleNet单元中也使用了BN和ReLU,但是在基于深度的卷积(DWConv)后没有使用ReLU。对于ShuffleNet中使用stride的case,论文对ShuffleNet单元做了两点修改(如图Fig.2©)所示:(i) 在捷径路径(shortcut)上使用了 3 × 3 3\times 3 3×3平均池化;(ii) 用通道拼接方法替换了之前的基于元素累加,这样可以非常简单的实现通道维度的扩大,当然也带来了少量的计算成本。

由于带有通道重组的基于点的分组卷积,ShuffleNet单元中所有结构都可以高效运行。和ResNet,ResNeXt相比,论文的结构有相同的配置但是复杂性更低。比如,输入大小为 c × h × w c\times h\times w c×h×w,瓶颈通道为 m m m,ResNet单元需要 h w ( 2 c m + 9 m 2 ) hw(2cm+9m^{2}) hw(2cm+9m2)FLOPs, ResNeXt需要 h w ( 2 c m + 9 m 2 / g ) hw(2cm+9m^{2}/g) hw(2cm+9m2/g)FLOPs, 然而ShuffleNet单元仅需要 h w ( 2 c m / g + 9 m ) hw(2cm/g+9m) hw(2cm/g+9m)FLOPs, 这里 g g g表示卷积分组数。换句话说,在一定的计算成本下,ShuffleNet可以应用更多通道的特征图。论文发现对于小型网络,这是非常重要的,因为小型网络通常没有足够数量的通道来处理信息

另外,ShuffleNet中基于深度的卷积仅应用在瓶颈特征图上。即使基于深度的卷积通常有很低的理论复杂度,但是在低端的移动设备上实现它也是比较困难的,这主要是因为移动设备上的计算能力和内存访问率较其它稠密操作更糟糕。在ShuffleNet单元里,论文仅仅在瓶颈层使用基于深度的卷积就是为了尽可能避免这一问题。

3.3 网络架构(Network Architecture)

在这里插入图片描述
构建了ShuffleNet单元,论文提出了上面的ShuffleNet架构,如表Table.1所示。这一网络主要由3 stages的ShuffleNet单元堆叠而成。在每一stage的第一个构造块使用步长为2. 每一stage的其它超参数都相同。论文设置瓶颈通道数为每一ShuffleNet单元的输出通道的 1 / 4 1/4 1/4。这样做的目的是提供一个尽可能简单的参考设计,尽管发现微调超参数可以获得更好的结果。

在ShuffleNet单元中,分组数 g g g控制了基于点卷积的连接稀疏性。Table 1探索了不同分组数,论文调整输出通道数来保证计算成本大致不变。很明显,对于受限的计算成本,越大的分组数将带来更多的输出通道数,这样就能编码更多信息,当然,这也可能由于受限的关联输入通道的原因造成单个卷积过滤器退化。

为了让网络的复杂度符合预期,论文在通道数量上简单使用了缩放因子 s s s。比如,标记Table 1中网络为“ShuffleNet 1 × 1\times 1×”,那么“ShuffleNet s × s\times s×”意味着缩放“ShuffleNet 1 × 1\times 1×”过滤器数量的 s s s倍,因此上面模型的复杂度大致为“ShuffleNet 1 × 1\times 1×”的 s 2 s^{2} s2倍。
在这里插入图片描述

4. 实验(Experiments)

这一章节主要进行了消融研究,和其它结构单元对比(ResNet,…),和其它架构对比(MobileNet,…),泛化能力研究,以及评估推理速度研究,这里就不细说了,大家可以自行阅读,里面的参数设置等对于ShuffleNet模型复现时还是很有用的。


总结

ShuffleNet的核心技术就是基于点的分组卷积+通道重组,主要目标就是减少网络模型对计算成本的需求同时保证准确率,这也是所有轻量级网络模型的设计目标。

Guess you like

Origin blog.csdn.net/DU_YULIN/article/details/120468725