小马&博客

不爱码字的小懒马儿

ResNet


关于

  • 个人微信公众号: Mn2+
  • 个人博客首页
  • 注:学习交流使用!
  • 本文简介:ResNet网络结构详解与迁移学习

正文

1、ResNet 详解
(1)ResNet 网络是在 2015年 由微软实验室提出,斩获当年ImageNet竞赛中分类任务第一名,目标检测第一名。获得COCO数据集中目标检测第一名,图像分割第一名。
(2)ResNet网络的创新点:
  * 提出 Residual 结构(残差结构),并搭建超深的网络结构(可突破1000层)。
  * 使用 Batch Normalization 加速训练(丢弃dropout)。

2、Why residual?
(1)在ResNet网络提出之前,传统的卷积神经网络都是通过将一系列卷积层与池化层进行堆叠得到的。
(2)一般我们会觉得网络越深,特征信息越丰富,模型效果应该越好。但是实验证明,当网络堆叠到一定深度时,会出现两个问题:
  梯度消失或梯度爆炸:
  * 若每一层的误差梯度小于1,反向传播时,网络越深,梯度越趋近于0
  * 反之,若每一层的误差梯度大于1,反向传播时,网路越深,梯度越来越大
  退化问题(degradation problem):
  * 在解决了梯度消失、爆炸问题后,仍然存在深层网络的效果可能比浅层网络差的现象
  当网络堆叠到一定深度时,反而会出现深层网络比浅层网络效果差的情况。
  如下图所示,20层网络 反而比 56层网络 的误差更小:

  对于梯度消失或梯度爆炸问题,ResNet论文提出通过数据的预处理以及在网络中使用 BN(Batch Normalization)层来解决。
  对于退化问题,ResNet论文提出了 residual结构(残差结构)来减轻退化问题,下图是使用residual结构的卷积网络,可以看到随着网络的不断加深,效果并没有变差,而是变的更好了。(虚线是train error,实线是test error)

3、What is residual?
(1)为了解决深层网络中的退化问题,可以人为地让神经网络某些层跳过下一层神经元的连接,隔层相连,弱化每层之间的强联系。这种神经网络被称为 残差网络 (ResNets)。
(2)残差网络由许多隔层相连的神经元子模块组成,我们称之为 残差块 Residual block。单个残差块的结构如下图所示:

4、ResNet中的残差结构
(1)实际应用中,残差结构的 short cut 不一定是隔一层连接,也可以中间隔多层,ResNet所提出的残差网络中就是隔多层。
(2)下图中左侧残差结构称为 BasicBlock,右侧残差结构称为 Bottleneck

对于深层的 Bottleneck,1×1的卷积核起到降维和升维(特征矩阵深度)的作用,同时可以大大减少网络参数。

5、降维时的 short cut
(1)观察下图的 ResNet18层网络,可以发现有些残差块的 short cut 是实线的,而有些则是虚线的。这些虚线的 short cut 上通过1×1的卷积核进行了维度处理(特征矩阵在长宽方向降采样,深度方向调整成下一层残差结构所需要的channel)。

6、迁移学习简介
(1)迁移学习是一个比较大的领域,我们这里说的迁移学习是指神经网络训练中使用到的迁移学习。
(2)在迁移学习中,我们希望利用源任务(Source Task)学到的知识帮助学习目标任务 (Target Task)。例如,一个训练好的图像分类网络能够被用于另一个图像相关的任务。再比如,一个网络在仿真环境学习的知识可以被迁移到真实环境的网络。迁移学习一个典型的例子就是载入训练好VGG网络,这个大规模分类网络能将图像分到1000个类别,然后把这个网络用于另一个任务,如医学图像分类。
(3)为什么可以这么做呢?如下图所示,神经网络逐层提取图像的深层信息,这样,预训练网络就相当于一个特征提取器。

(4)使用迁移学习的优势:
  * 能够快速的训练出一个理想的结果
  * 当数据集较小时也能训练出理想的效果
  (注意:使用别人预训练好的模型参数时,要注意别人的预处理方式。)
(5)常见的迁移学习方式:
  * 载入权重后训练所有参数
  * 载入权重后只训练最后几层参数
  * 载入权重后在原网络基础上再添加一层全连接层,仅训练最后一个全连接层


关注

  • 个人微信公众号:Mn2+

  • 哔哩哔哩:不爱码字的小懒马儿

  • GitHub

-------------本文结束感谢您的阅读-------------