ResNet50中输入输出尺寸运算
Resnet50网络结构中的尺寸运算
读取Resnet50的网络结构
import torch
import torchvision
# 读取pth文件,查看模型结构
net = torchvision.models.resnet50(num_classes=600)
# 读取权重文件地址
pthfile = r'./Tongji_2022_04_15_19-49-14.pth'
net.load_state_dict(torch.load(pthfile),strict=False)
print(net)
ResNet原文展示的ResNet结构如下图:
如图,共有四个stage,为啥ResNet中每经过一个stage就会尺寸减半?
因为除了第一个stage是通过步长为2的池化层下采样,第二三四个stage只会在第一个bottleneck中通过一个步长为2的卷积层执行下采样,达到尺寸减半的效果。
如图:conv1和layer1
layer2
layer3
layer4
输入是224x224的尺寸,经过kernel size为7,步长为2,padding为3的conv1,按照公式output=(Input-kernel+2*padding)/stride+1
则有(224-7+2*3)/2+1=112.5≈112,此时输出尺寸为112;
再输入到layer1中,经过kernel size为3,步长为2,padding为1的maxpool
有(112-3+2)/2+1≈56,此时输出尺寸为56;
再输入到layer2中,经过kernel size为3,步长为2,padding为1的卷积
有(56-3+2)/2+1≈28,此时输出尺寸为28;
再输入到layer3中,经过kernel size为3,步长为2,padding为1的卷积
有(28-3+2)/2+1≈14,此时输出尺寸为14;
再输入到layer4中,经过kernel size为3,步长为2,padding为1的卷积
有(14-3+2)/2+1≈7,此时输出尺寸为7。
注:中间的bottleneck中,经过kernel size为1,步长为1,无padding的卷积,不改变尺寸,经过kernel size为3,步长为1,padding为1的卷积也不改变尺寸大小。
ResNet的bottleneck结构如下图:
为啥要先通过1x1卷积降维,再通过1x1卷积升维?
因为第一个1x1卷积将256维通道降为64通道,第二个1x1卷积将256维通道进行恢复,3x3层的输入和输出维度就变小啦,这样就能减少参数量啦。
更多推荐
所有评论(0)