读取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层的输入和输出维度就变小啦,这样就能减少参数量啦。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐