ResNet网络及Pytorch实现

2015年由何恺明提出,论文地址Deep Residual Learning for Image Recognition
在这里插入图片描述

图19 Basicblock,Bottleneck block
**注意:**主分支与shortcut的输出特征矩阵shape必须相同,1×1的卷积核用来降维和升维

参数个数对比,假设输入为256d:
左边256×256×3×3+256×256×3×3=1179648
右边256×64×1×1+64×64×3×3+256×64×1×1=69632
在这里插入图片描述

图20 ResNet网络结构

实线与虚线残差结构:

实线:输入与输出特征维度一样
虚线:例如conv3_x第一层,输入[56, 56, 64],输出[28, 28, 128],同时虚线有个1×1卷积层进行升维

**注意:**虚线结构是用来改变尺寸与升降维,对于34层,只有conv3_1, conv4_1, conv5_1有虚线结构,但对于深层的,conv2_1也是虚线,只不过此虚线结构只改变深度。conv1之后池化的输出为[56, 56, 64], 但conv2_1期望的输入是[56, 56, 256], 所以虚线只改变深度。

在torchvision中,bottleneck把下采样放在了3×3位置而不是原先的第一层1×1卷积层。

nn.Conv2d中groups参数理解,例如[64,96,1,1], 默认groups=1,那么输出的每个channel的计算,所有输入的channel都参与其中,如果groups=2,那么输入channels被分成2组,每组32个channels,输出channels被分成2组,每组48个channels。对于输出的2个48的channels,第1个48channels与输入的第一个16channels进行全卷积,第2个48channels与输入的第二个16channels进行全卷积。
当groups=in_channels=out_channels,那么输出的每个channel只与输入对应的channel进行卷积运算,groups决定将输入输出分成几组,所以groups要能被in_channels与out_channels同时整除。

三种残差结构比较:
在这里插入图片描述

图21 resnet50

在这里插入图片描述

图22 resnext50_32x4d

在这里插入图片描述

图23 wide_resnet50_2

w i d t h = i n t ( p l a n e s × w i d t h _ p e r _ g r o u p 64. × g r o u p s width = int(planes\times \frac {width\_per\_group}{64.}\times groups width=int(planes×64.width_per_group×groups

pytorch实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值