计算机视觉|ResNet结构以及残差块详细分析

ResNet结构以及残差块详细分析

ResNet结构如下
计算机视觉|ResNet结构以及残差块详细分析
文章图片

残差块结构以及分析
计算机视觉|ResNet结构以及残差块详细分析
文章图片

??输入特征矩阵以两个分支进入残差块,直线分支经过多个卷积层产生输出特征矩阵,**注意:**在直线残差块中,经过最后一个卷积层之后并不是立刻通过激活函数ReLU激活(残差块中除去最后一个卷积层,其他的卷积层都是产生输出特征矩阵之后立刻进行激活),而是要和shortcut分支传过来的特征矩阵相加之后再进行激活。在这里涉及到了矩阵的相加,那么就要求直线分支(主分支)和shortcut分支(旁分支)的输出特征矩阵的shape(高、宽、channel)必须相同。
【计算机视觉|ResNet结构以及残差块详细分析】??ResNet50/101/152残差块的分析: 从Figure 5 的右图可以看到,输入为256维的特征矩阵,首先经过了一个1*1,维度为64的卷积核,最后64维度的特征矩阵经过一个1*1,维度为256的卷积核,这两个卷积核的分别是进行 降维(高和宽不变 channel变少) 和 升维(高和宽不变 channel变多) 的作用。对于 Figure 5的右图,残差块的卷积层分布为:256-d -> 1*1,64channels -> 3*3,64channels -> 1*1,256channels -> 256-d 而不是 256-d -> 3*3,256channels -> 3*3,256channels -> 256-d的原因:可以通过复杂度进行分析,对于第一种来来说,复杂度为 1*1*256*64(1*1*256为输入特征矩阵的宽高维度 64为卷积核的维度)+3*3*64*64 + 1*1*64*256 = 69632,而对于第二种来说,复杂度为 3*3*256*256+3*3*256*256=1179648,相比第二种来说,第一种的复杂度大大降低。
ResNet残差块虚线shortcut分析以及ResNet32和ResNet50/101/152的差异
计算机视觉|ResNet结构以及残差块详细分析
文章图片

??上图中的残差块之间存在虚线连接和实线连接,我们以第一个虚线连接为例进行说明,虚线开始的位置的输入特征矩阵为[56,56,64],即高度为56,宽度为56,channel为64,第一个虚线的输出的特征矩阵为[28,28,128],对虚线处的细化图如下:
计算机视觉|ResNet结构以及残差块详细分析
文章图片

??上图表示的是ResNet50的残差块的网络结构,和ResNet32不同之处在于:ResNet50的虚线入口的第一个卷积层的stride为1,而不是像ResNet32中所写的stride为2,在ResNet50中,第一个卷积层只是负责降维,而不负责宽和高的变化,而第二个卷积层3*3,128负责宽和高的变化(在这里说一下此篇文章的第一幅图中conv3_x的output_size标示的为28*28,这个output_size是对应的一个残差块整体,而不是对应的每一个卷积层的输出)。
ResNet32和ResNet50/101/152的不同之处: 第一个不同就是上面两段话所说的,第二个不同如下:对于ResNet32网络来说,conv2_x的残差块的第一层不需要使用虚线连接,因为经过 maxpool 之后,特征矩阵变为56*56*64了,在conv2_x中不需要再进行维度变化和宽高变化了,而对于ResNet50/101/152来说,maxpool之后特征矩阵变为56*56*64,但是在conv2_1之后输出的特征矩阵应该为 56*56*256,所以需要在conv2_x的第一层即conv2_1进行维度的变化而不需要进行宽高的变化,所以对于ResNet50/101/152来说,需要在conv2_1使用虚线连接,从而保证主分支和shortcut的输出特征矩阵的shape相同。

    推荐阅读