云计算百科
云计算领域专业知识百科平台

ResNet-152详解

1. ResNet-152结构总览

ResNet-152 是2015年He Kaiming等人提出的ResNet家族中网络层数最多,性能最强大的版本之一,其深度为152层,核心创新是采用了瓶颈残差块(Bottleneck Block),堆叠层数极深但易于优化。ResNet-152广泛用于图像识别、检测等各类CV任务中,经常作为大型数据集如ImageNet的主力骨干网络。


2. 整体网络结构

以ImageNet输入(224×224 RGB图片)为例,ResNet-152结构如下:

Input: 224×224×3

1. conv1: 7×7卷积, 64通道, 步长2, padding=3
2. maxpool: 3×3, 步长2

==== Stage1 ====
3. layer1: 64 → 256通道,堆叠3个Bottleneck Block

==== Stage2 ====
4. layer2: 256 → 512通道,堆叠8个Bottleneck Block

==== Stage3 ====
5. layer3: 512 → 1024通道,堆叠36个Bottleneck Block

==== Stage4 ====
6. layer4: 1024 → 2048通道,堆叠3个Bottleneck Block

7. global average pooling
8. fully connected layer(1000分类)

输出:1000维分类结果(ImageNet)


3. 各阶段Bottleneck Block结构

每个Bottleneck Block由三层卷积组成:

  • 1×1卷积:降维,减少通道数
  • 3×3卷积:主要的计算
  • 1×1卷积:升维,恢复通道数
  • 残差连接:输入直接跳跃到输出(必要时用1×1卷积匹配shape)

典型以layer2中的Bottleneck(输入256通道为例)为例:

  • 1×1卷积,256→128
  • 3×3卷积,128→128
  • 1×1卷积,128→512
  • 残差相加(若输入256,输出512,则旁路也1×1卷积升维)
  • 每个Bottleneck Block视为3层,整网有:
    $(3+8+36+3)×3+2(conv1 + fc)=152(3+8+36+3)×3+2(conv1 + fc)=152$
    其中每个stage的block层数乘以3,conv1和fc各1层。


    4. 各阶段详细参数分布

    StageOutput SizeBlock数卷积每块结构通道变化
    conv1 112×112 1 7×7, 64, stride 2 3→64
    maxpool 56×56 1 3×3, stride 2 64
    layer1 56×56 3 1×1,64→64; 3×3,64; 1×1,256 64→256
    layer2 28×28 8 1×1,256→128; 3×3,128; 1×1,512 256→512
    layer3 14×14 36 1×1,512→256; 3×3,256; 1×1,1024 512→1024
    layer4 7×7 3 1×1,1024→512; 3×3,512; 1×1,2048 1024→2048
    avgpool 1×1 1 Global average pooling 2048
    fc 1×1 1 输出1000类 2048→1000

    5. 结构图示意

    Input

    [conv1] → [maxpool]

    [layer1: 3 × bottleneck]

    [layer2: 8 × bottleneck]

    [layer3: 36 × bottleneck]

    [layer4: 3 × bottleneck]

    [avgpool] → [fc]

    Output


    6. PyTorch伪代码框架

     

    import torch.nn as nn
    class Bottleneck(nn.Module):
    expansion = 4 # 输出通道数通常是输入的4倍

    def __init__(self, in_channels, mid_channels, stride=1, downsample=None):
    super(Bottleneck, self).__init__()
    self.conv1 = nn.Conv2d(in_channels, mid_channels, 1, bias=False)
    self.bn1 = nn.BatchNorm2d(mid_channels)
    self.conv2 = nn.Conv2d(mid_channels, mid_channels, 3, stride=stride, padding=1, bias=False)
    self.bn2 = nn.BatchNorm2d(mid_channels)
    self.conv3 = nn.Conv2d(mid_channels, mid_channels * self.expansion, 1, bias=False)
    self.bn3 = nn.BatchNorm2d(mid_channels * self.expansion)
    self.relu = nn.ReLU(inplace=True)
    self.downsample = downsample
    def forward(self, x):
    identity = x if self.downsample is None else self.downsample(x)
    out = self.relu(self.bn1(self.conv1(x)))
    out = self.relu(self.bn2(self.conv2(out)))
    out = self.bn3(self.conv3(out))
    out += identity
    out = self.relu(out)
    return out


    7. ResNet-152在工业界/科研中的常用场景

    • 大规模图像分类任务
    • 作为深度学习任务(检测、分割等)的骨干特征提取网络
    • 迁移学习,作为预训练模型在医学影像、卫星图像等高难领域微调
    • 常作为benchmark与其他模型公平对比

    8. 主要特点及优势

    • 极深(152层)但易于训练,归功于残差结构
    • 性能强大,ImageNet Top1准确率约77.8%
    • 支持更复杂更细致的特征学习
    • 预训练权重广泛可用

    9. 局限性

    • 计算量大,对显存/算力要求高
    • 训练/推理速度慢于ResNet-50等

    10. ResNet-152 残差块参数详解

    ResNet-152的核心是“Bottleneck Block”,以 layer3 的一个 block 为例说明参数分布和数据流:

    假设输入通道数为 512,输出通道数为 2048(expansion=4)。

    • 第一层 1×1卷积(降维):
      输入 512 通道 → 输出 512 通道
      参数数量:1×1×512×512=262,1441×1×512×512=262,144
    • 第二层 3×3卷积(处理特征):
      输入 512 通道 → 输出 512 通道
      参数数量:3×3×512×512=2,359,2963×3×512×512=2,359,296
    • 第三层 1×1卷积(升维):
      输入 512 通道 → 输出 2048 通道
      参数数量:1×1×512×2048=1,048,5761×1×512×2048=1,048,576
    • 下采样分支(如果 stride > 1 或通道数不同):1×1卷积进行升/降维匹配。

    每个 block 还会配合 BatchNorm、ReLU。

    典型 Bottleneck block 总参数约在 3-4 百万。
    其中 layer3 共36个 block,参数量极大。而整个ResNet152参数量大约为 60M(六千万)。


    11. 残差连接的优势再解释

    • 允许网络“跳过”部分层,若某些层无用,残差连接可让梯度直接流过;这使得即使层数极深依然可训练。
    • 遇到梯度消失问题时,梯度可通过shortcut流向浅层。
    • 提高身份映射能力,让深层网络可拟合更复杂关系,但也可以方便地退化为低层。

    12. ResNet-152 的训练技巧

    • 权重预处理因网络深度,建议用He初始化+BN
    • 数据增强:常用较强的数据增强,例如random crop、flip、color jitter等
    • 优化器:SGD + momentum(如0.9)、weight decay(如1e-4)
    • 学习率策略:step decay或cosine decay
    • 梯度累积/混合精度:如果显存不足可使用梯度累积或AMP
    • batch size:推荐较大(如32/64),可提升收敛性和泛化

    13. 消融实验 及性能对比

    论文以及后续研究中,典型消融实验如下:

    • 无残差连接的极深网络:深层时准确率下降、训练损失上升
    • 有残差连接:可持续增长精度,152层训练与34层几乎一致
    • 残差块类型对比:Bottleneck结构可控参数量,性能更优
    • 层数变化:ResNet-18/34/50/101/152准确率递增但参数和计算也递增

    部分准确率(Top-1 ImageNet):

    网络层数Top-1 (%)Top-5 (%)参数量
    ResNet-50 ~76.0 ~93.0 25.6M
    ResNet-101 ~77.0 ~93.7 44.6M
    ResNet-152 ~77.8 ~94.1 60.2M
    • 可以看出ResNet-152比ResNet-50/101略优,但参数翻倍,训练推理慢。

    14. 迁移学习与实际场景应用

    • 常用做ImageNet预训练骨干,迁移到分割、检测、医学影像、遥感、图像检索等多领域
    • 在深度人脸识别、大规模场景分类等精度需求高场景广泛应用
    • 通过微调(fine-tune),ResNet-152可有效适应小数据集或特殊领域

    15. 代码调用(预训练模型)

    在PyTorch中,直接这样调用预训练模型:

    import torchvision.models as models
    resnet152 = models.resnet152(pretrained=True)
    out = resnet152(input_image) # input_image: [batch, 3, 224, 224]

    如需冻结骨干或提取特征:

    features = resnet152.conv1(input)
    for layer in [resnet152.layer1, resnet152.layer2, resnet152.layer3, resnet152.layer4]:
    features = layer(features)


    16. 注意事项与优化建议

    • 推理速度慢:可用ResNet-50做高效率版本
    • 显存压力大:推荐16GB以上显卡
    • 可剪枝、量化、蒸馏:若部署在实际应用可进一步优化模型规模

    17. 相关经典论文

    • He Kaiming, et al, “Deep Residual Learning for Image Recognition”, CVPR2016 (ResNet原文)
    • He Kaiming, et al, “Identity Mappings in Deep Residual Networks”, ECCV2016 (pre-activation方案)

    18. 总结

    ResNet-152是极深卷积网络的典型代表,其残差结构保证了超深网络的可训练性和泛化性能,是深度视觉领域基础网络之一。

    ResNet-152作为ResNet家族的“超级深”代表,通过残差连接和瓶颈结构,既保证了强大特征提取能力又可以稳定训练,是大规模视觉任务中的经典“骨干网络”

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » ResNet-152详解
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!