DL 模型组件之残差模块

文章目录

    • 常规残差模块
    • Bottleneck(瓶颈残差模块)
    • 参考

  阅读 ResNet 的论文 Deep Residual Learning for Image Recognition,整理 ResNet 的结构。ResNet 在 PyTorch 的官方代码中共有 5 种不同深度的结构(各种网络的深度指的是“需要通过训练更新参数”的层数),深度分别为 18、34、50、101、152。ResNet 的关键模块主要是残差模块,如下图所示。
DL 模型组件之残差模块_第1张图片

常规残差模块

DL 模型组件之残差模块_第2张图片
  ResNet 声名鹊起的一个重要原因是它提出了残差学习的思想。一个残差学习模块包含多个卷积层,这些卷积层对这个残差学习模块的输入数据进行变化,同时原始输入信息跳过这些卷积层直接传导至后面的层中,最终将它们的整体作为输入,用激活函数激活,得到这个残差学习模块的输出结果。从本质上而言,ResNet 学习的就是输出结果和输入结果之间的差值,即残差,因此 ResNet 又称残差网络。
  传统的卷积神经网络或者全连接网络,在信息传递时,或多或少会存在信息丢失、损耗等问题,同时还会导致梯度消失或梯度爆炸,使得很深的网络无法训练。ResNet 通过提出残差学习的思想,在一定程度上解决了这个问题。通过将输入信息“绕道”传导至输出,极大地保护了信息的完整性。整个网络只需要学习输入、输出和残差部分,简化了学习的目标和难度。

Bottleneck(瓶颈残差模块)

  瓶颈结构指的是通道数的变化,即原通道数减少再增大。1×1 卷积有调整通道数的作用(或者说降低和升高特征维度的作用),实现通道数减少和增大。
DL 模型组件之残差模块_第3张图片

假设输入 feature map 的维度为 256 维,要求输出维度也是 256 维。有以下两种操作:

  • 左图:直接使用两个 3×3 的卷积核。单次卷积操作可描述为:256 维的输入直接经过一个 3×3×256 的卷积层,输出一个 256 维的 feature map,则单次卷积操作参数量为 256×3×3×256 = 589824 。进一步可知,左图两次卷积操作总的参数数目为 3×3×256×256×2 = 1179648。
  • 右图:先经过 1×1 的卷积核,再经过 3×3 卷积核,最后经过一个 1×1 卷积核。 256 维的输入先经过一个 1×1×64 的卷积层,再经过一个 3×3×64 的卷积层,最后经过 1×1×256 的卷积层,其总参数量为 256×1×1×64 + 64×3×3×64 + 64×1×1×256 = 69632。
  • 对比以上两种方式可知,后者的参数量远小于前者(前者约为后者的16.94倍)。Bottleneck 的核心思想还是利用多个小卷积核替代一个大卷积核,利用 1×1 卷积核替代大的卷积核的一部分工作。

作用

1×1 的 fliter 用于降低/升高特征维度。观察上右图可知,1×1 卷积操作并未改变 feature map 的尺寸,而是改变了通道数目。

目的

(1)减少参数的数量,从而减少计算量,且在降维之后可以更加有效、直观地进行数据的训练和特征提取;
(2)提高神经网络的深度,一般情况下深度可以体现网络性能。

参考

1.深度学习入门 | 第六章:经典卷积神经网络:ResNet
2. 初试markdown-Bottleneck瓶颈型结构

你可能感兴趣的:(分割与抠图,深度学习,神经网络)