经典网络模型1——ResNet 详解与复现
Residual Network
简称 ResNet (残差网络)
,何凯明团队于2015年提出的一种网络;
在 ImageNet 比赛 classification 任务上获得第一名;
目前在检测,分割,识别等领域里得到了广泛的应用;

🔗 论文地址:Deep Residual Learning for Image Recognition
残差网络
对于一个网络,如果简单地增加深度,就会导致梯度弥散或梯度爆炸,我们采取的解决方法是正则化;
随着网络层数进一步增加,又会出现模型退化问题,在训练集上的准确率出现饱和甚至下降的现象;
特点: 通过利用内部的残差块实现跳跃连接,解决神经网络深度加深带来的 模型退化 问题:
在之前的网络结构中采用的输入输出函数为:F(x)output1
= xinput
在残差网络中利用残差模块使输入输出函数为:F(x)output2
= F(x)output1
+ xinput
xinput
直接跳过多层 加入到最后的输出 F(x)output2
单元当中,解决 F(x)output1
可能带来的模型退化问题
residual block
浅层网络: 采用的是左侧的 residual block 结构(18-layer、34-layer)
深层网络: 采用的是右侧的 residual block 结构(50-layer、101-layer、152-layer)
很有意思的是,这两个设计具有参数量:
左侧: (3 X 3 X 64)X 64 +(3 X 3 X 64)X 64 = 73728
右侧: (1 X 1 X 64)X 64 +(3 X 3 X 64)X 64 +(1 X 1 X 64)X 256 +(1 X 1 X 64)X 256 = 73728
可以对比 34-layer
和 50-layer
发现它们的参数量分别为 3.6 X 109 和 3.8 X 109
ResNet50 详解
以下以 ResNet50
为代表进行介绍:
它是由 4 个 大block 组成 ;
每个 大block 分别由 [3, 4, 6, 3]
个 小block 组成 ;
每个 小block 都有 三个 卷积操作 ;
在网络开始前还有 一个 卷积操作 ;
层数:(3+4+6+3)X 3 + 1 = 50 layer
;
其中每个 大的 block 里面都是由两部分组成:Conv Block
和 Identity Block
Conv Block
:输入和输出维度不相同,不能串联,主要用于 改变网络维度 ;
Identity Block
:输入和输出维度相同,可以串联,主要用于 加深网络层数 ;
Conv Block
结构框图:
Identity Block
结构框图:
ResNet50 [3, 4, 6, 3]可以表示为:
conv2_x
:Conv Block
+ Identity Block
+ Identity Block
conv3_x
:Conv Block
+ Identity Block
+ Identity Block
+ Identity Block
conv4_x
:Conv Block
+ Identity Block
+ Identity Block
+ Identity Block
+ Identity Block
+ Identity Block
conv5_x
:Conv Block
+ Identity Block
+ Identity Block
ResNet50
结构框图:
ResNet50 复现
# Here is the code :