文章目录
(ResNeXt)Aggregated Residual Transformations for Deep Neural Networks论文阅读笔记2017
Abstract
我们为图像分类提出了一个简单的、高度模块化的网络结构。我们的网络通过重复一种building block来构建,building block聚合了一系列相同拓扑的变换。我们的结构是一个均匀的多分支结构,只需要设置少量的超参数。这种策略引入了一个新的维度,叫做“基数(cardinality)”(变换集的尺寸),作为宽度和深度之外的一个关键因素。在ImageNet-1k数据集上,**我们经验表明,即使在保持复杂度的限制下,提升基数可以提升分类准确率。而且,提升基数比将网络变得更深或更宽,更有效。**我们的模型叫做ResNeXt,是我们参加ILSVRC2016分类比赛的模型基础,我们取得了第二名。我们进一步在ImageNet-5k数据集和COCO检测集上探究,同样取得了比ResNet更好的结果。
1. Introduction
视觉识别的研究正在从“特征工程”过渡到“网络工程”。与传统的人工设计的特征(比如SIFT、HOG)相反,神经网络从大尺度数据学习到的特征只需要在训练时少量的人类参与,并可以迁移应用到许多识别任务中。人们的努力已经转移到设计更好的网络体系结构以学习表示形式。
随着超参数数量的增加(宽度,即channel数,卷积核尺寸,步长等),网络结构设计变得更加困难,尤其是很深层的时候。VGG网络使用了一种简单但是有效的策略:堆叠building blocks。这种策略在ResNet中也有所体现。这种策略减少了超参数的选择,使得深度变成了关键。而且,我们认为这种简化可能降低模型的超参数只适用于特定数据集的风险。VGG和ResNet的鲁棒性很好,无论是在视觉任务还是nlp上。
与VGG不同,Inception模块已经证明,对building block进行精心的设计,可以以较低的复杂度取得很好的准确率。它的重要特点就在于split-transform-merge策略。**在Inception模块中,输入被1 * 1卷积降维,分解成几块,然后每一块使用特定的变换(3 * 3、5 * 5卷积等),最后在聚合到一起。**这种策略想要取得大的、密集网络的表示能力,同时计算复杂度更低。
尽管取得了很高的准确率,Inception模块的实现过程中,参数很多很复杂(卷积核数、尺寸、每个变换的尺寸)。因为有这么多的超参数需要设置,在将它应用到一个新的任务或数据集上,设置就比较困难。
本文中,我们提出了一种简单的结构,使用了VGG的重复策略,同时使用一种简单的方式完成了split-transform-merge策略。我们的模块使用了一些变换,每一个变换都在一个低维度的embedding上进行,最后通过求和来获得聚合输出。我们使用一个简单的方法来实现网络,需要聚合的变换都有着相同的拓扑结构,比如图1右。这种设计使得我们可以在不需要特殊设计情况下,扩展到任意数量的变换。
有趣的是,我们的模型有两种等效形式(图3)。
图3b与Inception-ResNet模块相似,将多个path聚合,但是我们的模型与所有现存的Inception不同,因为我们的所有path的结构是一样的,因此path的数量作为一个参数。更简洁地表述,我们的模块可以当做grouped卷积。
我们实验中发现我们的方法超过了原来的ResNet模块,即使保持计算复杂度和模型尺寸的严格限制下。比如图1右设计中与左边的模块保持相当的FLOP复杂度和参数量。我们需要强调,通过将网络更宽、更深可以很容易提升准确率,但是在保持或降低复杂度的情况下还能提升准确率的方法比较稀少。
我们的方法表明,基数(变换的数量)是一个重要的可测量的量,除了宽度和深度。实验表明提升基数是比提升宽度和高度更有效的提升准确率的方法,尤其是当提升宽度和高度取得负效果的时候。
我们的网络ResNeXt(表明next 维度),超过了ResNet-101/152、ResNet-200、Inception-v3,以及Inception-ResNet-v2,在ImageNet分类数据集上。尤其是。ResNeXt-101可以比ResNet的效果更好,但是只有50%的相对复杂度,且ResNeXt比所有Inception模块的设计更简单。本文后续继续对比了在ImageNet-5K以及COCO目标检测数据集上的效果。
2. Related Work
Multi-branch convolutional networks.
Inception是成功的多分支结构,每个分支都是定制的。ResNet可以看做是两分支的网络,其中一个分支为identity mapping。深度神经决策森林是三部分的多分支网络,带有学习的分离函数。
Grouped convolutions.
分组卷积的使用可以追溯到AlexNet论文。当时是用来在两个GPU上分布训练网络。分组卷积支持Caffe、Torch等框架。据我们所知,很少有研究使用分组卷积来提升准确率。一个分组卷积的特殊例子是按通道卷积,分组的数量与通道数相等。按通道卷积是可分离卷积的一种。
Compressing convolutional networks.
分解(空间或通道维度上)是一种广泛应用的,降低深度卷积网络的冗余并加速/压缩的技术。Ioannou等人提出了一种“root”样式的网络,来降低计算,网络中的分支都通过分组卷积来实现。这些方法在降低了计算量的同时,牺牲了准确率。相反,我们的网络结构展现出更强的表示能力。
Ensembling.
将一组独立训练的网络平均是一种提升准确率的有效方法。我们的方法利用加法来聚合许多变换,但是我们认为将我们的方法看作是ensemble不够准确,因为聚合的成分是联合训练的,而不是独立训练的。
3. Method
3.1 Template
我们遵循VGG的设计模式提出了一个高度模块化的设计,我们的网络由许多残差款堆叠而成。这些块有着相同的结构,遵循着受VGG/ResNet启发的两条规则:
- 如果生成的空间图尺寸一致,那么blocks的超参数共享(宽度和卷积核尺寸)。
- 当空间的图下采样2倍,block的宽度(channel)就乘上2倍。这就保证计算复杂度对于所有的block都近似相等。
有了上面的两条规则,我们只需要设计一个模板模块,就可以根据它得到网络中的所有模块,这就大大降低了我们需要关注的参数量,网络如表1所示。
3.2 Revisiting Simple Neurons
人工神经网络中最简单的神经元计算方法就是內积(带权重的相加),fc层和卷积层就是这样完成的计算,內积可以认为是如下形式的聚合:
这里面D表示输入向量的D个通道,w表示每个通道的卷积核权重。这种操作(通常包括一些对输出的非线性操作)就是神经元。见图2。
上面的操作可以看作是分离、变换、聚合操作的组合:
- 分离表示输入向量x被切片成低维度的embedding,即上面的xi。
- 变换表示低维度的表示经过变换,即上面的乘权重,这种是尺度变换。
- 最后聚合就是将所有的embedding聚合到一起,即上面的求和。
3.3 Aggregated Transformations
简单分析之后,我们继续考虑将上面简单的变换(wixi)替换为一个更通用的函数,它自己也可能是一个网络。与NIN(相当于提升了网络的深度)不同,我们的方法类似Network-in-Neuron扩展了一个新的维度。
我们提出的聚合变换如下:
这里面T可以是任意函数,与简单的神经元相似,T将输入x映射成(通常是低维度的)embedding,然后将它变换。
式子2中,C是需要聚合的变换的数量,我们称为基数。这个式子中,C与式子1中的D类似,但是C不需要与D相等,可以是任意数字。尽管宽度与简单变换(內积)的数量有关,我们认为基数这个维度控制着更复杂的变换的数量。我们通过实验表明基数一个关键的维度,可以比宽度和深度维度更有效。
本文中,我们考虑一种简单的方法设计变换函数,所有的T都有着相同的拓扑结构。我们将单独的变换T设置为bottleneck形式结构,如图1右。首先的1 * 1卷积层用来降维,生成低维度的embedding,等式2中的聚合变换使用残差函数:这里y是输出。
Relation to Inception-ResNet.
一些张量的操作表现出图3啊与图3b是等价的。b与Inception-ResNet类似,在残差函数中包含了分支和聚合。但是与他们不同的是,我们每个path都是相同的拓扑结构。我们的模块需要最少的设计参数。
Relation to Grouped Convolutions.
使用分组卷积的表示方法会更加简洁,如图3c。所有的低维度embeddings(比如1 * 1层)可以被一个单独的、更宽的层取代(比如1 * 1 128)。**分离的操作通过分组卷积进行,将输入的通道分成不同的组。图3c中的分组卷积层表示了32组卷积,每个的输入输出为4-d的。分组卷积的结构聚合,形成输出。**c的形式更接近原来的ResNet,但是c更宽,且为稀疏相连的模块。
我们注意到只有在深度大于等于3的时候上面的公式才产生这种效果。如果深度等于2,那么公式就生成了一个小的密集的模块,如图4所示。
Discussion.
我们注意到我们提出的公式展示了聚合(b)或分组卷积(c),这样的公式不是对公式3的所有形式都适用的,如果变换Ti是任意形式且是不同的,就不适用。本文中使用同样形式的变换T,因为这更简单且易扩展。在这种情况下,c的分组卷积形式更加容易理解。
3.4 Model Capacity
下一部分的实验中会表明我们的模型在保持模型复杂度和参数数量的同时,提升了准确率。模型的复杂度和参数数量表示模型的能力,因此同城作为深度网络的基础参数。
当我们评估保持复杂度不变,不同的基数C的模型时,我们想要将其他的超参数的修正尽可能少。我们选择适应bottleneck的宽度,因为这个参数与输入输出无关。这种策略对其他的超参数没有影响,因此让我们更好的聚焦于基数改变的影响。
图1左中,原来的ResNet瓶颈结构有256 * 64+ 3 * 3 * 64 * 64 + 64 * 256,大概70k参数以及相应比例的FLOPs。对于瓶颈宽度d,我们的模板(图1右)有:
参数以及对应比例的FLOPs,当C=32,d=4时,式子4约为70k。表2展示了基数C和瓶颈宽度d的关系。
因为我们使用了3.1中的两个规则,上面式子中的数量在ResNet和ResNeXt之间。表1比较了原来的ResNet-50和我们方法。我们注意到复杂度只可以保持近似,但是复杂度的差距很小,不会影响到我们的结果的可靠性。
4. Implementation details
在ImageNet数据集上,输入图像尺寸为224 * 224,我们使用resized的图片进行随机裁剪。shortcuts为identity连接,除了那些增加维度的是投影。conv3、4、5的下采样通过步长为2的卷积完成。我们使用SGD,在8个GPU上训练,minibatch=256,权值衰减为0.0001,动量0.9。开始学习率为0.1,三次除以10。在所有的剥离实验中,我们评估224 * 224的crop,它是从resize到短边256的图片裁剪的。
我们的模型通过图3c来实现。我们在卷积之后接BN,每个BN后加ReLU,除了最后输出的block(这里ReLU加在shortcut相加操作之后)。
我们注意到当按照上面所述处理BN和ReLU的时候,图3中的三种形式是严格等价的。我们训练了三种形式的模型,取得了同样的效果。我们选择应用c形式,因为它更加简洁且更快。
5. Experiments
5.1 Experiments on ImageNet-1K
我们在ImageNet-1K上进行了剥离实验,将ResNet-50/101中的所有block换成了我们的block。
Notations.
因为我们使用了3.1中的两个规则,因此很方便实用模板来表示网络结构。比如,表1展示了ResNeXt-50的结构,它是通过基数=32、瓶颈宽度=4d。网络就可以记作ResNeXt-50(32 * 4d)。我们注意到模板的输入输出宽度固定为256-d,且当特征图下采样,宽度翻倍。
Cardinality vs. Width.
我们首先评估基数C和瓶颈宽度(通道数)在复杂度相同(如表2)的对比。表3展示了结果,图5展示了曲线。
如表2的ResNeXt-50,随着基数C的增加,**复杂度相同的情况下,错误率持续降低。训练错误率也更低,这表明效果的提升是源自更强的表示。在ResNeXt-101中可以观察到相似的趋势。32 * 4d的ResNeXt-101比ResNet-101的错误率低0.8%。**训练错误率的提升仍然很明显。
表3同样表明,在复杂度不变的情况下,提升基数,降低宽度所获得的效果提升逐渐饱和,在宽度很小的时候。因此,不需要再继续降低宽度了,我们之后使用等人宽度不低于4d。
Increasing Cardinality vs. Deeper/Wider.
下面我们研究通过增加基数或深度/宽度来提升模型复杂度的效果。下面的比较可以看做是原来ResNet baselineFLOPs的2倍。第一个我们增加到200层;第二个我们增加宽度;第三个我们增加基数,C翻倍。
表4中结果表明复杂度翻倍,错误率持续下降。但是使用更深层或更宽提升很小。相反,提升基数效果要好得多。
我们同样注意到32 * 4d ResNeXt-101比更深的ResNet-200和更宽的ResNet-101效果要好,尽管它只有它们一半的复杂度。这又表明基数是更好的、更有效的参数。
Residual connections.
下面这个表展示了残差连接的效果:
在ResNeXt-50中,移除残差连接,错误率提升3.9点,对于ResNet-50,错误率提升更多。这些对比表示残差连接对于优化很有帮助,而我们的方法(将变换聚合)有着更强的表示能力。
Performance.
为了简化,我们使用Torch的内置分组卷积应用,不加特殊的优化。我们注意到这个应用是暴利的,对于并行化不友好。在8GPU上训练32 * 4d ResNeXt-101每个minibatch花费0.95s,而对有着相当复杂度的ResNet-101 baseline,只需要0.7s。我们认为这个差距是可以接受的。我们期待有更底层的硬件上的修正可以消除这个差距。我们也希望在CPU上的测试时间之间的差距可以更小。
Comparisons with state-of-the-art results.
表5展示了更多的单crop测试的结果对比。我们也评估了320 * 320crop的结果。我们的模型达到了4.4%的top-5错误率,而且比对比的网络设计更简单,有着更少的人工设置的超参数。
ResNeXt是我们参加ILSVRC2016分类任务的网络基础,我们取得了第二名。我们注意到,许多模型(包括我们的模型)在使用多尺度或多crop测试之后,在这个数据集上接近饱和。因此我们下面使用ImageNet-5K来进行实验。
5.2 Experiments on ImageNet-5K
在ImageNet-1K数据集上的结果似乎饱和了,但是我们认为这不是因为模型的能力不够,而是因为数据集的复杂度不够。下面我们就在更大的ImageNet-5K上进行实验。
这个数据集中的5000类包含原来ImageNet-1K中的类别和其他的4000类,有着6.8million图像。因为没有官方发train/val划分,我们在原来的1K数据集上的验证集进行评估。在这个验证集上,虽然只有1000类,我们可以当做5000类来分类,如果结果是4000类中的,那么分类错了。
应用的细节与4中一样,模型我们从头训练。表6和图6展示了在相同复杂度上的结果对比。
结果表明我们的方法都超过了原来的ResNet。
而且,我们发现,在5K数据集上训练的模型(1k-way 错误22.2%/5.7%)与在1K数据集上训练的模型效果相当(表3,21.2%/5.3%)。我们认为这表明分类5k类是更具挑战性的任务。
5.3 Experiments on CIFAR
我们在CIFAR-10和CIFAR-100数据集上进行了更多的实验,对我们的模型与ResNet进行了对比,二者的应用细节一致。
我们比较了两种增加复杂度的情况,基于上面的baseline:
- 增加基数,固定所有的宽度
- 增加宽度,固定基数为1。
我们在上面两种情况下训练了一系列模型,图7展示了结果。
我们发现,增加基数比增加宽度更有效,这与我们在ImageNet-1K上观察到的效果一致。表7展示了结果和模型的尺寸,我们有着相同尺寸的模型比对应的Wild ResNet效果要好。
5.4 Experiments on COCO object detection
下面我们评估网络在COCO目标检测数据集上的概括能力。我们在80k训练集+35kval训练,在5k val上测试。使用COCO的AP。我们使用了标准的Faster R-CNN,直接将ResNet/ResNeXt替换backbone。模型在ImageNet上预训练过,在检测数据集上微调。
表8展示了对比结果。在50层的baseline上,ResNeXt只提升了2.1%的[email protected],1.0%的AP,在101层的提升甚至要更小。我们认为使用更多的训练数据,会增加这个提升效果。
同样值得注意的是,最近ResNeXt已经应用到Mask R-CNN中,取得了SOTA的COCO实例分割和目标检测效果。