ResNet50网络结构图及结构详解
引言
之前我读了ResNet的论文Deep Residual Learning for Image Recognition,也做了 论文笔记 ,笔记里记录了ResNet的理论基础(核心思想、基本Block结构、Bottleneck结构、ResNet多个版本的大致结构等等),看本文之间可以先看看打打理论基础。
一个下午的时间,我用PPT纯手工做了一张图片详细说明ResNet50的具体结构,本文将结合该图片详细介绍ResNet50。
这张图和这篇文章估计全网最详细了(狗头)。
废话不多说,先放图片( 文末有图片和PPT源文件的下载链接 )。
上图(称为 本图 )可划分为左、中、右3个部分,三者内容分别如下
- ResNet50整体结构
- ResNet50各个Stage具体结构
- Bottleneck具体结构
接下来为正文内容,本文 先后介绍了本图从左到右的3个部分,并对Bottleneck进行了简要分析 。
ResNet50整体结构
首先需要声明,这张图的内容是ResNet的Backbone部分(即图中没有ResNet中的全局平均池化层和全连接层)。
如本图所示,输入
INPUT
经过ResNet50的5个阶段(
Stage 0
、
Stage 1
、……)得到输出
OUTPUT
。
下面附上ResNet原文展示的ResNet结构,大家可以结合着看,看不懂也没关系,只看本文也可以无痛理解的。
上图描述了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个先后操作
-
CONV
CONV
是卷积(Convolution)的缩写,7×7
指卷积核大小,64
指卷积核的数量(即该卷积层输出的通道数),/2
指卷积核的步长为2。
-
BN
BN
是Batch Normalization的缩写,即常说的BN层。
-
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个方面:
-
参数
S
:BTNK1
左右两个1×1卷积层是否下采样
Stage 1 中的BTNK1
:步长S
为1,没有进行下采样,输入尺寸和输出尺寸相等。
后3个stage的BTNK1
:步长S
为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卷积层减少通道数。
下载链接
链接: https:// pan.baidu.com/s/1cX0OUN QO4pgX9H8-xtx7oQ 提取码:9y0v 复制这段内容后打开百度网盘手机App,操作更方便哦
参考链接
https://www. bilibili.com/read/cv205 1292
https:// arxiv.org/abs/1512.0338 5
Github( http:// github.com ): @chouxianyu
Github Pages( http:// github.io ): @臭咸鱼
知乎( http:// zhihu.com ): @臭咸鱼
博客园( http:// cnblogs.com ): @臭咸鱼
B站( http:// bilibili.com ): @绝版臭咸鱼
微信公众号: @臭咸鱼
转载请注明出处,欢迎讨论和交流!