resnet50结构分析,ResNet50模型计算过程详解?

resnet迄今为止,仍然是最佳的backbone.
resnet的全称为深度残差网络,Deep Residual Network
在resnet的论文Deep Residual Learning for Image Recognition中,作者给出了这样几个模型:resnet18,resnet34,resnet50,resnet101,resnet152.
这些模型,都是由使用残差模块residual block构成的,不然为什么叫做residual network 呢?
那么resnet中的残差模块residual block是怎样的呢?
其实resnet中有两种残差模块:basic residual block 和 和 bottleneck residual block,如下图所示:

resnet50结构分析,ResNet50模型计算过程详解?

文章插图
左边为basic residual block,右边为bottleneck residual block 。
在resnet18,resnet34中,使用的是左边的basic residual block
在resnet50,resnet101,resnet152中使用的是右边的bottleneck residual block.
上一篇文章中我们详细介绍了resnet18的计算过程 。
这篇文章主要详细介绍resnet50的计算过程 。
resnet50结构分析,ResNet50模型计算过程详解?

文章插图
如论文中的 Table-1所示,resnet50的模型结构是表中的第5列 。
给一张224x224x3的图片img,我们输入到resnet50模型,看看它是如何得到模型输出的 。
我们先把图片矩阵变换为:3x224x224
3x224x224的img
经过kernel_size=7,in_channel=3,output_channel=64,stride=2,padding=3的same卷积,bn,relu得到64x112x112的feature map
接着经过kernel_size=3,stride=2的map pooling,得到64x56x56的feature map: F4
得到F4后,将其输入到bottleneck residual block中,得到256x56x56的feature map:F5
这就是一个典型的经典的bottleneck residual block的计算过程 。
这里面有一个细节要注意:当F4和F4_1的维度不相等时,我们就用一个1×1的卷积,将F4进行维度变换得到F4_2. 保证F4_2在feature map 的size和channel都与F4_1相等时,再将F4_1+F4_2,再经过relu得到F5
如果F4和F4_1在size 和 维度都相等时,F4_2=F4,然后进行 F4_1+F4_2,经过relu得到 F5.
从64x56x56的F4到256x56x56的F5,就是我们16个bottleneck residual block的第1个block.
F5经过第2个bottleneck residual block得到256x56x56 的 F6,
这一步我们没有对F5进行维度变换得到F5_2,因为F5与F5_1维度相同,可以直接相加
这是我们16个 bottleneck residual block中的第2个block.
F6经过第3个 bottleneck residual block,得到256x56x56 的 F7
注意到,前3个bottleneck residula block中的3×3的卷积的in_channel=out_channel=64,由于这3个 bottleneck residula block中3×3卷积的channel数是一样的,我们通常把他们3个 block合称为resnet50的block1,或者conv2_x,或者layer1.
F7经过第4个bottleneck residual block, 得到512x28x28 的 F8
F8经过第5个bottleneck residual block, 得到512x28x28的F9
F9经过第6个bottleneck residual block, 得到512x28x28的F10
F10经过第7个bottleneck residual block, 得到512x28x28的F11
注意到,这4个bottleneck residula block中的3×3的卷积的in_channel=out_channel=128,由于这3个 bottleneck residula block中3×3卷积的channel数是一样的,我们通常把他们3个 block合称为resnet50的block2,或者conv3_x,或者layer2.
F11经过第8个bottleneck residual block, 得到1024x14x14的F12
F12经过第9个bottleneck residual block, 得到1024x14x14的F13
F13经过第10个bottleneck residual block, 得到1024x14x14的F14
F14经过第11个bottleneck residual block, 得到1024x14x14的F15
F15经过第12个bottleneck residual block, 得到1024x14x14的F16
F16经过第13个bottleneck residual block, 得到1024x14x14的F17
注意到,这6个bottleneck residula block中的3×3的卷积的in_channel=out_channel=256,由于这3个 bottleneck residula block中3×3卷积的channel数是一样的,我们通常把他们3个 block合称为resnet50的block3,或者conv4_x,或者layer3.