resnet101网络结构图详解
时间: 2023-06-10 13:08:16 浏览: 4099
ResNet101是一种深度残差网络,由Kaiming He等人于2016年提出。它是ResNet系列中的一种,是在ResNet50的基础上增加了更多的层数而得到的。下面是ResNet101网络结构图的详解。
ResNet101网络结构图中有101层,其中第一层是7x7的卷积层,之后是4个阶段(stage),每个阶段包含若干个残差块(residual block)。最后是一层全局平均池化(global average pooling)和一层全连接层(fully connected layer)。
每个残差块由两个3x3的卷积层组成,每个卷积层后面都有一个批量归一化(batch normalization)和ReLU激活函数。在残差块之间也有批量归一化和ReLU激活函数,但没有卷积层。每个阶段的第一个残差块使用1x1的卷积层将输入的通道数转换为输出的通道数,以便与后续的残差块进行加和操作。
ResNet101的主要贡献是引入了残差块的概念,使得网络可以更深更容易训练。它在ImageNet数据集上的表现非常出色,达到了当时的最优水平。
相关问题
resnet101网络结构图以及详解
### ResNet101 网络架构图与详细解析
#### 一、ResNet背景介绍
随着网络层数加深,出现了梯度消失等问题使得更深的网络更难以训练。为了解决这一问题,He等人提出了残差网络(Residual Networks, ResNets)[^2]。
#### 二、ResNet101总体结构描述
ResNet101是一种具有101层深度的深层卷积神经网络模型,在ImageNet分类挑战赛中取得了优异的成绩。该模型通过引入短路连接(shortcut connections),即跨多层传递信息来缓解退化问题并促进反向传播过程中的梯度流动。
#### 三、具体模块构成说明
- **初始阶段**
- 输入尺寸通常为\(224\times224\)像素大小的RGB彩色图片。
- 经过7x7卷积操作(步幅=2),输出通道数设定为64;随后接最大池化(Max Pooling)处理,进一步缩小空间维度至\(56 \times 56\)。
- **四个主要阶段(stage)**
每个stage内部重复堆叠多个相同配置的基础block或者bottleneck block:
| Stage | Block Type | Number of Blocks |
|-------|------------------|------------------|
| stage 2 | bottleneck | 3 |
| stage 3 | bottleneck | 4 |
| stage 4 | bottleneck | 23 |
| stage 5 | bottleneck | 3 |
- **Bottleneck设计特点**
对于每一个bottleneck单元而言,它由三个连续执行的小型卷积层组成:首先是降维用的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
```
- **最终全连接层之前的操作**
全局平均池化(Global Average Pooling,GAP)代替传统固定窗口大小的最大/均值池化方式,可以自适应不同尺度输入的同时也减少了超参数调整的工作量。之后接入一个拥有类别数目那么多节点的标准线性变换完成预测任务。
#### 四、总结
ResNet系列模型特别是像ResNet101这样较深层次版本的成功之处在于巧妙地解决了极深网络面临的优化难题,并且证明了当合理构建时,增加网络深度确实有助于提升性能表现。
resnet101网络结构
### ResNet101 网络架构详解
ResNet101 属于残差网络(Residual Network)系列,是一种深度卷积神经网络,在多个计算机视觉任务中表现优异[^2]。
#### 基本组件:Bottleneck 结构
对于较深的版本如 ResNet101, 使用的是 Bottleneck 架构而非 BasicBlock。Bottleneck 的设计旨在减少计算量的同时保持性能:
- 输入通过 1×1 卷积降维至较低维度的空间;
- 接着采用标准的 3×3 卷积操作处理特征图;
- 最后再利用另一个 1×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
```
#### 整体结构布局
整个 ResNet101 主要由一系列堆叠起来的 Bottleneck 组成,具体配置如下表所示:
| Layer | Number of Blocks |
| -- | --- |
| conv1 (7x7 s/2) -> pool (3x3 s/2) | - |
| layer1 (res2_x): bottleneck × 3 | 64 filters |
| layer2 (res3_x): bottleneck × 4 | 128 filters |
| layer3 (res4_x): bottleneck × 23 | 256 filters |
| layer4 (res5_x): bottleneck × 3 | 512 filters |
每一组中的第一个 block 可能会改变 feature map size 或者 channel 数目;其余 blocks 则维持不变。这样的设计既增加了模型容量又不会显著增加参数数量和计算复杂度。
#### 特殊之处
相比传统 CNNs,ResNet101 引入了跳跃连接机制来解决深层网络训练困难的问题。这些 shortcut connections 能够让反向传播过程中梯度更容易流动,从而提高了收敛速度以及最终效果[^3]。
阅读全文
相关推荐














