写在前面

 

 

开始学习啦!

首先是论文的一些基本情况介绍:

resnet结合rnn resnet讲解_ResNet

 

网络的结构图:

resnet结合rnn resnet讲解_ResNet_02

 

 

 

网络中的亮点一:超深的网络结构

resnet结合rnn resnet讲解_人工智能_03

如果只是普通卷积层和池化层的堆叠,网络层数越多,效果越差。产生的原因:梯度消失 / 爆炸问题 和 退化问题

梯度消失:假设每一层的误差梯度都是一个<1 的数,那么在反向传播的过程中,每向前传播一层,都要乘以一个<1 的系数。那么当网络越来越深的时,乘上<1 的系数就越来越多,梯度越来越小,趋近于 0

梯度爆炸:假设每一层的误差梯度都是一个>1 的数,那么在反向传播的过程中,每向前传播一层,都要乘以一个1 的系数。那么当网络越来越深的时,乘上1 的系数就越来越多,梯度越来越

 

这两种现象如何解决

  • 数据标准化处理     
  • 权重初始化
  • BN(Batch Normalization)

退化问题:解决完梯度消失和爆炸的问题后,任然会存在层数深的效果不如层数浅的效果好

 

如何解决残差结构

(2020.10.22补充)为什么 ResNet 可以解决这种退化问题?

resnet结合rnn resnet讲解_计算机视觉_04

参考:

 

 

 

网络中的亮点二:残差模块

resnet结合rnn resnet讲解_深度学习_05

正是因为有了残差结构,所以网络才能层数越多效果越好。

残差结构有两种,图的适用于网络层数较少的网络;图适用于网络层数较多的网络。

注意,因为有 element-wise 的矩阵相加操作,所以主分支的输出特征与 shortcut 的输入矩阵 shape 必须相同

左图

右图:在残差结构的输入和输出加上了 1*1 的卷积层,主要用来降维升维的。右图输入的 channels 数为 256,经过第一个 1*1 卷积层后,降维为 64 个 channels(高、宽不变);再通过一个 3*3 的卷积层,channels 数不变;最后,经过一个 1*1 卷积层后,升维为 256 个 channels(高、宽不变)。所以出来后的高、宽、channels 数与输入一致(高宽为何一致?加了 zero-padding?待深入阅读源码及论文)

右图的参数比左图少。具体计算过程图中是假设左右两边输入都是 256 个 channels 来计算的。

计算过程可参考:http://www.mamicode.com/info-detail-3017678.html

 

为什么经过 conv3*3 层之后 feature map 的高宽不变?

解答:因为有 padding.

resnet结合rnn resnet讲解_深度学习_06

 

不同层数的 ResNet 网络结构图

resnet结合rnn resnet讲解_resnet结合rnn_07

补充:

1、各层 output size 的计算方法

resnet结合rnn resnet讲解_人工智能_08

2、ResNet 的网络实现代码

https://github.com/BizhuWu/vision/blob/master/torchvision/models/resnet.py

3、ResNet 网络结构分析:

https://zhuanlan.zhihu.com/p/79378841

4、卷积层中的 dilation 参数:


当遇上残差结构的输入输出尺寸不一致时,如 Con3_x 的第一个残差结构(输入是 【56,56,64】,输出是【28,28,128】),用 stride = 2 来解决。

resnet结合rnn resnet讲解_深度学习_09

resnet结合rnn resnet讲解_人工智能_10

resnet结合rnn resnet讲解_人工智能_11

注意:只有在 Conv3_x、Conv4_x 和 Conv5_x 中的第一个残差结构(即 Conv3_1、Conv4_1 和 Conv5_1)才使用右边的虚线结构。其他残差结构都使用左边的实线结构。

 

细节为什么 Conv2_x 的第一个残差结构不用虚线结构呢?

刚好 18 和 24 层的 ResNet 在经过 3*3 的 max pooling 后,输出的 shape 刚好满足 Conv2_x 的第一个残差结构需要的输入 shape。

resnet结合rnn resnet讲解_resnet结合rnn_12

 

50、101、152 层的 ResNet 网络结构中 Conv2_x 的第一个残差结构就需要用虚线结构!但与 Conv3_x、Conv4_x、Conv5_x 的第一个残差(虚线)结构也有不同的地方:Conv2_x 的第一个残差结构只调整特征矩阵的 channels 数目,高和宽不变。

resnet结合rnn resnet讲解_计算机视觉_13

 

 

 

网络中的亮点三:使用 BN 加速训练(丢弃 dropout)

resnet结合rnn resnet讲解_ResNet_14

搬运 blog 地址:

笔记:

1、通过 BN 可以加速网络的收敛提升准确率

2、BN 的目的就是使 feature map 满足均值为 0,方差为 1 的分布规律。

3、计算一个 batch 里所有数据某个 channels()的均值、方差;再对这个 batch 里所有数据的这个 channels()进行标准化处理。

4、训练时,需要将 training 参数设置为 True验证时将 training 参数设置为 False。在 PyTorch 中可通过创建模型的model.train() 和 model.eval() 方法控制。

5、Batch Size 尽可能设置大一些,越大越接近整个训练集的 mean 和 variance。

6、BN 层放在 卷积层 和 激活层 之间,并且卷积层不要使用偏置 bias