首发于 ML | AI | CV
ResNet50网络结构图及结构详解

ResNet50网络结构图及结构详解

引言

之前我读了ResNet的论文Deep Residual Learning for Image Recognition,也做了 论文笔记 ,笔记里记录了ResNet的理论基础(核心思想、基本Block结构、Bottleneck结构、ResNet多个版本的大致结构等等),看本文之间可以先看看打打理论基础。

一个下午的时间,我用PPT纯手工做了一张图片详细说明ResNet50的具体结构,本文将结合该图片详细介绍ResNet50。

这张图和这篇文章估计全网最详细了(狗头)。

废话不多说,先放图片( 文末有图片和PPT源文件的下载链接 )。

上图(称为 本图 )可划分为左、中、右3个部分,三者内容分别如下

  1. ResNet50整体结构
  2. ResNet50各个Stage具体结构
  3. Bottleneck具体结构

接下来为正文内容,本文 先后介绍了本图从左到右的3个部分,并对Bottleneck进行了简要分析

ResNet50整体结构

首先需要声明,这张图的内容是ResNet的Backbone部分(即图中没有ResNet中的全局平均池化层和全连接层)。

如本图所示,输入 INPUT 经过ResNet50的5个阶段( Stage 0 Stage 1 、……)得到输出 OUTPUT

下面附上ResNet原文展示的ResNet结构,大家可以结合着看,看不懂也没关系,只看本文也可以无痛理解的。

img

上图描述了ResNet多个版本的具体结构,本文描述的“ResNet50”中的50指有50个层。和上图一样,本图描述的ResNet也分为5个阶段。

ResNet各个Stage具体结构

如本图所示,ResNet分为5个stage(阶段),其中 Stage 0 的结构比较简单,可以视其为对 INPUT 的预处理,后4个Stage都由 Bottleneck 组成,结构较为相似。 Stage 1 包含3个 Bottleneck ,剩下的3个stage分别包括4、6、3个 Bottleneck

现在对 Stage 0 Stage 1 进行详细描述,同理就可以理解后3个Stage。

Stage 0

  • (3,224,224) 指输入 INPUT 的通道数(channel)、高(height)和宽(width),即 (C,H,W) 。现假设输入的高度和宽度相等,所以用 (C,W,W) 表示。
  • 该stage中第1层包括3个先后操作
  1. CONV
    CONV 是卷积(Convolution)的缩写, 7×7 指卷积核大小, 64 指卷积核的数量(即该卷积层输出的通道数), /2 指卷积核的步长为2。
  2. BN
    BN 是Batch Normalization的缩写,即常说的BN层。
  3. RELU
    RELU 指ReLU激活函数。
  • 该stage中第2层为 MAXPOOL ,即最大池化层,其kernel大小为 3×3 、步长为 2
  • (64,56,56) 是该stage输出的通道数(channel)、高(height)和宽(width),其中 64 等于该stage第1层卷积层中卷积核的数量, 56 等于 224/2/2 (步长为2会使输入尺寸减半)。

总体来讲,在 Stage 0 中,形状为 (3,224,224) 的输入先后经过卷积层、BN层、ReLU激活函数、MaxPooling层得到了形状为 (64,56,56) 的输出。

Stage 1

在理解了 Stage 0 以及熟悉图中各种符号的含义之后,可以很容易地理解 Stage 1 。理解了 Stage 1 之后,剩下的3个stage就不用我讲啦,你自己就能看懂。

Stage 1 的输入的形状为 (64,56,56) ,输出的形状为 (256,56,56)

下面介绍 Bottleneck 的具体结构(难点),把 Bottleneck 搞懂后,你就懂 Stage 1 了。

Bottleneck具体结构

现在让我们把目光放在本图最右侧,最右侧介绍了2种 Bottleneck 的结构。

“BTNK”是 BottleNeck 的缩写(本文自创,请谨慎使用)。

2种 Bottleneck 分别对应了2种情况:输入与输出通道数相同( BTNK2 )、输入与输出通道数不同( BTNK1 ),这一点可以结合ResNet原文去看喔。

BTNK2

我们首先来讲 BTNK2

BTNK2 有2个可变的参数 C W ,即输入的形状 (C,W,W) 中的 c W

令形状为 (C,W,W) 的输入为 x ,令 BTNK2 左侧的3个卷积块(以及相关BN和RELU)为函数 F(x) ,两者相加( F(x)+x )后再经过1个ReLU激活函数,就得到了 BTNK2 的输出,该输出的形状仍为 (C,W,W) ,即上文所说的 BTNK2 对应输入 x 与输出 F(x) 通道数相同的情况。

BTNK1

BTNK1 有4个可变的参数 C W C1 S

BTNK2 相比, BTNK1 多了1个右侧的卷积层,令其为函数 G(x) BTNK1 对应了输入 x 与输出 F(x) 通道数不同的情况,也正是这个添加的卷积层将 x 变为 G(x) ,起到匹配输入与输出维度差异的作用( G(x) F(x) 通道数相同),进而可以进行求和 F(x)+G(x)

简要分析

可知,ResNet后4个stage中都有 BTNK1 BTNK2

  • 4个stage中 BTNK2 参数规律相同
    4个stage中 BTNK2 的参数全都是1个模式和规律,只是输入的形状 (C,W,W) 不同。
  • Stage 1 BTNK1 参数的规律与后3个stage不同
    然而,4个stage中 BTNK1 的参数的模式并非全都一样。具体来讲,后3个stage中 BTNK1 的参数模式一致, Stage 1 BTNK1 的模式与后3个stage的不一样,这表现在以下2个方面:
  1. 参数 S BTNK1 左右两个1×1卷积层是否下采样
    Stage 1 中的 BTNK1 :步长 S 为1,没有进行下采样,输入尺寸和输出尺寸相等。
    后3个stage的 BTNK1 :步长 S 为2,进行了下采样,输入尺寸是输出尺寸的2倍。
  2. 参数 C C1 BTNK1 左侧第一个1×1卷积层是否减少通道数
    Stage 1 中的 BTNK1 :输入通道数 C 和左侧1×1卷积层通道数 C1 相等( C=C1=64 ),即左侧1×1卷积层没有减少通道数。
    后3个stage的 BTNK1 :输入通道数 C 和左侧1×1卷积层通道数 C1 不相等( C=2*C1 ),左侧1×1卷积层有减少通道数。
  • 为什么 Stage 1 BTNK1 参数的规律与后3个stage不同?(个人观点)
    • 关于 BTNK1 左右两个1×1卷积层是否下采样
      因为 Stage 0 中刚刚对网络输入进行了卷积和最大池化,还没有进行残差学习,此时直接下采样会损失大量信息;而后3个stage直接进行下采样时,前面的网络已经进行过残差学习了,所以可以直接进行下采样。
    • 关于 BTNK1 左侧第一个1×1卷积层是否减少通道数
      根据ResNet原文可知, Bottleneck 左侧两个1×1卷积层的主要作用分别是减少通道数和恢复通道数,这样就可以使它们中间的3×3卷积层的输入和输出的通道数都较小,因此效率更高。
      Stage 1 BTNK1 的输入通道数 C 为64,它本来就比较小,因此没有必要通过左侧第一个1×1卷积层减少通道数。

下载链接

链接: pan.baidu.com/s/1cX0OUN 提取码:9y0v 复制这段内容后打开百度网盘手机App,操作更方便哦

参考链接

bilibili.com/read/cv205

arxiv.org/abs/1512.0338


Github( github.com ): @chouxianyu

Github Pages( github.io ): @臭咸鱼

知乎( zhihu.com ): @臭咸鱼

博客园( cnblogs.com ): @臭咸鱼

B站( bilibili.com ): @绝版臭咸鱼

微信公众号: @臭咸鱼

转载请注明出处,欢迎讨论和交流!


编辑于 2023-03-14 11:53 ・IP 属地浙江

文章被以下专栏收录