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

输入是224×224的尺寸,经过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结构如下图:

为啥要先通过1×1卷积降维,再通过1×1卷积升维?

因为第一个1×1卷积将256维通道降为64通道,第二个1×1卷积将256维通道进行恢复,3×3层的输入和输出维度就变小啦,这样就能减少参数量啦。

来源:神经网络病

物联沃分享整理
物联沃-IOTWORD物联网 » ResNet50中输入输出尺寸运算

发表评论