《Deep Residual Learning for Image Recognition》------ResNet 经典网络论文研读

最近看STE-NVNAN的时候开始学习网络,使用pytorch

Abstract

更深层次的神经网络更难训练。我们提出了一个残差学习框架来简化网络的训练,这些网络比以前使用的网络要深刻得多。该框架使得层能根据其输入来学习残差函数而非原始函数(unreferenced functions)。我们提供了全面的经验证据表明,这些残差网络更容易优化,并可以获得精度从大幅增加的深度。在ImageNet数据集上,我们评估残差网络的深度为152层,比VGG网[40]深8倍,但仍然具有较低的复杂性。这些残差网的集合在ImageNet测试集上的误差达到3.57%,该结果在ILSVRC 2015分类任务中获得了第一名。我们还对CIFAR-10进行了100层和1000层的分析。
表达的深度在很多视觉识别任务中具有非常核心的重要性。仅仅由于我们的深度表示,我们在COCO对象检测数据集上获得了28%的相对改进。在2015 ILSVRC和COCO竞赛中,我们提交了大量的深度剩余子网,并在ImageNet检测、ImageNet定位、COCO检测和COCO分割等方面获得了第一名。

1.Introduction

《Deep Residual Learning for Image Recognition》------ResNet 经典网络论文研读_第1张图片
深度卷积神经网络[22,21]在图像分类方面取得了一系列突破[21,49,39]。深度网络自然地以端到端多层的方式集成了低/中/高级别的特性[49]和分类器,并且特性的“级别”可以通过堆叠层的数量(深度)来丰富。最近的证据[40,43]表明,网络深度至关重要,在颇具挑战性的ImageNet数据集[35]上的主要结果[40,43,12,16]都使用了“非常深”的[40]模型,深度为16到30[16]。许多其他非琐碎的视觉识别任务[7,11,6,32,7]也从非常深入的模型中受益匪浅。
在深度的重要性的驱使下,出现了一个新的问题:训练一个更好的网络是否和堆叠更多的层一样简单呢?解决这一问题的障碍便是困扰人们很久的梯度消失/梯度爆炸,这从一开始便阻碍了模型的收敛。归一初始化(normalized initialization)和中间归一化(intermediate normalization)在很大程度上解决了这一问题,它使得数十层的网络在反向传播的随机梯度下降(SGD)上能够收敛。
当深层网络能够收敛时,一个退化问题又出现了:随着网络深度的增加,准确率达到饱和(不足为奇)然后迅速退化。意外的是,这种退化并不是由过拟合造成的,并且在一个合理的深度模型中增加更多的层却导致了更高的错误率,我们的实验也证明了这点。Fig.1展示了一个典型的例子。
《Deep Residual Learning for Image Recognition》------ResNet 经典网络论文研读_第2张图片
(训练精度的降低)表明并不是所有的系统都同样容易优化。让我们考虑一个较浅的体系结构及其更深层的对应结构,它在上面添加了更多的层。通过构造更深层的模型,存在一个解决方案:添加的层是身份映射,其他层是从学习的更浅的模型中复制的。该构造解的存在表明,较深的模型不会比较浅的模型产生更大的训练误差。但实验表明,我们现有的求解器无法找到比构造的解更好或更好的解(或在可行时间内无法找到)。
在本文中,我们通过引入一个深度残差学习框架来解决退化问题。我们不希望每个堆叠的层直接适合一个期望的底层映射,而是显式地让这些层适合一个残差的映射。形式上,我们将期望的底层映射表示为H(x),让堆叠的非线性层适合F(x)的另一个映射:= H(x)−x。原始映射被重新映射为F(x)+x。我们假设优化残差映射比优化原始的未引用映射更容易。在极端情况下,如果一个恒等映射是最优的,那么将残差推到零要比通过一堆非线性层来适应一个身份映射更容易。
F(x) +x的表达式可以通过具有“快捷连接”的前馈神经网络来实现(图2)。快捷连接[2,33,48]是指跳过一个或多个层的连接。在我们的例子中,快捷连接只是简单地执行标识映射,它们的输出被添加到堆叠层的输出中(图2)。标识快捷连接既不增加额外的参数,也不增加计算复杂度。整个网络仍然可以通过SGD使用反向传播进行端到端训练,并且可以使用公共库(例如,Caffe[19])轻松实现,而无需修改解算器。
我们在ImageNet[35]上进行了综合实验,展示了降解问题,并对我们的方法进行了评价。
结果表明:

  1. 极深残差网格易于优化,而相对的“纯”网格(简单的叠加层)在深度增加时训练误差较大;
  2. 我们的深度残差网可以很容易地从深度的大幅增加中获得精度增益,产生的结果大大优于以前的网络。
    类似的现象也出现在CIFAR-10 set[20]上,这表明优化的困难和我们的方法的效果不仅仅类似于特定的数据集。我们在此数据集上使用超过100层,探索超过1000层的模型。

在ImageNet分类数据集[35]上,我们通过极深残差网得到了很好的结果。我们的152层残差网是迄今为止在**ImageNet上出现的最深的网络,但仍然比VGG网的[40]复杂度低。**我们的集合在ImageNet测试集的top-5 error中占3.57%,在2015 ILSVRC分类竞赛中获得第一名。极深表示在其他识别任务上也有很好的泛化性能,并带领我们在2015 ILSVRC & COCO竞赛中进一步获得了第一名:ImageNet检测、ImageNet定位、COCO检测、COCO分割。这一有力的证据表明,残差学习原理是通用的,我们希望它能适用于其他视觉和非视觉问题。

2. Related Work

残差的表示。
在图像识别中,VLAD[18]是对字典的残差向量进行编码的表示,Fisher向量[30]可以表示为VLAD的概率版本[18]。它们都是图像检索和分类的有力的浅层表示法[4,47]。对于矢量量化,对残差矢量[17]进行编码更有效而不是编码原始向量
在低水平视觉和计算机图形学中,为了求解偏微分方程(PDEs),广泛使用的多重网格方法[3]将系统重新表述为多个尺度上的子问题,其中每个子问题负责较粗和较细尺度之间的剩余解。替代多重网格的一种方法是分层基础预处理[44,45],它依赖于表示两个尺度之间的残差向量的变量。已有研究表明[3,44,45],这些求解器比不知道解的剩余性质的标准求解器收敛得快得多。这些方法表明,一个良好的重新配方或预处理可以简化优化。
Shortcut连接。
导致捷径连接的实践和理论[2,33,48]已经被研究了很长时间。早期训练多层感知器 (multi-layer perceptrons, MLPs)的一个实践是添加一个从网络输入连接到输出的线性层[33,48]。在[43,24]中,一些中间层直接连接到辅助分类器,用于处理消失/爆炸梯度。文献[38,37,31,46]提出了通过快捷连接来调整层响应、梯度和传播误差的方法。在[43]中,“inception”层由一个快捷分支和几个更深的分支组成。
!!:这里讲的这些就是各种深度学习网络的框架!今后可以找一下代码理解一下
Szegedy2015Going + Lee2015deeply
https://arxiv.org/abs/1409.4842
https://arxiv.org/abs/1409.5185
与此同时,“highway networks”将shortcut连接与门控函数 结合起来。这些门是数据相关并且是有额外参数的,而我们的恒等shortcuts是无参数的。当一个门的shortcut是“closed”(接近于0)时,highway网络中的层表示非残差函数。相反的,我们的模型总是学习残差函数;我们的恒等shortcuts从不关闭,在学习额外的残差函数时,所有的信息总是通过的。此外,highway网络并不能由增加层的深度(例如, 超过100层)来提高准确率。

3. Deep Residual Learning

3.1. Residual Learning

我们将(x)看作一个由部分堆叠的层(并不一定是全部的网络)来拟合的底层映射,其中x是这些层的输入。假设多个非线性层能够逼近复杂的函数,这就等价于这些层能够逼近复杂的残差函数,例如, H(x)−x (假设输入和输出的维度相同)。所以我们明确的让这些层来估计一个残差函数:F(x):=H(x)−x 而不是H(x)。因此原始函数变成了:F(x)+x。尽管这两个形式应该都能够逼近所需的函数(正如假设),但是学习的难易程度并不相同。

这个重新表达的动机是由退化问题这个反常的现象(Fig.1,左)。正如我们在introduction中讨论的,如果增加的层能以恒等映射来构建,一个更深模型的训练错误率不应该比它对应的浅层模型的更大。退化问题表明了,求解器在通过多个非线性层来估计恒等映射上可能是存在困难的。而伴随着残差学习的重新表达,如果恒等映射是最优的,那么求解器驱使多个非线性层的权重趋向于零来逼近恒等映射。

在实际情况下,恒等映射不太可能达到最优,但是我们的重新表达对于这个问题的预处理是有帮助的。如果最优函数更趋近于恒等映射而不是0映射,那么对于求解器来说寻找关于恒等映射的扰动比学习一个新的函数要容易的多。通过实验(Fig.7)表明,学习到的残差函数通常只有很小的响应,说明了恒等映射提供了合理的预处理。

3.2. Identity Mapping by Shortcuts

其中x 和y 分别表示层的输入和输出。函数F(x,{Wi})代表着学到的残差映射。在这里插入图片描述Fig.2中的例子包含两层,F=W2σ(W1x),其中σ代表ReLU,为了简化省略了偏置项。F+x操作由一个shortcut连接和元素级(element-wise)的加法来表示。在加法之后我们再执行另一个非线性操作(例如, σ(y),如Fig.2。
在这里插入图片描述
Eq.1中的shortcut连接没有增加额外的参数和计算复杂度。这不仅是一个很有吸引力的做法,同时在对“plain”网络和残差网络进行比较时也是非常重要的。我们可以在参数、深度、宽度以及计算成本都相同的基础上对两个网络进行公平的比较(除了可以忽略不计的元素级的加法)。
在Eq.1中,x和F的维度必须相同。如果不相同(例如, 当改变了输入/输出的通道),我们可以通过shortcut连接执行一个线性映射Ws 来匹配两者的维度(Eq.2):我们在堆叠层上采取残差学习算法

残差函数F的形式是灵活的。本文的实验涉及一个有两层或三层的函数F(图5),还可以有更多的层。但如果F只有单层,则Eqn.(1)类似于线性层:
y = W1x + x,我们没有观察到它的优点。我们还注意到,尽管为了简单起见,上面的表示法是关于全连接层的,但是它们适用于卷积层。函数F(x, {Wi})可以表示多个卷积层。元素方面的添加是在两个feature map上逐通道执行的。

3.3. Network Architectures

我们在多个plain网络和残差网络上进行了测试,并都观测到了一致的现象。接下来我们将在ImageNet上对两个模型进行讨论。
《Deep Residual Learning for Image Recognition》------ResNet 经典网络论文研读_第3张图片

Plain网络。(基础网络without residual block,resnet在此基础上改进)

我们的plain网络结构(Fig.3,中)主要受VGG网络 (Fig.3,左)的启发。
卷积层主要为3*3的滤波器,
并遵循以下两点要求:

  • (i) 输出特征尺寸相同的层含有相同数量的滤波器;
  • (ii) 如果特征尺寸减半,则滤波器的数量增加一倍来保证每层的时间复杂度相同。我们直接通过stride 为2的卷积层来进行下采样
    *** 在网络的最后是一个全局的平均pooling层和一个1000 类的包含softmax的全连接层。加权层的层数为34,如Fig.3(中)所示**。

值得注意的是,我们的模型比VGG网络(Fig.3,左)**有更少的滤波器和更低的计算复杂度。**我们34层的结构含有36亿个FLOPs(乘-加),而这仅仅只有VGG-19 (196亿个FLOPs)的18%。

残差网络。

在以上plain网络的基础上,我们插入shortcut连接(Fig.3,右),将网络变成了对应的残差版本。如果输入和输出的维度相同时,可以直接使用恒等shortcuts (Eq.1)(实线部分)。当维度增加时(Fig.3中的虚线部分),考虑两个选项:
(A) shortcut仍然使用恒等映射,在增加的维度上使用0来填充,这样做不会增加额外的参数;
(B) 使用Eq.2的映
射shortcut来使维度保持一致(通过1*1的卷积)。
对于这两个选项,当shortcut跨越两种尺寸的特征图时,均使用stride为2的卷积。

3.4 实现

我们对ImageNet的实现遵循了[21,40]中的实践。在[256,480]中,对图像的短边随机采样来调整大小,以增加[40]的比例。一个224×224作物是随机抽样从一个图像或其水平翻转,每个像素的平均值减去[21]。使用[21]中的标准颜色增强。我们在每次卷积之后,激活之前,[16]之后,采用批量归一化(BN)[16]。我们初始化权重 如在[12]和培训所有平原/剩余网从零开始。我们使用的SGD的小批量大小为256。学习速率从0.1开始,当误差趋于稳定时除以10,对模型进行多达60×104次迭代的训练。我们使用重量衰减为0.0001,动量为0.9。我们不使用dropout[13],遵循[16]的实践。
在试验中,为了进行比较研究,我们采用了标准的10-crop试验[21]。为了得到最好的结果,我们采用了[40,12]中的全卷积形式,并在多个尺度下对分数进行平均(将图像的短边调整为{224,256,384,480,640})。

实验11

参考大佬: https://blog.csdn.net/wspba/article/details/57074389
观测到以下三点:

第一,与plain网络相反,34层的ResNet比18层ResNet的结果更优(2.8%)。更重要的是,34 层的ResNet在训练集和验证集上均展现出了更低的错误率。这表明了这种设置可以很好的解决退化问题,并且我们可以由增加的深度来提高准确率。

第二,与对应的plain网络相比,34层的ResNet在top-1 错误率上降低了3.5% (Table 2),这得益于训练错误率的降低(Fig.4 右 vs 左)。这也验证了在极深的网络中残差学习的有效性。

最后,我们同样注意到,18层的plain网络和残差网络的准确率很接近 (Table 2),但是ResNet 的收敛速度要快得多。(Fig.4 右 vs 左)。
如果网络“并不是特别深” (如18层),现有的SGD能够很好的对plain网络进行求解,而ResNet能够使优化得到更快的收敛。

Identity Shortcuts恒等 vs 映射 Projection Shortcuts。
我们已经验证了无参数的恒等shortcuts是有助于训练的。接下来我们研究映射shortcut(Eq.2)。在Table 3中,我们比较了三种选项:
(A) 对增加的维度使用0填充,所有的shortcuts是无参数的(与Table 2 和 Fig.4 (右)相同);
(B) 对增加的维度使用映射shortcuts,其它使用恒等shortcuts;
© 所有的都是映射shortcuts。

Table 3表明了三种选项的模型都比对于的plain模型要好。B略好于A,我们认为这是因为A中的0填充并没有进行残差学习。C略好于B,我们把这个归结于更多的(13个)映射shortcuts所引入的参数。**在A、B、C三个结果中细小的差距也表明了映射shortcuts对于解决退化问题并不是必需的。**所以我们在本文接下来的内容中,为了减少复杂度和模型尺寸,并不使用选项C的模型。恒等shortcuts因其无额外复杂度而对以下介绍的瓶颈结构尤为重要。

深度瓶颈结构Deeper Bottleneck Architectures.

接下来我们介绍更深的模型。考虑到训练时间的限制,我们将构建块修改成\emph{瓶颈}的设计。对于每一个残差函数,我们使用了三个叠加层而不是两个(Fig.5)。 这三层分别是11、33 和11 的卷积,11 的层主要负责减少然后增加(恢复)维度,剩下的3*3的层来减少输入和输出的维度。Fig.5展示了一个例子,这两种设计具有相似的时间复杂度。

**无参数的恒等shortcuts对于瓶颈结构尤为重要。**如果使用映射shortcuts来替代Fig.5(右)中的恒等shortcuts,将会发现时间复杂度和模型尺寸都会增加一倍,因为shortcut连接了两个高维端,所以恒等shortcuts对于瓶颈设计是更加有效的。

50层 ResNet:我们将34层网络中2层的模块替换成3层的瓶颈模块,整个模型也就变成了50层的ResNet (Table 1)。对于增加的维度我们使用选项B来处理。整个模型含有38亿个FLOPs。

101层和152层 ResNets:我们使用更多的3层模块来构建101层和152层的ResNets (Table 1)。值得注意的是,虽然层的深度明显增加了,但是152层ResNet的计算复杂度(113亿个FLOPs)仍然比VGG-16(153 亿个FLOPs)和VGG-19(196亿个FLOPs)的小很多。

50/101/152层ResNets比34层ResNet的准确率要高得多(Table 3 和4)。而且我们并没**有观测到退化问题。**所有的指标都证实了深度带来的好处。 (Table 3 和4)。

Fig.5
Fig.5 对于ImageNet的一个更深的残差函数。左:对于ResNet-34的如Fig.3描述的构建块。右:对于ResNet-50/101/152的“瓶颈”构建块。

附录

附录部分为作者针对ResNet在目标检测、目标定位上的应用进行了解释,证明了ResNet强大的泛化能力,感兴趣的同学可以好好研究这篇论文,是非常有学习价值的。
补充几个作者没有写的点:

1.inplanes表示输入的通道数,因为resnet中每个block会改变channel数,但几个相同的block串联的时候,会导致channel数合不上,inplanes用于记录当前block的输入channel数,当block的实际输入channel数和所需的输入channel数不一致时,会加入一个downsample。

2.expansion表示经过一个block后,channel是原来的几倍。

你可能感兴趣的:(文献翻译,学习日常,个人记录)