ResNet 简介

article/2025/9/18 3:40:44

ResNet

本文对resnet进行介绍,文章目录如下:

  • ResNet 历史
  • ResNet 亮点
  • 为何层数不能太深
  • residual 残差模块介绍
  • 网络结构
  • BN 层
  • 迁移学习

本文参考资料有:

  • 6.1 ResNet网络结构,BN以及迁移学习详解 https://www.bilibili.com/video/BV1T7411T7wa
  • ResNet原论文 https://arxiv.org/pdf/1512.03385.pdf
  • Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift https://arxiv.org/abs/1502.03167

ResNet 历史

ResNet在2015年由微软实验室提出,在2015 ImageNet中分类任务第一,目标检测第一,COCO数据集目标检测第一,图像分割第一。

原论文如下:

请添加图片描述

ResNet 亮点

亮点主要有三点:

  • ResNet采用了超深的网络结构,作者尝试了超过1000层的网络结构。
  • 提出了residual模块。 解决退化问题
  • 使用Batch Normalization加速训练,丢弃了dropout层。 解决梯度消失/梯度爆炸问题

为何层数不能太深

如果层数太深会引起梯度消失与梯度爆炸和退化问题。其中梯度消失指的是,假如你每次都乘以一个<1的数,由级数知识可知,最终结果会趋向于无穷,这个问题最终使用BN层消除了。还会引起退化问题,最终退化问题通过引入residual残差结构解决了。

请添加图片描述

residual 残差模块介绍

残差模块即特征矩阵相加,而对于深度更深的ResNet,作者通过使用1x1卷积核降维升维后,再进行特征矩阵的相加实现。两个特征矩阵要实现加法,需要保证两个特征矩阵的[channels, height, width]要相同。下图中,通过深度残差模块(右),我们能够明显地发现我们的网络所需要参数减少了。

请添加图片描述

网络结构

ResNet的模型结构见下表:

请添加图片描述

需要注意的是,每一个conv[n]_x(18,34浅层n>2,50,101,152深层n>1)的第一个层都是虚线,需要对输入特征矩阵的大小进行变换,使其不等于输出特征矩阵大小。如果是实线的残差结构,则输出特征矩阵和输入矩阵是一样的,而对于虚线的残差结构捷径部分也是经过卷积处理的,输出特征矩阵往往不等于输出特征矩阵,如下:

请添加图片描述

BN 层

BN是解决过拟合的一种方式,BN全称Batch Normalization,它的目的是使每一批数据(batch)的每一层的feature map满足均值为0,方差为1的分布规律,在增加BN层后,在该BN层的前一层的Conv2d的bias参数得为False。

BN是google团队2015年论文”Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift"中提出,原论文链接https://arxiv.org/abs/1502.03167,通过该方法能够加速网络的收敛并提升准确率。

请添加图片描述

请添加图片描述

我们对feature map输出特征矩阵的每一维度的数据求均值和方差,再通过标准化处理,缩放平移,得到最终的 y i y_i yi。缩放所使用的 β , γ \beta, \gamma β,γ是通过学习得到的。BN对于多维度的例子如下:

请添加图片描述

使用BN时需要注意以下三点:

  • 训练时要将training参数设置为True,验证时要将training参数设置为False,pytorch中可以通过model.train()和model.eval()实现。
  • batch_size要设置的尽量大,但是这个和硬件设备有关。
  • 建议将BN层放在卷积层和激活层之间,且在卷积层不要设置bias,bias设置了也没用。

BN总结:

请添加图片描述

迁移学习

迁移学习指的是使用别人训练好的模型参数再进行训练,他的优势在于:

  • 能够快速地训练出一个理想的结果。
  • 当数据集较小的时候也能够训练出理想的效果。

使用迁移学习需要保证模型的全部参数或者某一部分参数是相同的。在对新的数据集进行训练时,往往低纬度的特征是通用的,而高维度的特征才是我们需要学习的,所以我们可以采用迁移学习对具有相同部分的新的网络或者新的数据集的高维度特征进行学习。

请添加图片描述

常见的迁移学习的方式具有以下几种:

  • 载入权重后训练所有参数。(使用不同的数据集)// 效果最好
  • 载入权重后只训练最后几层参数。(即全连接层中,你的分类个数可能不同)
  • 载入权重后在原网络基础上再添加一层全连接层,仅训练最后一个全连接层。(改变网络模型)

使用迁移学习,我们需要注意两个网络得有相同部分或完全相同才能迁移学习;要注意别人的预处理方式,保持自己的预处理方式与别人的预处理方式相同。


http://chatgpt.dhexx.cn/article/u75RN7SS.shtml

相关文章

Resnet

再上一偏博文中我们说到越复杂的问题需要越深层的神经网络拟合&#xff0c;但是越深层的神经网络越难训练&#xff0c;原因可能是过拟合以及损失函数的局部最优解过多&#xff08;鞍点过多&#xff1f;导致经过相同的epoch更深的网络的trainerror大于较浅的网络&#xff0c;因为…

ResNet网络详解

ResNet ResNet在2015年由微软实验室提出&#xff0c;斩获当年lmageNet竞赛中分类任务第一名&#xff0c;目标检测第一名。获得coco数据集中目标检测第一名&#xff0c;图像分割第一名。 ResNet亮点 1.超深的网络结构(突破1000层) 2.提出residual模块 3.使用Batch Normalizat…

1 通俗易懂解释Resnet50

通俗易懂Resnet50网络结构分析 1 Why(该网络要解决什么样的问题)1.1 什么叫梯度消失和梯度爆炸 2 How(如何解决该问题)2.1 直观解释2.2 残差是什么2.3 网络结构 3 what 结果怎么样 1 Why(该网络要解决什么样的问题) 理论上网络越来越深&#xff0c;获取的信息越多&#xff0c;…

ResNet50网络结构

代码&#xff1a; import keras keras.utils.plot_model(keras.applications.ResNet50(include_topTrue,input_shape(224,224,3),weightsNone), to_fileimage_model.png, show_shapesTrue) ResNet50的标准输入为224x224&#xff0c;avg_pool&#xff08;-3层&#xff09;及之…

resnet18与resnet50

ResNet18的18层代表的是带有权重的 18层&#xff0c;包括卷积层和全连接层&#xff0c;不包括池化层和BN层。 Resnet论文给出的结构图 参考ResNet详细解读 结构解析&#xff1a; 首先是第一层卷积使用7∗77∗7大小的模板&#xff0c;步长为2&#xff0c;padding为3。之后进行…

长文解析Resnet50的算法原理

大家好啊&#xff0c;我是董董灿。 恭喜你发现宝藏了。收藏起来吧。 前言 从打算写图像识别系列文章开始已经快2个月了&#xff0c;目前写了有9篇文章&#xff0c;几乎涵盖了Renset50这一CNN网络95%的算法。 今天整理了下&#xff0c;修复一些笔误和表述错误&#xff0c;整…

【pytorch】ResNet18、ResNet20、ResNet34、ResNet50网络结构与实现

文章目录 ResNet主体BasicBlockResNet18ResNet34ResNet20 Bottleneck BlockResNet50 ResNet到底解决了什么问题 选取经典的早期Pytorch官方实现代码进行分析 https://github.com/pytorch/vision/blob/9a481d0bec2700763a799ff148fe2e083b575441/torchvision/models/resnet.py 各…

神经网络学习小记录20——ResNet50模型的复现详解

神经网络学习小记录20——ResNet50模型的复现详解 学习前言什么是残差网络什么是ResNet50模型ResNet50网络部分实现代码图片预测 学习前言 最近看yolo3里面讲到了残差网络&#xff0c;对这个网络结构很感兴趣&#xff0c;于是了解到这个网络结构最初的使用是在ResNet网络里。 …

彻底搞懂ResNet50

pytorch实现resnet50代码如下&#xff1a; &#xff08;1&#xff09;一个block实现&#xff0c;如1x1&#xff0c;64&#xff0c;3x3&#xff0c;64&#xff0c;1x1&#xff0c;256。这段代码中&#xff0c;1x1的卷积核只是为了改变输出通道数&#xff0c;3x3的卷积可能改变卷…

【ResNet】Pytorch从零构建ResNet50

Pytorch从零构建ResNet 第一章 从零构建ResNet18 第二章 从零构建ResNet50 文章目录 Pytorch从零构建ResNet前言一、Res50和Res18的区别&#xff1f;1. 残差块的区别2. ResNet50具体结构 二、ResNet分步骤实现三、完整例子测试总结 前言 ResNet 目前是应用很广的网络基础框架&…

ResNet介绍

ResNet介绍 1 简要概括 ResNet&#xff08;Residual Neural Network&#xff09;由微软研究院的Kaiming He等四名华人提出&#xff0c;通过使用ResNet Unit成功训练出了152层的神经网络&#xff0c;并在ILSVRC2015比赛中取得冠军&#xff0c;在top5上的错误率为3.57%&#xff0…

resnet 20 和resnet 56

resnet是什么 在论文中&#xff0c;存在resnet20和resnet56&#xff0c;之前没注意&#xff0c;现在仔细了解后才发觉和标准的ResNet有差异&#xff0c;可参考resnet-50 vs resnet-56&#xff08;或者18 vs 20&#xff09;的明显区别在哪&#xff0c;性能差的好多&#xff1f;…

ResNet详解

1.什么是ResNet&#xff1f; ResNet 网络是在 2015年 由微软实验室中的何凯明等几位大神提出&#xff0c;斩获当年ImageNet竞赛中分类任务第一名&#xff0c;目标检测第一名。获得COCO数据集中目标检测第一名&#xff0c;图像分割第一名。 2.网络中的亮点 1.超深的网络结构&a…

关于ResNet50的解读

说起ResNet必然要提起He大佬&#xff0c;这真是神一样的存在&#xff0c;这不&#xff0c;不久前又有新的突破RegNet&#xff0c;真是厉害啊。 ResNet开篇之作在此&#xff0c;后面又出了各种变形啥的&#xff0c;ResNeXt&#xff0c;inception-ResNet等等吧&#xff0c;He大佬…

【深度学习】resnet-50网络结构

最近许多目标检测网络的backbone都有用到resnet-50的部分结构&#xff0c;于是找到原论文&#xff0c;看了一下网络结构&#xff0c;在这里做一个备份&#xff0c;需要的时候再来看看。 整体结构 layer0 首先是layer0&#xff0c;这部分在各个网络都一样&#xff0c;如图&…

一张图看懂Resnet50与Resnet101算法

直接上流程图&#xff0c;算法很清晰。 仅包括卷积层和全连接层&#xff0c;不包括池化层&#xff0c;正好50层。 相比于ResNet_50&#xff0c;ResNet_101就是在上图第3个大虚线框多了17个bottleneck&#xff0c;17*350101&#xff0c;说白了就是将下图复制17个加入上图的第3个…

什么是Resnet50模型?

1 深度残差网络 随着CNN的不断发展&#xff0c;为了获取深层次的特征&#xff0c;卷积的层数也越来越多。一开始的 LeNet 网络只有 5 层&#xff0c;接着 AlexNet 为 8 层&#xff0c;后来 VggNet 网络包含了 19 层&#xff0c;GoogleNet 已经有了 22 层。但仅仅通过增加网络层…

resnet-50介绍(一)

这篇文章讲解的是使用Tensorflow实现残差网络resnet-50. 侧重点不在于理论部分&#xff0c;而是在于代码实现部分。在github上面已经有其他的开源实现&#xff0c;如果希望直接使用代码运行自己的数据&#xff0c;不建议使用本人的代码。但是如果希望学习resnet的代码实现思路&…

ResNet50 网络结构搭建(PyTorch)

ResNet50是一个经典的特征提取网络结构&#xff0c;虽然Pytorch已有官方实现&#xff0c;但为了加深对网络结构的理解&#xff0c;还是自己动手敲敲代码搭建一下。需要特别说明的是&#xff0c;笔者是以熟悉网络各层输出维度变化为目的的&#xff0c;只对建立后的网络赋予伪输入…