论文链接: https:// arxiv.org/abs/2004.0498 9
代码链接: https:// github.com/iduta/iresne t
一、论文简介:
本文提出了一个改进版本的ResNets。提出的改进方案解决了ResNet的三个主要组成部分:网络层的信息流、残差快块和跳链接方式。本改进能够显示出在准确性和学习收敛的基础上的持续提升。
二、ResNets回顾:
ResNets是由大量building block堆叠在一起而构成的。ResNets的核心思想是,如果需要,可以促进对其building block的身份映射的学习。这是通过使用跳过连接来实现的:将块的输入添加到它的学习输出中。理论上,网络可以自己学习身份映射,而不需要这些快捷方式。然而,在实践中,优化器学习标识映射并不容易。这叫做退化问题。当训练一个非常深的网络时,其准确性会比训练层次更少的较浅的网络差,尽管在理论上,这个情况应该是相反的,或者至少不应该变得更糟。ResNet思想是解决网络退化问题,允许有效地学习更深层次的网络。但是这种方法并没有完全解决相关问题。例如,在ImageNet数据集上,将深度从152层增加到200层,会导致非常糟糕的结果,这意味着严重的优化问题。这说明在增加层数的情况下,ResNet仍然会危害信息在网络中的传播。在这项工作中,作者提出了一个改进的架构设计,以促进信息通过网络的传播。提出的体系结构能够学习极深的网络,没有显示优化难度随深度增加。
三、本文创新:
在ResNets中,当一个building block的尺寸与下一个building block的尺寸不匹配时,必须使用projection shortcuts。但是projection shortcuts对于退化问题不是必要的。而projection shortcuts在网络结构中发挥着重要作用,它位于信息的主要传播路径上,容易干扰信号或造成信息丢失。本文引入了一种改进的projection shortcuts,它是无参数的改进,在性能上显示了显著的提高。在原有的ResNet中,当深度显著增加时,引入了bottleneck building block来控制参数数量和计算开销。然而,在这种积木结构中,唯一负责学习的空间卷积的卷积接收的输入/输出通道数量最少。本文提出了一个构建块,将焦点转移到空间卷积上,本架构在一个构建块中包含的空间通道比原来的ResNet多四倍,同时保持参数数量和计算成本在可控范围内。
本文的主要贡献是:
(1)引入了一种基于阶段的残差学习网络体系结构。所提出的方法通过为信息在网络层传播提供更好的路径来促进学习过程;
(2)提出了一种改进的projection shortcuts,减少了信息损失;
(3)提出了一个building block,可以大大增加学习更强大的空间模式的空间通道
(4)本方法对baseline提供了一致的改进。值得注意的是,这些改进是在不增加模型复杂性的情况下获得的。
四、改进过程:
(一)、Improved information flow through the network
ResNet是通过将多个残差块(ResBlocks)堆叠在一起来构建的。下图为残差块结构,由三个卷积层(两个内核为1×1,一个内核为3×3)、三个批处理归一化和三个ReLU层组成,灰色的大箭头表示信息传播的最直接路径(包括跳连接)。
每个残块可以正式定义为:
x [ l ] x^{[l]} x[l]和 x [ l + 1 ] x^{[l+1]} x[l+1]为第 l l l个ResBlock的输入输出向量;ReLU表示激活函数; F ( x [ l ] F (x^{[l]} F(x[l], {
W i ( l ) W _i^{(l)} Wi(l)?})是一个可学习的残差映射函数,可以有几个层(索引为 i i i),例如,对于一个有三个层的瓶颈ResBlock l l l, F = W 3 [ l ] R e L U ( W 2 [ l ] R e L U ( W 1 [ l ] x ) ) F =W_3^{[l]}ReLU(W_2^{[l]} ReLU(W_1^{[l]} x)) F=W3[l]?ReLU(W2[l]?ReLU(W1[l]?x)); W p [ l ] W_p^{[l]} Wp[l]?是一个可学习的线性投影矩阵,允许映射 x [ l ] x^{[l]} x[l]的大小为 F F F的输出大小,它只存在于没有相应维数的情况下用于在 F F F和 x [ l ] x^{[l]} x[l]之间进行元素相加的。
ResNet是专门为方便信息在网络中向前和向后传播而创建的。。但从上文中可以看出,在主传播路径上存在ReLU激活函数。这种ReLU通过对负信号进行归零,可能对信息的传播产生潜在的负面影响。这在训练开始时尤其重要(一段时间后,网络可能会开始调整权值,以输出一个通过ReLU时不受影响的正信号)。
下图(右)提出了一种重新设计的ResBlock,称为pre-activation,通过移动最后一个BN层和ReLU到块的最开始。
在一个极端情况下,在主路径上,原始的ResNet中太多gates(如ReLUs)妨碍了信号传播的,另一个极端,在pre-activation上,ResNet允许信号以不受控制的方式通过网络。这两个极端都不是最佳选择,并表现出不同的问题。pre-activation提出了两个主要问题:
首先,在所有四个stages中,没有对完整信号进行归一化(BN)(所有的BN都独立地应用在分支上,而不是在addition后的全信号上),因此,当我们添加更多块时,完整信号变得更不归一化,这就造成了学习的困难。
第二,注意有四个projections shortcuts(因此主路径上有四个1x1 conv),理论上,网络可以学习大多数blocks的identity mappings(具有卷积的构建块中的分支可以输出0,为了在应用addition操作时轻松创建identity,这实际上是一个常见的初始化)。所有四个主要阶段的ResNet最终只有四个连续的1x1 conv(来自主要路径中的projections shortcuts),但中间没有任何非线性操作,限制了学习能力。我们的方法也解决了这两个问题,因为它在每个主要阶段前稳定信号(我们在每个主要阶段后的全信号上使用一个BN),并确保在最后至少有一个非线性(应用于全信号)。
本文提出的ResBlock如上所示。ResNet可以被划分为不同的阶段。以ResNet-50为例,如下表所示,ResNet-50分级是由输出空间大小和输出通道的数量决定的。当输出空间大小或输出通道数量发生变化时,它标志着另一个阶段的开始。对于ResNet-50,有四个主要阶段(包含ResBlocks)和一个开始和结束阶段。四个主要阶段中的每个阶段都可以包含一定数量的ResBlocks;在ResNet-50的情况下,阶段1有三个ResBlocks,阶段2有四个ResBlocks,阶段3有六个ResBlocks,阶段4有三个ResBlocks。每个主要阶段分为三个部分:一个开始ResBlock,若干个中间ResBlock(可以是任意数字;在ResNet-50的情况下,对应的阶段有[1,2,4,1])和一个End ResBlock。每个ResBlock都有不同的设计,这取决于它在结构中的位置。我们称ResStage网络为:将ResNet拆分为所提议的阶段架构的结果。
本结构不会增加模型的复杂性。例如,在ResNet-50上,所有三种方法(原始的、预激活和我们提议的ResStage)包含相同数量的组件和相同数量的参数。只有组件排列被更改。对于ResStage,在每个主阶段,消除了第一个中间ResBlock中的第一个BN,因为信号已经被开始ResBlock归一化了。
与最原始的ResNet不同,ResStage在信息前向和后向传播的主路径上包含固定数量的ReLUs。对于主要阶段,主要信息传播路径上只有4个ReLUs,它们不受深度改变的影响。这使得网络在信息通过无数层时可以避免干扰信号的影响。
与其他版本ResNet不同,ResStage将网络划分为几个阶段,每个阶段包含三个部分。每个阶段的End Resblock由BN和ReLU完成,这可以看作是为下一阶段做准备,稳定并准备信号进入一个新的阶段。在Start ResBlock中,在最后一个conv之后有一个BN层,它将信号归一化,准备用projections shortcuts进行元素加法(这也提供了一个归一化信号)。本方法通过为信息提供更好的途径来促进学习。分阶段学习是为了高效的信息流,同时也为了保持信号在控制之下。
(二)、Improved projection shortcut
在最初的ResNet体系结构中,当x的维度与F的输出维度不匹配时,则对x应用projection shortcut而不是projection shortcut,使元素加法成为可能。
在原始ResNet中使用的默认projection shortcut如图下。所示原始projection shortcut使用一个1×1卷积来将原始x通道x映射到输出通道数f 。步长为2的1×1卷积是调整x和f的输出之间的空间大小,然后,在对F的输出进行元素加法之前应用BN,因此,通道和空间匹配都是由1×1卷积执行的。这导致了大量的信息损失,因为当将空间大小减小2时,1×1卷积 (stride 2)跳过了75%的 feature maps activations。然而,1×1卷积 (stride 2)选择的75%的feature maps activations并没有标准的意义。然后结果被添加到主要的ResBlock输出。因此,这个projection shortcut的噪声输出相对一半的信息来贡献给下一个ResBlock。这将引入噪声和信息损耗,并会对网络中的主流信息产生负面干扰。
本文提出的projection shortcut如下图所示。将空间投影从通道投影中分离出来。对于空间投影,使用stride 为二2的一个3 ×3 max pooling。然后,对通道投影应用一个步幅为1的1×1卷积,然后是一个BN。对于max pooling,作者引入了一个准则来选择应该为1×1 conv考虑哪些激活函数。此外,空间投影考虑了特征图中的所有信息,并选择了激活度最高的元素作为下一步的考虑对象。注意,max pooling的 kernel与ResBlock的中间conv的 kernel一致,这确保了在同一空间窗口上计算的元素之间执行元素级的加法。这一方法减少了信息的损失。
除了减少信息损失和信号干扰外,以上方法在每个主阶段的Start ResBlock上设置最大池化,提高了网络的平移不变性,最终提高了整体识别性能。同时执行下行采样的每个阶段的Start ResBlock可以被视为”soft downsampling”(或加权下采样)的组合,由Start ResBlock的3x3 conv(具有可学习的下采样权值)完成;硬下采样,通过projection shortcut中的的3x3 max pooling来完成。这两种向下采样都具有互补的好处。硬下采样有利于分类(选择激活度最高的元素),而软下采样也有助于不丢失所有的空间上下文信息(因此有助于更好的定位,因为元素之间的过渡更平滑)。这种方法没有向模型添加任何额外的参数。ResNet通常只需要4个projection shortcuts,即在每个阶段的开始(在阶段的开始ResBlock上)。因此,ResNet计算成本的增加可以忽略不计。
(三)、 Grouped building block
出于实际考虑,ResNet中引入了Grouped building block,以在增加网络深度时保持合理的计算开销。它首先包含一个用于减少通道数量的1x1 conv,然后是一个作用于最小数量的输入/输出通道的3x3 conv,最后,一个将通道数量增加到原来的1x1 conv。这种设计的原因是在较小的通道上运行3x3 conv,以保持计算成本和参数的数量在控制之下。然而,3x3 conv非常重要,因为它是唯一能够学习空间模式的组件,但在瓶颈设计中,它接收的输入/输出通道数量更少。
在改进的building block中,包含了一个3x3 conv上最大数量的输入/输出通道。提出的building block设计中,使用了分组卷积,作者称之为ResGroup块。对于标准卷积,每个输出通道都连接到所有的输入通道。分组卷积的主要思想是将输入通道分成若干组,并对每一组单独进行卷积运算。通过这种方式,参数(params)和浮点运算(FLOPs)的数量可以减少一个等于组数量的因子。参数和FLOPs的数量可以计算为:
式中, c h i n ch_{in} chin?、 c h o u t ch_{out} chout?为输入输出通道数; K 1 K_1 K1?和 k 2 k_2 k2?表示conv的核大小;W、h为通道的宽度、高度;G表示信道被分成的组数。如果G = 1,那么就是一个标准的卷积。如果G等于输入通道数,则为深度卷积。
本文所提出的网络体系结构与原始ResNet-50具有类似的计算代价和参数数量,如下图所示。为了控制参数的数量和计算开销,对3x3 conv进行了分组卷积。请注意,每个卷积都包含一个BN和一个ReLU(为简单起见,不进行表示)。本文提出了两个架构:
(1)ResGroupFix-50表示每个阶段的组数是固定的(在例子中是64)。
(2) ResGroup-50代表了调整通道组数量的情况,在这种方式下,所有阶段每组有相同数量的通道(在例子中是32)。ResGroup-50具有与原始ResNet-50相似的参数数量和更多的FLOPs。
不同于原ResNet和ResNeXt使用一个bottleneck building block,在示例中,作者使用一个ResGroup块,从而将焦点从1×1 conv 改变到 3×3,如下图。通过这种方法,3×3 conv拥有最多的通道数量和更高的学习空间模式的能力。
ResNet和ResNeXt都使用了一个bottleneck形状,其中空间conv (3x3)运行在最小数量的通道上(1x1 conv有最大数量的通道),而在本文提出的结构中,在33 conv最多的通道上运行。这能够改善3x3 conv性能(3x3 conv是唯一负责学习空间模式的组件),因此,给予3x3 conv最多的通道可以改善功能检测。
五、实验细节
在所有数据集上,使用standard momentum为0.9和权值衰减为0.0001的SGD优化器。对于ImageNet和两个视频数据集,对模型进行90个epoch的训练,从0.1的学习速率开始,在第30、60和80个epoch将其降低1/10。对于ImageNet,使用标准的256的mini-batch和数据扩充。对于视频,使用64个片段的mini-batch。在对象检测任务中,使用了包含80个对象类别的COCO数据集。模型在COCO train2017 (118K图像)上训练,并在val2017 (5K图像)上测试。使用momentum为0.9的SGD优化器,权值衰减0.0005。使用8个gpu,每个gpu有32batch size,训练了130个epoch(总体60K训练迭代)。从0.02的学习率开始,并在86和108时代之前将其降低1/10。我们在第一个epoch中使用linear warmup。数据增强使用随机裁剪、随机水平翻转和颜色抖动。
(一)、Results of iResNet on ImageNet.
在所有结构中,ResStage优于baseline[6]和[7]。将改进的shortcut projection添加到ResStage形成了iResNet,这进一步改善了结果,显著优于[6]和[7]。对于50个layers来说,iResNet与baseline[6]相比,top-1的误差降低了1.19%,与baseline[7]相比,降低了1.08%。在200层网络中,baseline开始出现退化问题。将深度从152层增加到200层,本文的方法有了更好的结果。然而,对于baseline,验证结果和训练结果都是相当糟糕的。对于baseline,200层的结果甚至比101层的结果更糟糕。这表明了严重的优化问题,表明ResNet架构在通过许多层传播时损害了信号。而iResNet则是随着深度的增加而不断改进结果。在200层网络中,iResNet的性能大大优于ResNet, top-1误差为1.93%
下图展示了iResNet与50-、101-、152-和200层网络的baseline比较的学习曲线。iResNet的训练误差随着深度的增加而减小,显示了优化的成功。提议的iResNet加速了学习过程。例如,在50层上,在第一个区间(前30个epoch,在第一次降低学习速率之前),iResNet仅仅需要8个epoch就能超过ResNet[6]在前30个epoch上的最佳结果。当增加深度时,差异甚至更严重。因此,本方法改善了训练的收敛性,并且可以大大减少训练的时间来超过baseline。重要的是,iResNet的所有这些改进几乎都是没有增加模型的复杂性。
将层数增加到302层。结果如下所示。在这个深度下训练baseline ResNet,不能收敛到一个好的结果,显示出严重的优化问题。当增加到302层时,iResNet仍然没有出现优化问题,因为深度的增加提高了训练和验证错误的性能。当进一步增加了404层的深度。
增加深度时的训练曲线如下。即使有了这种极端的深度,iResNet仍然显示没有收敛问题。
(二)、Results of ResGroup on ImageNet
上图显示了ResGroup和ResGroupFix与baseline相比的结果。整合ResStage和改进的shortcut projection的想法,构建改进的ResGroup和ResGroupFix (iResGroup和iResGroupFix)。所有提出的架构都显著优于baseline ResNet[6]和ResNeXt[35]。例如,在深度50时,iResGroupFix比baseline的top-1提高2%,而iResGroup提高2.33%。下图显示了训练曲线。
(三)、Results on COCO object detection
下图为使用iResNet, iResGroupFix和iResGroup作为SSD的骨干,可以显著改善结果,与baseline ResNet[6]在所有指标上进行比较。
(四)、Comparison to other networks on ImageNet
下图显示,在ImageNet上与其他强大的网络架构相比具有竞争力。有一些方法,例如[36,10]有更好的结果。然而,这些方法使用更长的培训schedules,更大的培训crop和/或更复杂的网络构建块。例如,[10]使用SE来改进结果,这增加了模型的复杂性。
六、更多实验细节
表9给出了50-、101-、152-、200-、302-、404层深度网络每个阶段的bottleneck blocks数。
iResNets在验证结果上显示出一致且显著的改进。除此之外,iResNets的训练集收敛结果比ResNets更加显著,表明了优化的效率。使用额外的正则化技术,如dropout,可能会对本方法产生更大的改进。
而我们在ImageNet上训练所有的模型都使用标准224×224(并使用相同的图片大小进行验证),也可以只对320×320图片大小执行验证,这可以大大改善结果。这很容易实现,因为ResNets的性质是完全卷积的。下表显示了320×320验证的结果。
在shortcut projection方面
(1)使用max pooling(而不是average pooling),这有助于提高网络的平移不变性,最终提高识别性能。此外,max pooling更适合执行局部信息(通过获取最高激活),而平均池对于收集全局信息表现良好(因为在更大的区域可能有许多高激活,它们的平均可能更好地描述信息)。
(2)使用3x3卷积进行池化。这样,max pooling内核的大小等于从Start Block开始的空间卷积(3x3conv)的大小。这是很重要的,因为它确保了元素的加法(在shortcut projection和main block之间)是在同一个空间窗口中计算的元素之间执行的