文章目录
核心:分组点卷积与通道混洗
证明分组点卷积:
设计了一个baseline,然后通过不同分组数,不同的通道数(使用在baseline上的通道作为基准,进行缩减)进行消融实验
不同分组数的情况下,错误率随着分组数越大错误率越低
不同通道率下的不同模型,压缩的越小,错误率越高
证明通道混洗:
对比了通道数是3和8的混洗和不混洗模型,混洗一直都比不混洗的错误率低
摘要
我们引入了一种计算效率极高的CNN架构,名为ShuffleNet,它是专门为计算能力非常有限的移动设备设计的(例如,10-150 MFLOPs)。新架构利用了分组点卷积和通道洗牌两种新的运算方法,在保持精度的同时大大降低了计算成本。在ImageNet分类和MS COCO目标检测方面的实验表明,在40兆字节的计算预算下,ShuffleNet在ImageNet分类任务中的top-l error(绝对7.8%)比最近的MobileNet[12]要低。在一个基于arm的移动设备上,ShuffleNet实现了~13x的实际加速超过AlexNet,同时保持相当的准确性。
介绍
1构建更深更大的卷积神经网络(CNNs)是解决主要视觉识别任务的主要趋势[21,9,33,5,28,24]。最精确的cnn通常有数百层和数千个通道[9,34,32,40],因此需要数十亿次的计算FLOPs。这份报告研究了相反的极端:在非常有限的计算预算中追求最好的准确性,在几十或几百MFLOPs,集中在普通的移动平台,如无人机,机器人,和智能手机。注意许多现有的工作[16,22,43,42]。关注裁剪、压缩或低位表示“基本”网络架构。在这里,我们的目标是探索一个高效的基本架构,专门为我们期望的计算范围设计。
2我们注意到,最先进的基本架构,如Xception[3]和ResNeXt[40],在极小的网络中效率会降低,因为昂贵的密集1 x 1卷积。我们提出使用分组点卷积减少1 x 1卷积的计算复杂度。为了克服群卷积带来的副作用,我们提出了一种新的通道洗牌操作来帮助信息在特征通道中流动。基于这两种技术,我们构建了一个名为ShuffleNet的高效架构。与[30,9,40]等流行结构相比,对于给定的计算复杂度预算,我们的ShuffleNet允许更多的feature map通道,这有助于编码更多的信息,对非常小的网络的性能尤为关键。
3我们在具有挑战性的ImageNet分类[4,29]和MS COCO目标检测[23]任务上评估我们的模型。一系列的控制实验证明了我们的设计原则的有效性,并且比其他结构有更好的性能。与最先进的体系结构MobileNet[12]相比,ShuffeNet取得了显著的优势性能,例如绝对7.8%的ower ImageNet top-1错误在40 MFLOPS水平。
4我们还研究了在真实硬件上的加速,即一个现成的基于arm的计算核心。ShuffleNet模型达到~13x实际加速(理论加速是18x)超过AlexNet[21],同时保持可比精度。
相关工作
高效模型设计:在过去几年里,我们看到了深度神经网络在计算机视觉任务中的成功[21,36,28],其中模型设计发挥了重要作用。在嵌入式设备上运行高质量的深度神经网络的需求日益增加,这鼓励了[8]高效模型设计的研究。例如,与简单地叠加卷积层相比,GoogLeNet[33]以更低的复杂度增加了网络的深度。SqueezeNet[14]在保持精度的同时显著降低了参数和计算量。ResNet[9,10]利用高效的瓶颈结构来实现令人印象深刻的性能。SENet[13]引入了一种架构单元,它可以以少量的计算成本提高性能。**[46]采用强化学习和模型搜索来探索有效的模型设计。提出的移动NASNet模型与相应的ShuffleNet模型取得了相当的性能(ImageNet分类错误分别为26.0% @ 564 MFLOPs和26.3% @ 524 MFLOPs)。但是[46]**不报告在极小模型上的结果(例如,复杂性小于150 MFLOPs),也不评估移动设备上的实际推理时间。
分组卷积:在AlexNet[21]中首次引入的用于将模型分布在两个gpu上的群卷积概念,在ResNeXt[40]中得到了很好的证明。Xception[3]中提出的深度可分卷积推广了Inception 系列中可分卷积的概念[34,32]。最近,MobileNet[12]利用深度可分离卷积,并在轻量级模型中获得了最先进的结果。我们的工作将组卷积和深度可分离卷积推广为一种新的形式。
通道打乱操作:据我们所知,虽然CNN库cuda-convnet[20]支持“随机稀疏卷积”层,但在之前高效模型设计的工作中很少提及channel Shuffle操作的思想,这相当于随机channel Shuffle后再加上一组卷积层。这种“随机洗牌”操作有不同的目的,以后很少有人利用。最近,另一项并行工作41]也采用了这种思想来进行两阶段卷积。然而,[41]并没有专门研究通道洗牌本身的有效性及其在微型模型设计中的应用。
模型加速:该方向的目的是在保持预训练模型精度的同时,加快推理速度。精简网络连接[6,71或通道[38]]在保持性能的同时减少了预先训练的模型中的冗余连接。文献中提出了量化[31,27,39,45,44]和因式分解[22,16,18,37]来减少计算中的冗余以加速惯性。在不修改参数的情况下,FFT[25,35]和其他[2]方法实现的优化卷积算法在实践中减少了时间消耗。[11]的浓缩将知识从大型模型转移到小型模型中,这使得训练小型模型更加容易。
图1所示。通道洗牌与两个堆叠组卷积。GConv代表分组卷积。a)两个堆叠的具有相同组数的卷积层。每个输出通道只与组内的输入通道相关。没有互相交流;b) GConv2在GConv1之后对不同组的数据进行采集时,输入和输出通道完全关联;c)与b)使用通道洗牌的等效实现。
方法
分组卷积的通道重排
1现代卷积神经网络[30,33,34,32,9,10]通常由具有相同结构的重复构件组成。其中,最先进的网络如Xception[3]和ResNeXt[40]在构建块中引入了高效的深度可分卷积或组卷积,在表示能力和计算代价之间实现了良好的平衡。然而,我们注意到两种设计都没有完全考虑到1 x 1卷积(在[121中也称为点态卷积),这需要相当的复杂性。例如,在ResNeXt[40]中,只有3 x 3层配备了群卷积。因此,对于ResNeXt中的每个residual单元,点态卷积占用93.4%的乘加(cardinality= 32,如[40]中所示)。在小网络中,代价昂贵的点卷积导致满足复杂度约束的通道数量有限,这可能会严重损害精度。
2要解决这个问题,为了解决这个问题,一个直接的解决方案是应用通道稀疏连接,例如组卷积,也在1×1层上。通过保证每个卷积运算只在对应的输入通道组上进行,组卷积大大降低了计算成本。但是,如果多个组卷积叠加在一起,就会产生一个副作用:某个通道的输出只来自一小部分输入通道。图1 (a)示出了两个堆叠群卷积层的情况。很明显,某个组的输出只与组内的输入相关。这个属性阻塞了通道组之间的信息流,削弱了表示。
3如果我们允许组卷积来获取不同组的输入数据(如图1 (b)所示),那么输入和输出通道就完全相关了。具体来说,对于上一层组生成的feature map,我们可以先将每一组中的通道划分为若干个子组,然后再将不同的子组feed到下一层的每一组中。这可以通过channel shufle操作高效而优雅地实现(图1 ©):假设一个卷积层有g组,其输出有g x n个通道;我们首先将输出通道的维度重塑为(g, n),对其进行置换,然后将其压平,作为下一层的输入。注意,即使两个卷积具有不同数量的组,该操作仍然有效。此外,通道洗牌也是可微的,这意味着它可以嵌入到网络结构中进行端到端训练。
4通道洗牌操作使得构建具有多组卷积层的更强大的结构成为可能。在下一小节中,我们将介绍一个具有通道洗牌和群卷积的高效网络单元。
shufflenet unit
1利用通道洗牌操作的优点,提出了一种新的 shufflenet unit,专门为小网络设计。我们从图2 (a)中瓶颈单元[9]的设计原理出发,这是一个残块。在其残差分支中,对于3×3层,我们在瓶颈特征图上应用了计算经济的3×3深度卷积[3]。然后,我们用分组点卷积代替前1 x 1层,然后进行通道洗牌操作,形成一个洗牌网络单元,如图2 (b)所示。第二次分组点卷积的目的是恢复与捷径匹配的通道维数。为简单起见,我们没有在第二个点态层之后应用额外的通道洗牌操作,因为它会导致可比较的分数。使用批处理规范化(BN)[15]和非线性类似于40[9],除了我们不使用ReLU切除后卷积在[3]的情况ShuffleNet应用步伐,我们只是让两个修改(见图2 ©): (i)添加一个3 x 3平均池快捷方式路径;(ii)将元素添加(add)改为通道连接(cat),便于扩大通道尺寸,额外的计算成本很少。
2通过对通道洗牌的分组点卷积,可以有效地计算洗牌网络中所有的分量。与ResNet9和ResNeXt[40]相比,在相同的设置下,我们的结构更简单。例如,给定输入大小cx h x w和瓶颈通道m, ResNet单元需要hw(2cm + 9m的平方) FLOPs, ResNeXt有hw(2cm + 9m的平方/g),而我们的ShuffleNet单元只需要hw(2cm/g + 9m) FLOPs,其中g表示用于卷积的组数。(这里先计算一组的计算量,再计算g组的计算量,因此消掉了分母的g)换句话说,给定一个计算预算,ShuffleNet可以使用更广泛的特征图。我们发现这对小型网络来说非常重要,因为小型网络通常没有足够的通道来处理信息。
4弊端:另外,在ShuffleNet中,深度卷积只在瓶颈特征图上执行。虽然深度卷积通常具有很低的理论复杂度,但我们发现它很难在低功耗的移动设备上有效地实现,这可能会导致较其他密集操作更差的计算/内存访问比率。在[3]中也提到了这种缺点,它有一个基于TensorFlow[1]的运行时库。在ShuffleNet单元中,为了尽可能避免开销,我们故意只在瓶颈上使用深度卷积。
网络框架
1基于ShuffleNet单元,我们在表1中给出了整个ShuffleNet架构。该网络主要由一堆shufflenet unit组成,分为三个阶段。每个阶段的第一个构建块应用stride = 2。其他阶段的其他超参数保持不变,并且在下一阶段,输出通道加倍。与[9]类似,我们将每个ShuffleNet unit的瓶颈通道数量设置为输出通道的1/4。我们的目的是提供一个尽可能简单的参考设计,尽管我们发现进一步的超参数调优可能会产生更好的结果。
2在shufflenet unit中,组数g控制点态卷积的连接稀疏性。表1探索了不同的组数,我们调整了输出通道,以确保总体计算成本大致不变(~140 MFLOPs)。显然,对于给定的复杂性约束,较大的组数会导致更多的输出通道(从而产生更多的卷积滤波器),这有助于编码更多的信息,尽管它也可能会导致单个卷积滤波器由于相应的输入通道有限而退化。在第4.1.1节中,我们将研究这个数字对不同计算约束的影响。
3要将网络定制为所需的复杂度,我们可以简单地在通道数量上应用一个比例因子s。例如,我们将表1中的网络表示为“ShuffleNet 1x”。那么,“ShuffleNet sx”意味着将ShuffleNet中的卷积核数量乘以s倍,因此总体复杂度大约是ShuffleNet 1x的s平方倍。
(设置一个baseline为1×)
图2。ShuffleNet单位。a)采用深度卷积(DWConv)的瓶颈单元[9][3,12];b)点态群卷积(GConv)和信道洗牌的洗牌网络单元;移动单位步幅=2。
实验
我们主要在ImageNet 2012分类数据集上评估我们的模型[29,4]。我们遵循了大多数[40]中使用的训练设置和超参数,但有两个例外:(i)我们将权值衰减设置为4e-5,而不是1e-4和使用线性衰减学习率策略(从0.5降到0);(ii)我们使用稍微不那么咄咄逼人的比例增强来进行数据预处理。类似的修改也在[12]中被提及,因为这样的小网络通常会出现欠拟合而不是过拟合。在4个gpu上训练一个模型3x 10的5次方次迭代需要1 - 2天,其批处理大小设置为1024。在基准测试中,我们比较了在ImageNet验证集上单次裁剪top-1的性能,即从256x输入图像裁剪224 x 224中心视图并评估分类精度。我们对所有模型使用完全相同的设置,以确保公平的比较。
消融实验
分组点卷积与通道打乱
1分组点卷积
使用分组数为1-8的相同复杂度的模型分组数是1的话就是没分组,类似xception-like结构。为了更好地理解,我们还将网络的宽度缩放为3种不同的复杂性,并分别比较它们的分类性能。结果如表2所示。
从结果中,我们看到,具有组卷积的模型(g > 1)始终比没有点态组卷积的模型(g = 1)表现得更好。(从右边的分组error和分组数为1的比较)较小的模型往往从组中获益更多。例如,对于ShuffleNet 1x来说,最好的进入(g= 8)比g=1好1.2%,而对于ShuffleNet 0.5x和0.25x,差距分别是3.5%和4.4%。请注意,对于给定的复杂性约束,组卷积允许更多的特征图通道,因此我们假设,性能的提高来自更宽的特征图,这有助于编码更多的信息。此外,更小的网络包含更薄的特征图,这意味着它从更大的特征图中获益更多。
此处的模型 数字×表示通道数变为1×的多少倍,即模型在通道维度上变小
表2还显示,对于某些模型(例如:ShuffleNet 0.5x),当组数变大时,(如g= 8),分类分数饱和甚至下降。随着组数的增加(从而得到更宽的feature map),每个卷积滤波器的输入通道越来越少,这可能会损害其表示能力。有趣的是,我们也注意到对于更小的模型,比如ShuffleNet 0.25x更大的组数往往会得到更好的结果,这表明更宽的特征图会给更小的模型带来更多的好处。
2通道打乱
shuffle操作的目的是使多组卷积层的跨组信息流得以实现。表3比较了带/不带通道洗牌的洗牌网结构(例如组数设置为3或8)的性能。评估是在三种不同的复杂性尺度下进行的。很明显,频道洗牌可以持续提高不同设置的分类分数。特别是当组数较大时(如g=8),具有通道洗牌的模型的性能明显优于对应的模型,这说明了跨组信息交换的重要性。
和其他结构单元的比较
近期领先的卷积单元,VGG中[301,ResNet [9], 谷歌网 [33], ResNeXt [40] 和 Xception[3]通过大型模型(如> 1GFLOPs)追求了最先进的结果,但没有充分探索低复杂性的条件。在本节中,我们将调查各种构建块,并与在相同复杂性约束下的ShuffleNet进行比较。
为了公平比较,我们使用表1所示的整体网络架构。我们在2-4阶段用其他结构替换shufflenet unit,然后调整通道的数量以确保复杂性保持不变。我们探索的结构包括:VGGlike、resnet、xceptionlike、resnext
我们使用完全相同的设置来训练这些模型。结果如表4所示。在不同的复杂性下,我们的洗牌(ShuffleNet)模型的表现远远超过大多数其他模型。有趣的是,我们发现特征通道和分类精度之间存在着经验关系。例如,在38 MFLOPs的复杂性。阶段4的输出通道(见表1),在VGGlike的ResNet。ResNeXt。Xception-like中。ShuffleNet通道是50。192,192,288,576其精度的提高。由于ShuffleNet的高效设计,我们可以在给定的计算预算中使用更多的通道,因此通常可以获得更好的性能。
注意上面的比较不包括GoogleNet系列和Inception系列[33,34,321]。我们发现在小网络中生成这样的初始结构是很重要的,因为初始模块的设计涉及到太多的超参数。作为参考,第一个GoogleNet版本[33]有31.3%的top-1错误,代价为1.5 GFLOPs(见表6)。更复杂的在先启版本[34,32]更准确,然而,会显著增加复杂性。最近Kim等人提出了一种轻量级网络结构PVANET[191],该网络结构采用Inception单元。我们重新实现的PVANET(输入大小为224x224)的分类误差为29.7%,计算复杂度为557 MFLOPs,而我们的ShufleNet 2x模型(g = 3)的分类误差为26.3%,计算复杂度为524 MFLOPs(见表6)。
和mobilenet及其他网络比较
最近霍华德等人提出了mobilenet[12],主要关注移动设备的高效网络架构。MobileNet采用了[31的深度可分离卷积的思想,并在小模型上实现了最新的结果。表5比较了不同复杂程度下的分类分数。很明显,我们的洗牌模式是优于所有复杂的MobileNet。虽然我们的洗牌网络是专门为小型模型(< 150 MFLOPs),我们发现它仍然比MobileNet更好
泛化能力
实时加速评估
等等,后面也都比他们好
注意
depthwise convolution (DWConv)与depthwise separable convolution
1、Deep learning with depthwise separable convolutions (xception)的思想:
DWConv是Gconv的极端情况,即分组数为通道数,此处使用的DWConv 是通道数为1的3×3卷积
(a)单元先进行11点卷积,再是33逐通道卷积(分组数=通道数的分组卷积),再是1*1点卷积。
2、Mobilenets:Efficient convolutional neural networks for mobile vision applications (mobilenet)思想
深度可分离卷积(depthwise separable convolution)将传统卷积的两步进行分离开来,分别是depthwise和pointwise。
先进行33的逐通道卷积,再进行11的点卷积(可以改变通道数)
pointwise group
分组点卷积并不等于一个长方体特征图上一个点一个点进行,点卷积是在长宽的特征图维度上一个一个进行卷积,但是通道维度由分组的组数决定,分通道数组数时才是一个点一个点进行卷积