ResNet网络模型的详细过程解析

resnet 网络结果绘图 resnet网络模型_卷积


以ResNet50为例,详细解析网络的连接过程:(可以参考着本博客最后一张图进行理解)

224x224x3的图片作为输入,经过7x7的卷积核,进行步长为2的卷积,得到大小112x112通道数为64的卷积层。然后经标准化BN和激活函数Relu。
然后经过3x3的最大池化层进行步长为2的池化。得到大小为56x56,通道数64保持不变的输出结果,记为stage0_1。然后对stage0_1进行1x1步长为1的卷积,得到通道数为64的卷积层,然后BN标准化,再Relu,得到输出结果,再对结果进行3x3的卷积核步长为1进行卷积,得到通道数为64大小不变的卷积层,然后BN,再Relu,对得到的结果,再经过1x1的卷积核步长为1进行卷积,得到通道数为256的卷积层,再进行BN,这时得到的结果记为stage1_1_1,这时把得到的结果stage1_1_1与之前得到的结果stage0_1进行融合。由于stage0_1的通道数为64,大小size不变,依然为64x64,所以对其进行升维,经过1x1升维到256维度,因为stage1_1_1是BN后的结果,所以升维到256后的结果也要进行BN,才可以与stage1_1_1进行融合。

resnet 网络结果绘图 resnet网络模型_卷积_02


再对融合之后的结果进行Relu,得到的结果记作stage1_1_2,然后对stage1_1_2经过1x1的卷积,把256通道数的特征层进行降维到64通道,然后使用3x3卷积核,经过BN和Relu,然后使用1x1卷积核,得到56x56大小,通道数为256的卷积层,然后再BN,得到结果stage1_2_1,然后把之前得到的结果stage1_1_2与stage1_2_1进行融合,因为b和c在size和channel上一致,所以直接进行融合即可,然后对得到的融合结果再进行Relu。同理,与stage1的第三个bottelneck进行同样的操作,得到融合后的结果,size为56x56,channel为256。然后再对融合后的结果进行Relu,得到stage1_3_2。

resnet 网络结果绘图 resnet网络模型_深度学习_03


Relu之后的结果进入Stage2,先进行1x1卷积操作,步长为2,进行size的缩小,缩小为28x28,channel也由256降到128,再进行BN和Relu。对得到的结果进行3x3卷积操作,步长为1,再进行BN和Relu,再进行1x1的卷积操作,再进行BN,这时得到结果stage2_1_1,这时把stage1_3_2和stage2_1_1进行融合,但是由于两者的size和channel不同,所以需要对stage1_3_2进行升维(1x1卷积核进行升维)和下采样,升维到512,下采样到28x28,再进行BN,把得到的升维和下采样的结果与stage2_1_1进行融合,融合之后在进行Rule,得到的结果记作stage2_1_2。然后把stage2_1_2进行3x3的卷积操作,再进行BN和Relu,得到的结果进行1x1的卷积操作,再BN得到的结果为stage2_2_1,与之前得到的stage2_1_2进行融合,由于两者在size和channel上保持一致,所以直接进行融合即可……按照以上情况完成stage2。

resnet 网络结果绘图 resnet网络模型_resnet 网络结果绘图_04


接下来的stage3,stage4都是一样的原理,是stage4最后输出的结果大小为7x7,通道数为2048。
然后对该结果进行7x7的一个全局平均池化,得到1x1x2048的一个向量特征,然后与1000个神经元做全连接,对输出的1000个值进行softmax。
可以参考以下几张图进行理解:

resnet 网络结果绘图 resnet网络模型_深度学习_05


resnet 网络结果绘图 resnet网络模型_深度学习_06