论文题目:Aggregated residual transformations for deep neural networks
论文:https://arxiv.org/abs/1611.05431
代码:https://github.com/facebookresearch/ResNeXt
我们提出了一种简单,高度模块化的网络架构,用于图像分类。我们的网络是通过重复构建块来构建的,该构建块聚合了具有相同拓扑的一组转换。我们的简单设计产生了一个同构的多分支架构,只需要设置一些超参数。这种策略暴露了一个新的维度,我们将其称为“基数”(转换集的大小),作为深度和宽度维度之外的一个重要因素。在ImageNet-1K数据集上,我们凭经验表明,即使在保持复杂性的限制条件下,增加基数也能够提高分类准确性。此外,当我们增加容量时,增加基数比增加宽度和深度更加有效。我们的模型名为ResNeXt,是我们进入ILSVRC 2016分类任务的基础,我们获得了第二名。我们在ImageNet-5K集和COCO检测集上进一步研究ResNeXt,也显示出比其ResNet具有更好的结果。
视觉识别研究正在从“特征工程”向“网络工程”过渡。与传统的手工设计特征(例如,SIFT和HOG)相比,神经网络从大规模数据中学到的特征在训练期间需要最少的人为参与,并且可以转移到其他各种识别任务中。所以,人类的努力已经转移到为学习表示设计更好的网络架构。
随着越来越多的超参数(宽度,卷积核尺寸,步幅等),设计架构变得越来越困难,尤其是当网络存在许多层时。VGG网络展示了构建非常深的网络的简单而有效的策略:堆砌具有相同形状的网络块。这种策略由ResNets继承,它堆叠了相同拓扑结构的模块。这个简单的规则减少了超参数的自由选择,并且深度作为神经网络中的基本维度设置。此外,我们认为此规则的简单性可以降低过度调整超参数到特定数据集的风险。各种视觉识别任务以及涉及语音和语言的非视觉任务已经证明了VGG网络和ResNets的鲁棒性。
与VGG网络不同,Inception模型系列已经证明精心设计的拓扑结构能够以较低的理论复杂度实现引人注目的精度。Inception模型随着时间的推移而发展,但一个重要的共同属性是分裂-变换-合并策略。在Inception模块中,输入被分成几个低维嵌入(通过1×1卷积),由一组专用滤波器(3×3,5×5等)进行转换,并通过串联合并。可以证明,该体系结构的解空间是在高维嵌入上运行的单个大层(例如,5×5)的解空间的严格子空间。预期Inception模块的拆分-变换-合并行为将接近大而密集层的表征能力,但计算复杂度要低得多。
尽管精确度很高,但是Inception模型的实现伴随着一系列复杂的因素:滤波器的数量和尺寸是针对每个单独的转换量身定制的,且模块是逐步定制的。虽然这些组件的仔细组合可以产生出色的神经网络配方,但一般不清楚如何使Inception架构适应新的数据集/任务,特别是当有许多因素和超参数要设计时。
在本文中,我们提出了一个简单的体系结构,采用VGG / ResNets的重复层策略,同时以简单、易得的方式利用分裂-变换-合并策略。我们网络中的模块执行一组转换,每个转换都进行低维嵌入,其输出通过求和来聚合。我们追求这个想法的简单实现 - 要聚合的转换都是相同的拓扑(如Fig. 1右图所示)。这种设计允许我们在没有专门设计的情况下扩展到任何大量的转换。
有趣的是,在这种简化的情况下,我们表明我们的模型有两个其他等价形式(图3)。图3(b)中的重新表述看起来类似于Inception ResNet模块,因为它连接了多条路径;但是我们的模块与所有现有的Inception模块的不同之处在于,我们所有的路径都共享相同的拓扑结构,因此路径的数量可以很容易地被隔离,作为一个可以解决的因素。在一个更简洁的重新制定中,我们的模块可以通过Krizhevsky等人的分组卷积(图3(c))进行重塑,然而,这已经被开发为工程折衷方案。
我们凭经验证明,即使在保持计算复杂性和模型大小的限制条件下,我们的聚合转换也优于原始的ResNet模块 - 例如,图1(右)和图1(左)具有相同的FLOP复杂性和参数数量。我们强调,虽然通过增加容量(更深或更宽)来提高准确性相对容易,但在文献中很少有提高准确性同时保持(或降低)复杂性的方法。
我们的方法表明基数(变换集的大小)是除了宽度和深度的尺寸之外,一个具体的,可测量的维度,它是至关重要的。实验表明,增加基数是比更深或更宽的更有效的提升模型准确率的方法,特别是当深度和宽度对现有模型的收益开始递减时。
我们的神经网络,名为ResNeXt(暗示下一个维度),在ImageNet分类数据集上优于ResNet-101/152 ,ResNet200 ,Inception-v3和Inception-ResNet-v2。特别是,101层ResNeXt能够实现比ResNet-200更好的精度,但复杂度仅为其50%。此外,ResNeXt使用了比所有Inception模型简单得多的设计。 ResNeXt是我们分别参与ILSVRC 2016分类任务的基础,我们取得了第二名的成绩。本文进一步评估了ResNeXt在更大的ImageNet-5K集和COCO对象检测数据集的效果,显示出其比ResNet具有更高的准确度。我们希望ResNeXt能够很好地泛化应用于其他视觉(和非视觉)识别任务。
多分支卷积网络:Inception模型是成功的多分支架构,每个分支都经过精心定制的。ResNets可以被认为是双分支网络,其中一个分支是恒等映射。深度神经决策森林是具有学习分裂功能的树状图案多分支网络。
组卷积:使用分组卷积可以追溯到AlexNet论文。Krizhevsky等人使用分组卷积的动机用于在两个GPU上分发模型。Caffe,Torch和其他库支持分组卷积,主要是为了兼容AlexNet。据我们所知,几乎没有证据表明利用分组控制可以提高准确性。分组卷积的特殊情况是逐通道的卷积,其中组的数量等于通道的数量。逐通道式卷积是可分离卷积的一部分。
压缩神经网络:分解(在空间和/或信道)是一种广泛采用的技术,以减少深度卷积网络的冗余并加速/压缩它们。Ioannou等提出了一个“根”模式网络用于减少计算,并且根中的分支通过分组卷积实现。这些方法显示了精度和复杂度的优雅折衷,具有较低的复杂性和较小的模型尺寸。我们的方法不是压缩,而是一种经验上表现出更强表示能力的架构。
集成学习:对一组独立训练的网络进行平均是提高准确性的有效解决方案,在识别竞赛中被广泛采用。Veit等人将单个ResNet解释为较浅网络的集合,这是由ResNet的附加行为产生的。我们的方法利用添加来聚合一组转换。但我们认为将我们的方法视为集合是不精确的,因为要成为集合的成员是共同训练的,而不是独立训练的。
我们采用和VGG / ResNets相似的高度模块化设计。我们的网络由残差块的堆砌组成。这些块具有相同的拓扑结构,遵循两个受VGG / ResNets启发的简单规则:
有了这两个规则,我们只需要设计一个模板模块,就可以相应地确定网络中的所有模块。因此,这两条规则大大缩小了设计空间,使我们能够专注于几个关键因素。
这些规则构建的网络见表1。
人工神经网络中最简单的神经元形成内积(加权和),这是全连通层和卷积层完成的元素变换。内积可以被认为是聚合转换的一种形式: (1) ∑ i = 1 D w i x i \sum_{i = 1}^Dw_ix_i \tag{1} i=1∑Dwixi(1)。 x = [ x 1 , x 2 , ⋯   , x D ] x = [x_1,x_2,\cdots,x_D] x=[x1,x2,⋯,xD]是输入到神经元的D维输入向量, w i w_i wi是第 i i i个通道的滤波器权重。该操作(通常包括一些输出非线性)被称为“神经元”。见图2。
鉴于上面对一个简单神经元的分析,我们认为可以用一个更通用的函数替换初等变换 w i x i w_ix_i wixi,这个通用的函数也可以是一个网络。与NIN相比,结果是增加了网络的深度,我们表明我们的“神经元中的网络”沿着一个新的维度进行了扩展。
在形式上,我们将聚合转换呈现为: (2) F ( x ) = ∑ i = 1 C T i ( x ) F(x) = \sum_{i=1}^CT_i(x) \tag{2} F(x)=i=1∑CTi(x)(2)
其中 T i ( x ) T_i(x) Ti(x)可以是任意的函数。类似于一个简单的神经元, T i T_i Ti函数应该将 x x x投射到(可选的低维)嵌入中,然后对其进行转换。
在公式(2)中,C是要聚合的变换的数目。我们将C称为基数。在等式(2)中,C处于与等式(1)中的D类似的位置,但是C不需要等于D并且可以是任意数。虽然宽度的维度与简单转换(内积)的数量有关,但我们认为基数的维数控制着更复杂的转换的数量。我们通过实验表明,基数是一个基本维度,可以比宽度和深度更有效。
在本文中,我们考虑一种设计变换函数的简单方法:所有 T i T_i Ti都具有相同的拓扑结构。这扩展了重复相同形状图层的VGG式策略,这有助于隔离一些因素并扩展到任何大量的转换。我们将单个转换 T i T_i Ti设置为瓶颈形状的架构,如图1(右)所示。在这种情况下,每个 T i T_i Ti中的第一个1×1层产生低维度嵌入。
图1右图可以在方程(2)中的聚合变换的基础上添加直连函数进行实现:
(3) y = x + ∑ i = 1 C T i ( x ) y = x + \sum_{i=1}^CT_i(x) \tag{3} y=x+i=1∑CTi(x)(3)
其中,y是处理块的输出。
和Inception-ResNet的关系:一些张量操作表明图1(右)中的模块(也如图3(a)所示)等同于图3(b)。图3(b)与Inception-ResNet 模块类似,它涉及在残差函数中的分支和连接。但与所有Inception或Inception-ResNet模块不同,我们在多个路径之间共享相同的拓扑。我们的模块需要最少的额外工作来设计每条路径。
和组合卷积的关系:上面的模块使用分组卷积进行实现会简洁。这种重新制定如图3(c)所示。所有低维嵌入(第一个1×1层)可以由单个较宽的层(例如,图3(c)中的1×1,128-d)代替。当分组卷积层将其输入通道分成组时,分裂基本上由分组卷积层完成。图3(c)中的分组卷积层形成32组卷积,各卷积的输入和输出通道都是4维的。分组的卷积层将它们连接为层的输出。图3(c)中的块看起来很像图1(左)中的原始瓶颈残差块,除了图3(c)是更宽但更稀疏连接的模块。
我们注意到,只有当块的深度≥3时,重构才有意义。如果块的深度为2,则重新形成导致宽的密集模块。请参见图4中的图示。
讨论:我们注意到虽然我们提出了使用连接的修改(图3(b))或分组的概念(图3(c)),但这种重新制定并不总是适用于方程(3)所示的一般形式,例如,如果转换它采用任意形式并且是异构的。我们选择在本文中使用同构形式,因为它们更简单且可扩展。在这种简化的情况下,图3(c)形式的分组卷积有助于简化实现。
我们在下一节中的实验将表明,我们的模型在维护模型复杂性和参数数量时提高了准确性。这不仅仅是在实践中有意义,更重要的是,参数的复杂性和数量代表了模型的固有能力,因此经常作为深度网络的基本属性进行研究。
当我们在保持复杂性的同时评估不同的基数C时,我们希望最小化对其他超参数的修改。我们选择调整瓶颈层的宽度,因为它可以隔离块的输入和输出。这个策略没有引入其他超参数(块的深度或输入/输出宽度)的变化,因此有助于我们专注于基数的影响。
在图1(左)中,原始ResNet瓶颈块[14]具有256·64 + 3·3·64·64 + 64·256≈70k参数和成比例的FLOP(在相同的特征图大小上)。对于瓶颈宽度d,我们在图1(右)中的模板具有:
(4) C ⋅ ( 256 ⋅ d + 3 ⋅ 3 ⋅ d ⋅ d + d ⋅ 256 ) C·(256·d + 3·3·d·d + d·256)\tag{4} C⋅(256⋅d+3⋅3⋅d⋅d+d⋅256)(4)
参数和成比例的FLOP。当C = 32且d = 4时,等式(4)≈70k。表2显示了在保持相似参数量和计算复杂度下基数C和瓶颈宽度d之间的关系。
因为我们使用了在Sec 4.1中介绍的两个规则,在所有阶段的ResNet瓶颈块和我们的ResNeXt之间,上述近似相等是有效的(除了特征映射大小改变的子采样层)。Table 1比较了原始的ResNet-50和具有相似容量的ResNeXt-50。我们注意到复杂性只能大致相等,但复杂性的差异很小,不会影响我们的结果。
我们的实现遵循ResNet和fb.resnet.torch的公开可用代码。在ImageNet数据集上,使用由[11]实现的[38]的比例和宽高比进行数据增强,从调整大小的图像中随机裁剪224×224的输入图像。快捷连接是恒等连接,除了ResNet中那些增加维度的投影。如[11]中所建议的,对每个阶段的第一个块的3×3层中的使用步幅为2的conv3,4和5的卷积实现下采样。我们在8个GPU上使用小批量256的SGD(每个GPU 32个)。重量衰减为0.0001,动量为0.9。初始学习率为0.1,并使用[11]中的时间表将其除以10三次。我们采用[13]中的权重初始化。在所有比较中,我们从短边为256的图像上裁剪单个224×224的中心块进行误差评估。
我们的模型按照图3(c)的形式进行实现。在每一个卷积后面都使用了BN层,BN层后再使用ReLU函数。但最后一层的ReLU是在恒等映射与原输出相加之后再进行。
我们注意到,如上所述,当BN和ReLU被适当地使用时,图3中的三种形式是严格等价的。我们已经训练了所有三种形式并获得了相同的结果。我们选择通过图3(c)实现,因为它比其他两种形式更简洁、更快速。
我们对1000类的ImageNet分类任务进行实验。我们遵循ResNet来构建50层和101层的残差网络。我们简单地将我们设计的Fig. 3© 块放在ResNet-50/101中。
符号表示:因为我们采用了Sec 4.1中的两个规则。因此我们可以通过模板实现任意的架构。例如,表1显示了由基数为32且瓶颈宽度= 4d的模板构建的ResNeXt-50(图3)。为简单起见,该网络表示为ResNeXt-50(32×4d)。我们注意到模板的输入/输出宽度固定为256-d(图3),每次对特征图进行二次采样时,所有宽度均加倍(参见表1)。
基数 vs. 宽度:我们首先在表2中列出的维持复杂度的情况下评估基数C和瓶颈宽度之间的权衡。表3显示了结果,图5显示了误差与epoch之间的曲线。
与ResNet-50(表3顶部和图5左)相比,32×4d ResNeXt-50的验证误差为22.2%,比ResNet基线的23.9%低1.7%。随着基数C从1增加到32,在保持复杂性的同时,错误率不断降低。此外,32×4d ResNeXt的训练误差也远低于ResNet,表明增益不是来自正则化,而是来自更强的表示。
在ResNet-101的情况下观察到类似的趋势(图5右,表3底部),其中32×4d ResNeXt101的表现优于ResNet-101的0.8%。尽管验证误差的改善小于50层情况,但训练误差的改善仍然很大(ResNet-101为20%,32×4d ResNeXt-101为16%,图5右图)。事实上,更多的训练数据将扩大验证错误的差距,正如我们在下一小节中ImageNet-5K上的实验所示。
表3还表明,在保持复杂性的情况下,以减小宽度为代价的增加基数在瓶颈宽度较小时开始显示出饱和现象。我们认为在这种权衡中继续减小宽度是不值得的。因此我们没有进行瓶颈宽度小于4的实验。
增加基数 vs. 更宽/更深:接下来我们通过增加基数C或增加深度或宽度来增加复杂性。下面的实验具备2倍的ResNet-101的FLOP。我们比较了以下具有约150亿FLOP的变体。一是使用更深的200层的网络,使用ResNet-200;二是增加瓶颈层的宽度;三是通过对C进行加倍增加网络的基数。
表4显示,与ResNet-101基线(22.0%)相比,复杂度增加2倍可以显著降低误差。但是,但使用更深(ResNet-200,增加0.3%)或更宽(更宽的ResNet-101,减少0.7%)时,改进很小。
相反,增加基数比增加宽度和深度取得了更好的效果。2×64d的ResNeXt-101(即在1×64d ResNet-101 的基础上加倍C并保持宽度)将top-1误差减少了1.3%至20.7%。64×4d的ResNeXt-101(即在32×4d的ResNeXt-101上加倍C并保持宽度)将Top-1个误差减少到了20.4%。我们还注意到32×4d的ResNet-101(21.2%)比更深的ResNet-200和更广泛的ResNet101表现更好,尽管其复杂度仅为后者的50%。这再次表明基数是一个比深度和宽度更有效的维度。
残差连接:下表显示了残差连接的效果。
从ResNeXt-50中删除残差连接可将错误率提高3.9点至26.1%。从ResNet-50中删除残差连接错误率提高到了31.2%。这些比较表明,残差连接有助于优化,而聚合变换是更强的表示。
性能:为简单起见,我们使用了Torch内置的分组卷积实现,没有进行特殊优化。我们注意到这种实现是蛮力的,而不是并行化的。在8个NVIDIA M40 GPU上,表3中的训练32×4d ResNeXt-101每个小批量需要0.95秒,而具有类似FLOP的ResNet-101需要0.70秒。我们认为这是一个合理的开销。我们希望精心设计的低层实现(例如,在CUDA中)将减少这种开销。我们还期望CPU上的推理时间会减少开销。训练2×复杂度模型(64×4d ResNeXt-101)每个小批量需要1.7s,在8个GPU上需要10天。
和SOTA算法比较:表5显示了在ImageNet验证集上的单一图像crop块测试的对比结果。除了测试224×224 crop外,我们还评估了320×320的crop。我们的结果与ResNet,Inception-v3 / v4和Inception-ResNet-v2相比毫不逊色,实现了4.4%的单一crop Top-5错误率。此外,我们的架构设计比所有Inception模型简单得多,并且需要考虑手工设置的超参数要少得多。
ResNeXt是我们参加ILSVRC 2016分类任务的基础,其中我们获得了第二名。我们注意到,在使用多尺度和或多种crop测试后,许多模型(包括我们的模型)开始在该数据集中饱和。我们使用[14]中的多尺度密集测试得出单模型Top-1 /Top-5错误率为17.7%/ 3.7%,与Inception-ResNet-v2的单模型结果相同,采用多尺度,多crop测试的准确率为17.8%/ 3.7 %。我们在测试集上有一个3.03%Top-5错误的集成结果,获胜者的错误率为2.99%,Inception-v4 / Inception-ResNet-v2的错误率为3.08%。
ImageNet-1K的性能似乎趋于饱和。但我们认为这不是因为模型的能力,而是因为数据集的复杂性。接下来,我们在具有5000个类别的更大ImageNet子集上评估我们的模型。
我们的5K数据集是完整ImageNet-22K集的子集。5000个类别包括原始ImageNet1K类别和其他4000个类别,这些类别在完整的ImageNet集中具有最大数量的图像。5K集有680万张图像,约为1K集的5倍。没有正式的训练/验证集划分,因此我们选择在原始的ImageNet-1K验证集上进行评估。在这个1K级验证集上,模型可以被评估为5K路分类任务(所有标签预测为其他4K类则自动错误)或测试时的1K分类任务(softmax仅适用于1K班)。
实施细节与Sec 5中的相同。5K训练模型都是从头开始训练的,使用的是与1K训练模型相同数量的小批量进行训练。表6和图6显示了相近复杂度下的比较。与ResNet-50相比,ResNeXt-50将5K-way top-1错误减少了3.2%,与ResNet-101相比,ResNetXt-101将5K-way top-1错误减少了2.3%。在1K类误差上观察到类似的提升。这些证明了ResNeXt更强的表示能力。
此外,我们发现在5K组上训练的模型(表6中1K类误差22.2%/ 5.7%)与1K组训练的模型(表3中的21.2%/ 5.6%)相比具有竞争性,在验证集上进行相同的1K类分类任务。在不增加训练时间(由于相同数量的小批量)和没有微调的情况下实现该结果。我们认为这是一个很有希望的结果,因为分类5K类别的训练任务更具挑战性。
我们在CIFAR-10和100个数据集上进行了更多实验。我们使用ResNet中的体系结构,并通过瓶颈模板1×1,64 、3×3,64、1×1,256重置基本残差块。我们的网络以单个3×3卷积层开始,然后是3个阶段,每个阶段有3个残余块,最后是平均池化和全连接的分类器(总共29层深)。我们采用与ResNet中相同的处理进行数据增强。
我们基于以上基线比较了两个增加复杂度的情况:(i)增加基数并修正所有宽度,或(ii)增加瓶颈宽度并修复基数1。我们在这些变化下训练和评估了一系列网络。图7显示了测试错误率与模型大小的比较。我们发现增加基数比增加宽度更有效,这与我们在ImageNet-1K上观察到的一致。
表7显示了结果和模型大小,与Wide ResNet [43]相比,后者是最佳发布记录。我们的模型具有相似的模型尺寸(34.4M),显示出比Wide ResNet更好的结果。我们更大的模型在CIFAR-10上达到3.58%的测试误差(平均10次运行),在CIFAR-100上达到17.31%。据我们所知,这是文献中最先进的结果(具有类似的数据增加),包括未发表的技术报告。
接下来,我们评估模型在COCO目标检测集上的效果。我们在80k训练集上加上35k 验证子集训练模型,并在5k val子集(称为minival)上进行评估。我们评估COCO式平均精度(AP)以及AP@IoU=0.5。我们采用基本的faster R-CNN并按照[14]将ResNet / ResNeXt插入其中。这些模型在ImageNet-1K上进行了预训练,并在检测数据集上进行了微调。
表8显示了比较。在50层基础网络上,ResNeXt将[email protected]提高2.1%,AP提高1.0%,不会增加复杂性。 ResNeXt显示101层基线上较小的改进。我们推测,更多的训练数据将导致更大的差距,正如在ImageNet-5K集上观察到的一样。
值得注意的是,最近ResNeXt已被Mask R-CNN采用,它在COCO实例分割和对象检测任务方面取得了SOTA的成果。
本文通过重新设计符合VGG/ResNet规则的残差块,在神经网络中引入基数个函数,并结合分组卷积压缩了模型参数,在不增加模型复杂度和参数数量的情况下增强了模型的性能。实验结果表明了基数是比宽度和深度更有效的超参数,作者进一步的实验表明了ResNext模型在目标检测任务上的有效性。
作者设计的残差块符合两个主流规则,不需要像Inception结构那样精心设计,方便进行模型调整。