经典网络ResNet讲解

ResNet论文:Deep Residual Learning for Image Recognition
经典网络ResNet讲解_第1张图片

0 序言

ResNet网络是在2015年微软实验室提出,斩获当年ImageNet竞赛中分类任务第一名,目标检测第一名。获得COCO数据集中目标检测第一名,图像分割第一名。下图是ResNet34层模型的结构简图。
经典网络ResNet讲解_第2张图片

  • 在34层的ResNet网络中,首先是一个7x7的卷积层,然后接着池化层,然后堆叠一系列的残差结构。最后在通过平均池化下采样和全连接层得到最终的输出。

网络亮点
1)超深的网络结构(突破1000层),而AlexNet,VGG,GoogleNet它们的深度也就在10几层到20层之间,而ResNet最多突破1000层。
2) 提出residual模块
3) 使用Batch Normalization 加速训练(丢弃dropout)

  • 在ResNet网络提出之前,传统的卷积神经网络都是通过将一系列卷积层与下采样层进行堆叠得到的。但是当堆叠到一定网络深度时,就会出现两个问题。1)梯度消失或梯度爆炸。 2)退化问题(degradation problem)。
  • 在ResNet论文中说通过数据的预处理以及在网络中使用BN(Batch Normalization)层能够解决梯度消失或者梯度爆炸问题。如果不了解BN层可参考这个链接。但是对于退化问题(随着网络层数的加深,效果还会变差,如下图所示)并没有很好的解决办法。

    上图就是通过简单的将卷积层和池化层进行堆叠搭建的网络结构,图中橙黄色曲线的是20层的网络结构,可以发现它最终的训练错误在1%-2%左右;但56层的网络它的训练错误率在7%-8%左右,很明显通过简单堆叠卷积层和最大池化下采样层去堆叠我们的网络,并不是说层数越深效果越好。明显56层的网络还没有20层网络效果好。那为什么效果会更差呢,论文作者提出2个原因。
    1)随着网络层数的不断加深,梯度消失 和梯度爆炸会越来越明显(通过BN来解决)
    2)退化问题(degradation problem)

所以ResNet论文提出了residual结构(残差结构)来减轻退化问题。下图是使用residual结构的卷积网络,可以看到随着网络的不断加深,效果并没有变差,反而变的更好了。
经典网络ResNet讲解_第3张图片

网络结构

residual 结构

经典网络ResNet讲解_第4张图片

  • 有两种不同的残差结构,左边的残差结构是针对网络层数较少的网络所使用的残差结构,比如ResNet34.而右边的残差结构是针对ResNet-50/101/152
  • 左边的残差结构,它的主线是将我们特征矩阵通过2个3x3的卷积层得到我们的结果,然后shortcut直接从输入链接到输出,然后两个分支的输出进行Add操作,相加之后在通过relu激活函数。注意相加的前提是,两个分支输出的特征矩阵shape要完全一样。
  • 右边的残差结构:主分支首先通过1x1卷积,再通过一个3x3的卷积层,然后再通过1x1的卷积层,然后shortcut直接从输入链接到输出,然后两个分支的输出进行Add操作,相加之后在通过relu激活函数。,。与左边的残差结构的区别为在输入和输出都加上了1x1的卷积层。这两个1x1卷积的作用分别起到降维和升维的作用。

实线和虚线的残差结构

经典网络ResNet讲解_第5张图片

  • 对于2层3x3的残差结构而言,实线部分的输入特征矩阵和输出特征矩阵是一摸一样的,所以能够直接进行相加。但是对于我们虚线的残差结构,它的输入和输出shape可以发现其实是不一样的。并且虚线残差结构中主分支的第一个3x3卷积对应的stride=2,通过stride=2将高宽压缩为原来的一半,同时shortcut分支加上了一个1x1的卷积核,它同样是采用步距为2的卷积核进行卷积,通过卷积后它的特征矩阵高和宽缩减为原来的一半,同时调整输出的channel和输入的channel一样。这样的话主分支和捷径分支输出的特征矩阵是一模一样的,这样才可以Add相加。
    经典网络ResNet讲解_第6张图片
  • 同样对于更深层次的残差结构而言,实现的残差结构输入输出shape也是一样的。对于虚线的残差结构,输出输出shape不一样,利用shortcut分支的1x1卷积调整channel和宽高,使得可以和主分支进行Add
  • 虚线残差结构,主分支的第一个1x1卷积主要起到降维的作用将深度channel从256降为128.并没有改变特征矩阵的高和宽。但是第二个3x3的卷积层它的步距为2,通过3x3卷积层之后输出的特征矩阵高和宽就缩减为原来的一半,变成了28x28x128,然后再通过1x1卷积层增加它的channel,使得特征矩阵从28x28x128变成28x28x512 。对于捷径分支通过1x1卷积进行处理,对应的stride步距为2,通过该卷积特征矩阵的高宽缩减为原来的一半,变为28x28,channel为512. 这样就能与主分支的输出进行Add相加。

虚线的捷径分支,通过1x1卷积调整输出特征矩阵的宽高以及channel.

ResNet 网络结构

经典网络ResNet讲解_第7张图片

  • 上图所对应的是原论文给出的网络参数列表,所对应的分别是18层的网络,34层的网络,50层的网络,101层的网络,152层的网络。
  • 这几个网络的基本框架都是类似的,同样都是通过一个7x7的卷积层,然后再通过一个3x3的最大池化下采样,然后再通过一系列的残差结构,然后最后跟上平均池化下采样以及全连接层作为输出,并将输出通过softmax转化为概率分布。
  • 表中将残差结构,分为conv2_x,conv3_x,conv4_x,conv5_x等一系列残差结构,对于ResNet34网络来说,conv2_x使用了3个残差结构,conv3_x对应的一系列残差结构一共有4个残差结构;接下来有对应conv4_x对应的一系列残差结构一共有6个残差结构,再接下来有对应conv5_x对应的一系列残差结构一共有3个残差结构.
  • 对于resnet50/101/152网络中的conv2_x,conv3_x,conv4_x,conv5_x它们所对应的一系类残差结构的第一层都是虚线残差结构,因为第一层必须要将它上一层的特征矩阵的高和宽以及channel调整为当前层所需要的高宽以及channel.所以通过conv2_x,conv3_1,conv4_1,conv5_1中的一系列残差结构的第一层来调整通道的大小或者特征图长宽的压缩
  • 对于浅层网络resnet18,resnet34他们所对应的conv2_x一系列残差结构的输入输出特征矩阵shape是一样的,不需要虚线的残差;而对于更深层的网络resnet50/101/152,通过最大池化下采样之后它所得到的特征矩阵shape为56x56x64,但是它们输出的特征矩阵是56x56x256,所以对于resnet50/101/152它们对于的conv2_x所对应的一系列残差结构,它们的第一层也是虚线的残差结构,但是它们的虚线结构只用来特征输出特征矩阵的channel,而对于conv3_1,conv4_1,conv5_1它不仅调整了channel,还改变了特征矩阵的高和宽。

你可能感兴趣的:(图像分类,网络,深度学习,计算机视觉)