计算机系统应用教程网站

网站首页 > 技术文章 正文

为什么MobileNet及其变体(例如ShuffleNet)速度很快

btikc 2024-09-18 08:31:39 技术文章 21 ℃ 0 评论

介绍

在本文中,我将概述有效的CNN模型(如MobileNet及其变体)中使用的构件块,并解释它们为什么如此高效。特别是,我提供了关于空间和通道域中的卷积如何完成的直观说明。

用于高效模型的构建块

在解释具体的高效CNN模型之前,我们先来检查高效CNN模型中使用的积木的计算成本,以及在空间和通道域中如何进行卷积。

令HxW表示输入特征映射的空间大小,N表示输入通道的数量,KxK表示卷积核的大小,M表示输出通道的数量,标准卷积的计算成本变为HWNK2M。

这里重要的一点是,标准卷积的计算成本成正比与(1)特征映射HxW的空间大小,(2)卷积核K 2的大小,(3)输入和输出通道数N×M。

当在空间域和信道域上执行卷积时,需要上述计算成本。CNN可以通过分解这个卷积来加速,如下所示。

卷积

首先,我提供了一个关于空间和通道域的卷积如何完成标准卷积的直观说明,标准卷积的计算成本为HWNK2M。

我连接输入和输出之间的连线以可视化输入和输出之间的依赖关系。行数粗略分别表示空间和信道域中卷积的计算成本。

例如,最常用的卷积conv3x3可以如上所示进行可视化。我们可以看到,输入和输出在空间域中局部连接,而在通道域中,它们完全连接。

接下来,可以看到conv1x1,或者用于改变通道大小的逐点卷积。该卷积的计算成本是HWNM,因为内核的大小为1x1,与conv3x3相比,计算成本减少了1/9。这种卷积被用于在通道之间“blend”信息。

分组卷积

分组卷积是卷积的一种变体,其中输入特征映射的通道被分组并且针对每个分组通道独立地执行卷积。

设G表示组的数量,分组卷积的计算成本为HWNK 2 M / G,与标准卷积相比,导致计算成本降低1 / G。

G = 2的分组conv3x3的情况。我们可以看到信道域中的连接数量变得比标准卷积小,这表明较小的计算成本。

以G = 3分组的conv3x3的情况。连接变得更加稀疏。

G = 2的分组conv1x1的情况。因此,conv1x1也可以分组。ShuffleNet使用这种类型的卷积。

G = 3的分组conv1x1的情况。

深度卷积

在深度卷积中,针对每个输入通道独立执行卷积。它也可以定义为分组卷积的一种特殊情况,其中输入和输出通道数相同,G等于通道数。

如上所示,深度卷积通过省略信道域中的卷积来显着降低计算成本。

Channel Shuffle

Channel shuffle是一种操作(层),它改变ShuffleNet 中使用的信道的顺序。该操作通过张量重塑和转置来实现。

更准确地说,假设GN'(= N)表示输入通道的数量,首先将输入通道维度重新整形为(G,N'),然后将(G,N')转置为(N',G),最后变成与输入相同的形状。这里,G表示用于分组卷积的组数,其与ShuffleNet中的Channel shuffle层一起使用。

尽管Channel shuffle的计算成本不能用乘加操作(MAC)的数量来定义,但应该有一些开销。

G = 2的Channel shuffle的情况。不执行卷积,只改变通道的顺序。

G = 3的Channel shuffle的情况。

高效的模型

下面,为了高效的CNN模型,我提供了直观的说明,说明它们为什么高效以及空间和通道域中的卷积是如何完成的。

ResNet(Bottleneck Version)

在ResNet中使用的具有瓶颈架构的剩余单元是进一步与其他模型进行比较的良好起点。

如上所示, 具有瓶颈体系结构的残差单元由 conv1x1、conv3x3 和 conv1x1 组成。第一个 conv1x1 减少了输入通道的尺寸, 从而降低了随后相对昂贵的 conv3x3 的计算成本。最终 conv1x1 恢复输出通道的尺寸。

ResNeXt

ResNeXt是一个高效的CNN模型,它可以看作ResNet的一个特例,其conv3x3被分组的conv3x3所取代。通过使用高效的分组转换,conv1x1中的信道减少率与ResNet相比变得适中,从而以相同的计算成本获得更好的准确性。

MobileNet(Separable Conv)

MobileNet是由深度conv和conv1x1(逐点conv)组成的可分离卷积模块的堆栈。

可分离的conv在空间域和通道域独立执行卷积。卷积分解显着降低了从HWNK2M到HWNK2(深度)+ HWNM(conv1x1),HWN(K2+ M)的计算总成本。通常,M >> K 2(例如K = 3和M≥32),缩减率大约为1 / 8-1 / 9。

这里重要的一点是计算成本的瓶颈现在是conv1x1!

ShuffleNet

ShuffleNet的动机是conv1x1是上述可分离转换的瓶颈。虽然conv1x1已经很有效率,并且似乎没有改进的余地,但可以将分组的conv1x1用于此目的!

上面的图说明了ShuffleNet的模块。这里的重要组成部分是channel shuffle层,它在分组卷积中“shuffles”组间的信道顺序。在没有channel shuffle的情况下,分组卷积的输出在组间没有被利用,导致精度的下降。

MobileNet-V2

MobileNet-v2 采用类似ResNet瓶颈架构的残差单元模块架构; 其中conv3x3被深度卷积代替的残差单元的修改版本。

从上面可以看出,与标准瓶颈架构相反,第一个conv1x1增加了信道维数,然后执行了深度转换,最后一个conv1x1降低了信道维度。

通过对上述构建块进行重新排序,并将其与MobileNet-v1(separable conv)进行比较,我们可以看到这种架构如何工作(由于MobileNet-v2是该模块的堆栈,因此这种重新排序不会改变整体模型架构)。

也就是说,上述模块被视为separable conv的修改版本,其中可separable conv中的单个conv1x1被分解为两个conv1x1。假设T表示信道维度的扩展因子,两个conv1x1的计算成本为2HWN2/ T,而可分离conv1的conv1x1的计算成本为HWN2。使用T = 6,将conv1x1的计算成本降低了3倍(一般为T / 2)。

FD-MobileNet

最后,我介绍了Fast-Downsampling MobileNet(FD-MobileNet)。在这个模型中,与MobileNet相比,缩小比例在更早的层次中执行。这个简单的技巧可以降低总计算成本。原因在于传统的下采样策略和可分离转换的计算成本。

从VGGNet开始,许多型号采用相同的下采样策略:perform downsampling,然后将后续层的通道数量加倍。对于标准卷积,降采样后的计算成本不会改变,因为它由HWNK2M定义。然而,对于可分离的conv,降采样后其计算成本变得更小; 它从HWN(K 2 + M)减小到H / 2 W / 2 2N(K 2 + 2M)= HWN(K 2/2 + M)。当M不是很大时(即更早的层),这是相对主导的。

我用下面的备忘单结束了本文,谢谢:P

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表