当前位置:   article > 正文

【ResNet】Deep Residual Learning for Image Recognition

deep residual learning for image recognition

1. Introduction

在这里插入图片描述
网络的深度在深度学习中非常重要,但是训练很深的网络是一件很难的事情。非常深的网络不是简单地堆叠更多的层,其中的梯度消失/梯度爆炸会使模型难以收敛。归一初始化和中间归一化在很大程度上解决了这一问题,使得数十层网络在反向传播的随机梯度下降上能够收敛。

但是深层网络收敛之后,出现了一个普遍的退化问题:精确度饱和之后就会快速退化。这并非由过拟合造成,但是实验表明在模型深度合理的情况下,更多的层却导致了更高的训练和测试误差。上图所示,56层的网络比20层网络往往会得出更大的训练误差和测试误差。

但是按理来说,一个更深模型的表现性能不应该比其更浅模型的性能差,但实际上目前的方法如SGD很难找到更深模型上的优化方法。

本文提出的方法核心:

在这里插入图片描述
使用了之前提出的shortcut,形成本文残差连接的identity mapping,这个identity mapping的输出和对叠层的输出相加。这种identity shortcut connection既不会给网络增加额外参数,也不会增加计算复杂度,整个模型还是可以使用SGD来反向传播,进行端到端的训练,也不用改动常用库就可以实现模型(当时常用caffe)。

作者实验:

  • 有残差的深度网络易于训练,且表现性能优于无残差的深度网络
  • 有残差的深度网络随着模型深度的增加,模型表现性能大幅提升

2. Related Work

Residual Representations.

图像识别中,矢量计算中的残差矢量编码效率比原始矢量编码高。

在低层视觉和计算图形任务上,常用的多格方法(Multigrid method)将PDEs(Partial Differential Equations)问题归为多尺度问题中的子问题,每个子问题负责粗尺度和细尺度之间的残差解。

Shortcut Connections.

早期训练多层感知机(MLPs)的方法就是在网络的输入到输出中添加一个线性层。且有些中间层直接和辅助分类器相连来解决梯度消失和爆炸问题。“highway networks”中也有用过shortcut,不过是搭配门函数来实现,但其中的门是依赖数据并也含有参数的,但本文中的残差连接不含参数。且“highway networks”中的层为封闭的非残差层,但本文中的identity shortcut并非封闭,所有的信息可以直接传入,来学习额外的残差函数,且highway networks中并没有随着网络深度增加精确度增加的现象。

3. Deep Residual Learning

3.1. Residual Learning

3.2. Identity Mapping by Shortcuts

维度相同:
在这里插入图片描述
维度不同:
在这里插入图片描述

3.3. Network Architectures

在这里插入图片描述

Residual Network

当输入和输出都是相同维度时,eqn1中的模块可以直接使用,如3.3. Network Architectures中图的实线shortcut。当维度增加时,如3.3. Network Architectures中图的虚线shortcut,残差连接处理这种输入和输出形状不同的情况时有两种解决方案可供选择:

  • 维度少的向量通过pad填充0来和维度多的向量匹配,然后使用eqn1来计算。该方法不会引入额外参数。
  • 用eqn2,通过1x1卷积来匹配维度,使得输出通道是输入通道的两倍。

对于以上两个方案,当shortcut要经过两个尺寸不同的特征图时,其stride都为2.

3.4. Implementation(实现细节)

训练:

  • 将图像短边随机缩放到[256,480]长度:短边随机缩放值较大的好处:图像切割为224,224大小时的随机性更大
  • 随机裁剪图像大小至224,224。并进行水平翻转,每个像素减去像素平均值进行中心化
  • 使用了标准的色彩增强(如AlexNet中用的是PCA做色彩增强)
  • 在每个卷积层后和激活函数前使用了Batch Normalization
  • 权重初始化和作者上一篇论文使用的方法一样(此处不细解),并重新训练了网络。使用SGD,batch size为256,学习率……, 没用dropout
    测试:
  • 测试时用的10-crop(随机采样10张图片做测试,结果做平均)
  • 在不同分辨率{224,256,384,480,640}上做测试(刷榜常见手法,但实际上用得不多)

4. Experiments

4.1. ImageNet Classification

采用ImageNet 2012 的图像分类数据,含有1000个类别,128万训练集,5万验证集。在10万测试集上得到最终结果,测试了模型top-1和top-5的错误率。

Plain Networks

在这里插入图片描述
评估了18-layer和34-layer的网络,table1为两个网络的结构细节。最后的FLOPs表示该网络需要计算的浮点次数。table1中的34-layer到50-layer的区别就是50-layer使用的是bottleneck设计,但是复杂度没有太大变化。

不同层网络主要是中间的卷积层结构不一样,其中
在这里插入图片描述
对应在这里插入图片描述
其中包括两个3x3卷积,通道数为64
在这里插入图片描述
x3表示复制三次(复制次数为参数,可调),所以1+3x2+4x2+6x2+3x2+1=34 层

在这里插入图片描述
table2显示在深层的34-layer和浅层的18-layer网络中有无残差结构的top-1误差率。残差连接的性能提升效果显著。在这里插入图片描述
Figure4可视化了残差连接的训练效果,有残差收敛会快很多。

Residual Networks
Identity vs. Projection Shortcuts.

在这里插入图片描述

表3对比了三个方案的结果:
A:填充0升维
B: 使用projection shortcuts升维,其他都是identity shortcuts
C:全部使用projection shortcuts

实验表明使用这三种方案的网络性能都比plain网络好,B稍微比A好,因为A的zero-padded维度不能残差学习;C稍微比B好,因为C用的全部都是projection shortcut,会比B额外引入更多的参数。但是ABC的细微差别也说明了projection shortcuts不是解决退化问题的关键,所以后文中并没有再使用C方案,以免提升了模型复杂性和规模大小。identity shortcuts对于不增加下面介绍的bottleneck架构的复杂性特别重要。

Deeper Bottleneck Architectures.(50层以上的网络)

在这里插入图片描述
fig5中左边的Deeper non-bottleneck ResNets也能从增加的深度中提升精度,但是没有右边的bottleneck ResNets划得来(初始用256通道,再用1x1卷积将其通道数变为64,最后再用1x1卷积将通道数恢复为256)。

bottlenecks design:先把输入特征维度降一次维(1x1卷积降维),然后做空间特征提取(3x3卷积),再投影回去(1x1卷积升维)。

在这里插入图片描述

所以bottleneck的设计主要依据实际考量。但是使用bottleneck来设计plain网络还是会出现退化问题。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/617734
推荐阅读
相关标签
  

闽ICP备14008679号