经典网络模型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 :
ResNet50 结构框图











