torchvision中的resnet的实现

本文详细解析ResNet网络模型,包括整体结构和各层组成。ResNet34由4个layer组成,每个layer通过BasicBlock堆叠,第一层包含3个,第二到四层分别有4、6、3个。介绍了BasicBlock的两种形式,以及在不同layer中的应用。此外,还深入源码,展示了如何在PyTorch中构建ResNet模型。
摘要由CSDN通过智能技术生成

D:\pythonCodes\深度学习实验\经典分类网络\6:ResNet\resnet手动实现实验

一、ResNet网络模型详解

1.1 整体结构

可以看到,resnet34主要就是由layer1-4组成。而这4个layer分别就是由3、4、6、3个BasicBlock堆叠而成。

BasicBlock有两种:

右边虚线的BasicBlock主要用在layer2-4的第一块。作用就是要保证主分支和shortcut的输出特征shape相同。

说明:resnet18/34使用的是BasicBlock堆叠,而resnet50/101/152使用的是Bottleneck进行堆叠。

1.2 详细介绍

前面:

输入图片尺寸:224*224*3

conv1:

      输入通道是3,输出通道是64。kernel_size=7,stride=2,padding=3。输出尺寸为(224-7+6)/2 + 1 = 112.5下取整 = 112。 所以输出64*112*112

bn1、relu:

      在UNet中是conv、ReLu、BN,在FusionNet中是conv、BN、ReLu。应该是都行。而且是标配动作。我们不管了。

maxpool:

      kernel_size=3,stride=2, padding=1。不改变通道数。输出尺寸为(112-3+2)/2 + 1 = 56.5下取整=56。所以输出64*56*56。

layer1:

也就是经过了以下的三个BasicBlock:

主分支上,首先 经过3*3*64的卷积层。stride=1,padding=1。输出尺寸(56+2-3)/1 + 1 = 56。所以输出56*56*64。经过第二个卷积层完全一样,输出还是64*56*56。

主分支与捷径上都是56*56*64,进行相加操作,然后经过relu,还是64*56*56。

经过剩下的两个BasicBlock,还是一样。输出还是64*56*56。

layer2:

layer2中的第一个BasicBlock与其他三个不同,是带downsample的。也就是走的是虚线的那种。具体为:

主分支:首先经过3*3*128的卷积层。stride=2,padding =1。输出尺寸(56+2-3)/2 +1 = 28.5下取整=28。所以输出尺寸128*28*28。

               然后经过3*3*128的卷积层。stride=1,padding=1。输出尺寸(28+2-3)/1+1 = 28。所以输出128*28*28。

捷径:经过1*1*128的卷积层。stride=2,padding=0。输出尺寸(56-1)/2 +1 = 28。输出为128*28*28。

主分支和捷径的结果shape相同,所以可以相加。结果为128*28*28。

然后剩下的三个走的都是不带downsample的那种了。即:

主分支

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值