
Stage 0
(3,224,224)指输入INPUT的通道数(channel)、高(height)和宽(width),即(C,H,W)。现假设输入的高度和宽度相等,所以用(C,W,W)表示。
该stage中第1层包括3个先后操作。
1.CONV
CONV是卷积(Convolution)的缩写,7×7指卷积核大小,64指卷积核的数量(即该卷积层输出的通道数),/2指卷积核的步长为2。
2.BN
BN是Batch Normalization的缩写,即常说的BN层。
3.RELU
RELU指ReLU激活函数。
该stage中第2层为MAXPOOL,即最大池化层,其kernel大小为3×3、步长为2。
(64,56,56)是该stage输出的通道数(channel)、高(height)和宽(width),其中64等于该stage第1层卷积层中卷积核的数量,56等于224/2/2(步长为2会使输入尺寸减半)。
总体来讲,在Stage 0中,形状为(3,224,224)的输入先后经过卷积层、BN层、ReLU激活函数、MaxPooling层得到了形状为(64,56,56)的输出。
Stage 1
Stage 1的输入的形状为(64,56,56),输出的形状为(64,56,56)。
Bottleneck
每个Stage包含两种Bottleneck,分别对应了两种情况:输入与输出通道数相同(BTNK2)、输入与输出通道数不同(BTNK1)。
1.BTNK2
BTNK2有2个可变的参数C和W,即输入的形状(C,W,W)中的C和W。令形状为(C,W,W)的输入为x,令BTNK2左侧的3个卷积块(以及相关BN和RELU)为函数F(x),两者相加(F(x)+x)后再经过1个ReLU激活函数,就得到了BTNK2的输出,该输出的形状仍为(C,W,W),即上文所说的BTNK2对应输入x与输出F(x)通道数相同的情况。
2.BTNK1
BTNK1有4个可变的参数C、W、C1和S。与BTNK2相比,BTNK1多了1个右侧的卷积层,令其为函数G(x)。BTNK1对应了输入x与输出F(x)通道数不同的情况,也正是这个添加的卷积层将x变为G(x),起到匹配输入与输出维度差异的作用(G(x)和F(x)通道数相同),进而可以进行求和F(x)+G(x)。
简要分析
可知,ResNet后4个stage中都有BTNK1和BTNK2。
4个stage中BTNK2参数规律相同
4个stage中BTNK2的参数全都是1个模式和规律,只是输入的形状(C,W,W)不同。
Stage 1中BTNK1参数的规律与后3个stage不同。
然而,4个stage中BTNK1的参数的模式并非全都一样。具体来讲,后3个stage中BTNK1的参数模式一致,Stage 1中BTNK1的模式与后3个stage的不一样,这表现在以下2个方面:
参数S:BTNK1左右两个1×1卷积层是否下采样
Stage 1中的BTNK1:步长S为1,没有进行下采样,输入尺寸和输出尺寸相等。
后3个stage的BTNK1:步长S为2,进行了下采样,输入尺寸是输出尺寸的2倍。
参数C和C1:BTNK1左侧第一个1×1卷积层是否减少通道数
Stage 1中的BTNK1:输入通道数C和左侧1×1卷积层通道数C1相等(C=C1=64),即左侧1×1卷积层没有减少通道数。
stage2、3、4的BTNK1:输入通道数C和左侧1×1卷积层通道数C1不相等(C=2*C1),左侧1×1卷积层有减少通道数。

如下为resnet50的实现代码。

flops计算


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/199589.html