ResNet50 结构



ResNet有2个基本的block,一个是Identity Block,输入和输出的dimension是一样的,所以可以串联多个;另外一个基本block是Conv Block,输入和输出的dimension是不一样的,所以不能连续串联,它的作用本来就是为了改变feature vector的dimension

因为CNN最后都是要把image一点点的convert成很小但是depth很深的feature map,一般的套路是用统一的比较小的kernel(比如VGG都是用3*3),但是随着网络深度的增加,output的channel也增大(学到的东西越来越复杂),所以有必要在进入Identity Block之前,用Conv Block转换一下维度,这样后面就可以连续接Identity Block


可以看下Conv Block是怎么改变输出维度的




其实就是在shortcut path的地方加上一个conv2D layer(1*1 filter size),然后在main path改变dimension,并与shortcut path对应起来

### ResNet50 网络架构详解 #### 1. 基本概念 ResNet(残差网络)通过引入跳跃连接解决了深层神经网络中的梯度消失问题,使得训练更深的网络成为可能。不同版本的ResNet主要区别在于其深度和使用的构建模块。 #### 2. 构建模块 ResNet50 使用的是瓶颈层 (Bottleneck) 结构来构建网络[^3]。这种设计可以减少参数数量并提高计算效率。具体来说: - **卷积层**:每个 Bottleneck 单元由三个连续的卷积操作组成,分别是 1×1, 3×3 和 1×1 的卷积核大小。 - **通道数变化**:第一个 1×1 卷积用于降维;中间的 3×3 卷积保持维度不变;最后一个 1×1 卷积恢复原始特征图尺寸。 ```python class Bottleneck(nn.Module): expansion = 4 def __init__(self, inplanes, planes, stride=1, downsample=None): super(Bottleneck, self).__init__() self.conv1 = nn.Conv2d(inplanes, planes, kernel_size=1, bias=False) self.bn1 = nn.BatchNorm2d(planes) self.conv2 = nn.Conv2d(planes, planes, kernel_size=3, stride=stride, padding=1, bias=False) self.bn2 = nn.BatchNorm2d(planes) self.conv3 = nn.Conv2d(planes, planes * self.expansion, kernel_size=1, bias=False) self.bn3 = nn.BatchNorm2d(planes * self.expansion) self.relu = nn.ReLU(inplace=True) self.downsample = downsample self.stride = stride def forward(self, x): residual = x out = self.conv1(x) out = self.bn1(out) out = self.relu(out) out = self.conv2(out) out = self.bn2(out) out = self.relu(out) out = self.conv3(out) out = self.bn3(out) if self.downsample is not None: residual = self.downsample(x) out += residual out = self.relu(out) return out ``` #### 3. 整体结构 整个 ResNet50 包含多个阶段,每个阶段重复应用上述定义的基础单元。通常情况下,ResNet50 总共有 50 层,其中包括初始的7x7卷积层以及随后四个阶段的不同数目堆叠的基本单元[^1]。 | 阶段 | 输出形状 | 迭代次数 | |------|----------------|----------| | conv1| H/2 × W/2 × 64 | | | layer1 | H/4 × W/4 × 256 | 3次 | | layer2 | H/8 × W/8 × 512 | 4次 | | layer3 | H/16 × W/16 × 1024 | 6次 | | layer4 | H/32 × W/32 × 2048 | 3次 | 其中 `H` 表示输入图像高度,`W` 表示宽度。 #### 4. 实现细节 为了适应不同的输入分辨率,在某些地方会采用步长为2的最大池化或带有较大步幅的卷积来进行下采样处理。此外,当遇到维度不匹配的情况时,则需要额外添加线性投影映射以确保加法运算能够顺利执行。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值