《深度学习》—— ResNet 残差神经网络

一给  金牌会员 | 2024-9-27 08:33:15 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 871|帖子 871|积分 2613

一、什么是ResNet?



  • ResNet 网络是在 2015年 由微软实行室中的何凯明等几位大神提出,斩获当年ImageNet比赛中分类任务第一名,目标检测第一名。得到COCO数据会合目标检测第一名,图像分割第一名。
  • ResNet 网络中的两个核心组成部分

    • 残差结构(Residual Structure)
    • Batch Normalization(批归一化)

  • 为什么要提出残差结构?

    • 在ResNet 网络没有提出来之前,全部的神经网络都是通过卷积层和池化层的叠加组成的。
    • 许多人认为卷积层和池化层的层数越多,模子的效果会越好
    • 在实际的试验中发现,随着卷积层和池化层的叠加,学习效果不会逐渐变好,反而出现2个问题:
                 1.梯度消散和梯度爆炸
      梯度消散:若每一层的误差梯度小于1,反向流传时,网络越深,梯度越趋近于0
      梯度爆炸:若每一层的误差梯度大于1,反向流传时,网络越深,梯度越来越大
                      2.退化问题
      随着层数的增加,预测效果反而越来越差, 下面是何凯明他们论文中实行的可视化图,可以看出模子层数多的反而没有少的效果好


  • 为相识决梯度消散或梯度爆炸问题,论文提出通过数据的预处理以及在网络中使用 BN(Batch Normalization)层来解决。
  • 为相识决深层网络中的退化问题,可以人为地让神经网络某些层跳过下一层神经元的毗连,隔层相连,弱化每层之间的强接洽。这种神经网络被称为 残差网络 (ResNets)
  • ResNet论文提出了 residual结构(残差结构)来减轻退化问题,下图是使用residual结构的卷积网络,可以看到随着网络的不停加深,效果并没有变差,而是变的更好了

  • ResNet 网络有差别数量的网络层模子,下图为 ResNet18、ResNet34、ResNet50、ResNet101、ResNet152 网络的表格化结构图

二、残差结构(Residual Structure)



  • 如下图所示,残差块包罗两条路径,一条是主路径(通常包罗多个卷积层),用于提取特征;另一条是恒等快捷毗连,允许输入直接跳过主路径的某些层与输出相加
  • 所谓相加是特征矩阵类似位置上的数字进行相加
  • 两条路径的输出在特征维度上需要保持一致,以便进行相加操作。这通常通过调解卷积层的步长(stride)、使用1x1卷积核进行升维或降维等方式来实现。

  • 以ResNet 18网络为例

    • 下面是 ResNet 18网络完整的图形化结构图


  • 部分残差块如下:

  • 非残差结构-第一层时(左边结构):
  • 经过卷操作得到输出为[56,56,64]:

    • 通过设置步长stride=1、3x3卷积和卷积核64,使得高宽与卷积核不变
    • 激活函数relu处理
    • 通过设置步长stride=1、3x3卷积和卷积核64,重复特征提取

  • 残差结构-第二层(右边结构):
  • 由上一层的输入为[56,56,64]——>输出为[28,28,128]:

    • 通过设置步长stride=2、3x3卷积和卷积核128,使得高宽从56缩减一半到28,卷积核从64个更改为128个
    • 激活函数relu处理
    • 通过设置步长stride=1、3x3卷积和卷积核128,重复特征提取

  • 快捷毗连的输入为[56,56,64]——>[1x1x128]——>输出为[28,28,128]:

    • 通过设置步长stride=2、1x1卷积和卷积核更改,使得高宽从56缩减一半到28,卷积核从64个更改为128个。
    • 与经过卷积层处理后的输出值相加

三、Batch Normalization(BN----批归一化)

参考博客


  • 所谓Feature Map(特征图)是卷积核卷出来的,你用各种环境下的卷积核去乘以原图,会得到各种各样的feature map。
  • 在输入一张图片时每每会使用预处理来使得图片满意某一个分布规律,以加快特征提取。然后进行一次卷积得到一个feature map,而这个feature map就不一定还满意之前所要求的分布规律。
  • Batch Normalization是指批标准化处理,将一批数据的feature map满意均值为0,方差为1的分布规律。留意不是对某一张图片的feature map,而是一整批的feature map,因为BN需要计算整个batch的均值和方差。
  • 如下图

  • 原理

    • 标准化处理:在训练过程中,对每个小批量数据进行标准化处理,即对每个特征维度进行归一化操作。这有助于缓解内部协变量偏移(Internal Covariate Shift)问题,即网络在训练过程中由于参数更新导致的数据分布变革问题
    • 可学习参数:为了规复出原始网络所要学习的特征分布,BN引入了可学习的缩放因子(γ)和偏移因子(β),使得网络可以通过学习这些参数来调解标准化后的数据分布
    • 训练与测试在训练阶段,BN使用当前小批量数据的均值和方差进行标准化处理;在测试阶段,则使用训练过程中全部小批量数据的均值和方差的移动平均进行标准化处理。

  • 使用留意

    • (1)训练时要将traning参数设置为True进行统计,在验证时将trainning参数设置为False,对统计的值进行验证。在pytorch中可通过创建模子的model.train()和model.eval()方法控制。
    • (2)batch_size (每次迭代中,模子同时处理多少个数据点)尽可能设置大点,设置小后体现可能很糟糕,设置的越大求的均值和方差越接近整个训练集的均值和方差。
    • (3)建议将BN层放在卷积层(Conv)和激活层(例如Relu)之间


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

一给

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表