什么是Resnet50模型?

这篇具有很好参考价值的文章主要介绍了什么是Resnet50模型?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 深度残差网络

 随着CNN的不断发展,为了获取深层次的特征,卷积的层数也越来越多。一开始的 LeNet 网络只有 5 层,接着 AlexNet 为 8 层,后来 VggNet 网络包含了 19 层,GoogleNet 已经有了 22 层。但仅仅通过增加网络层数的方法,来增强网络的学习能力的方法并不总是可行的,因为网络层数到达一定的深度之后,再增加网络层数,那么网络就会出现随机梯度消失的问题,也会导致网络的准确率下降。以下实验结果也表明确实出现了该现象,论文中称为网络退化现象,注意这和网络过拟合是两种情况。
什么是Resnet50模型?

1.1 什么是梯度爆炸、梯度消失?

什么是Resnet50模型?
上图是一个四层的全连接的网络,包括输入层、隐层(中间除了输入层跟输出层的总和)、输出层,假设每层网络激活后的输出为fi(x),其i表示第i层,x指的是第i层的输入,也就是第i-1层的输出,f是作为激活函数,那么就什么是Resnet50模型?,反向传播算法是基于梯度下降,以目标负梯度方向对参数进行调整,参数的更新为什么是Resnet50模型?,如果要更新第二层隐藏层的权值信息,根据链式求导法则:什么是Resnet50模型?其实类似于什么是Resnet50模型?就是对激活函数进行求导,如果所求导结果大于1,那么随着层数的增加,求出的梯度的更新将以指数形式相应增加,发生前文所提到的梯度爆炸;如果小于1,求出的梯度的更新将以指数形式相应减少,就会发生梯度消失。

1.2 如何解决这个问题?

 为了解决这一问题,传统的方法是采用数据初始化和正则化的方法,这解决了梯度消失的问题,但是网络准确率的问题并没有改善。而残差网络的出现可以解决梯度问题,而网络层数的增加也使其表达的特征也更好,相应的检测或分类的性能更强,再加上残差中使用了 1×1 的卷积,这样可以减少参数量,也能在一定程度上减少计算量。

 ResNet 网络的关键就在于其结构中的残差单元,如下图所示,在残差网络单元中包含了跨层连接,图中的曲线可以将输入直接跨层传递,进行了同等映射,之后与经过卷积操作的结果相加。假设输入图像为 x,输出为H(x),中间经过卷积之后的输出为F(x)的非线性函数,那最终的输出为H(x) = F(x) + x,这样的输出仍然可以进行非线性变换,残差指的是“差”,也就是F(x),而网络也就转化为求残差函数F(x) = H(x) - x,这样残差函数要比 F(x) = H (x) 更加容易优化。

什么是Resnet50模型?
 Resnet可以理解为三个人之间传话的游戏,第一个人传给第二个人,第二个人传给第三个人,那么第三个人收到的信息可能会由于第二个人理解错误,接收的信息受到影响,增加了传错的概率,所以Resnet的作用可以直跳过第二个人,直接把话给到第三个人。这个就是对于Resnet的简单理解。

1.3 什么是残差?

 ResNet提出了两种mapping:一种是identity mapping,指的就是图中”弯弯的曲线”,另一种residual mapping,指的就是除了”弯弯的曲线“那部分,所以最后的输出是 H(x) = F(x) + x,identity mapping顾名思义,就是指本身,也就是公式中的x,而residual mapping指的是“差”,也就是F(x) = H(x)−x,所以残差指的就是F(x)部分,这里有解释了一遍F(x) = H(x)−x。

2 Resnet50 网络

 Resnet50网络中包含了49 个卷积层,外加一个全连接层(FC)。如下图所示,Resnet50网络结构可以分成七个部分,第一部分不包含残差块,主要对输入进行卷积、正则化、激活函数、最大池化的计算。第二、三、四、五部分结构都包含了残差块,图中的绿色图块不会改变残差块的尺寸,只用于改变残差块的维度。在Resnet50网络结构中,残差块都有三层卷 积,那网络总共就是有1+3 × (3+4+6+3) = 49个卷积层,加上最后的全连接层总共是50层,这也是Resnet50名称的由来。网络的输入为224×224×3,经过前五部分的卷积计算,输出为7×7×2048,池化层会将其转化成一个特征向量,最后分类器会对这个特征向量进行计算并输出类别概率。

下面这张图片是Resnet文章所展示的结构图,文章会对其进行剖析,让人好理解。
什么是Resnet50模型?
Resnet50的另外一种理解。
什么是Resnet50模型?

2.1 ResNet50整体结构

上图可划分为左、中、右3个部分,三者内容分别:Resnet50整体结构;Resnet50各个stage具体结构;Bottleneck具体结构。
什么是Resnet50模型?
整体结构部分分为5个stage,其中stage 0 的结构是比较简单,可以视其为对INPUT图像的预处理,后4个Stage都由Bottleneck组成,结构较为相似。Stage 1包含3个Bottleneck,剩下的3个stage分别包括4、6、3个Bottleneck。

stage 0 阶段
  • (3,224,224) 指输入INPUT的通道数(channel)、高(height)和宽(width),即(C,H,W)。现假设输入的高度和宽度相等,所以用(C,W,W)表示。
    该stage中第1层包括3个先后操作:
    1.CONV
    CONV是卷积(Convolution)的缩写,7×7指卷积核大小,64指卷积核的数量(即该卷积层输出的通道数),/2指卷积核的步长为2。
    2.BN
    BN是Batch Normalization的缩写,即常说的BN层。
    3.RELU
    RELU指ReLU激活函数。

  • 该stage中第2层为MAXPOOL,即最大池化层,其卷积核大小为3×3、步长为2。

  • (64,56,56)是该stage输出的通道数(channel)、高(height)和宽(width),其中64等于该stage第1层卷积层中卷积核的数量,56等于224/2/2(步长为2会使输入尺寸减半)。

总体来讲,在Stage 0中,形状为(3,224,224)的输入先后经过卷积层、BN层、ReLU激活函数、MaxPooling层得到了形状为(64,56,56)的输出。

stage 1 阶段

与stage 0类似,stage1输入的形状为(64,56,56),输出的形状为(64,56,56)

Bottleneck具体结构

现在要介绍2种Bottleneck的结构。“BTNK”指的是BottleNeck的缩写。

2种Bottleneck分别对应了2种情况:输入与输出通道数相同(BTNK2)、输入与输出通道数不同(BTNK1),这一点可以结合ResNet原文。

BTNK2

BTNK2有2个可变的参数C和W,即输入的形状(C,W,W)中的c和W。

令形状为(C,W,W)的输入为x,令BTNK2左侧的3个卷积块(以及相关BN和RELU)为函数F(x),两者相加(F(x)+x)后再经过1个ReLU激活函数,就得到了BTNK2的输出,该输出的形状仍为(C,W,W),即上文所说的BTNK2对应输入x与输出F(x)通道数相同的情况。

BTNK1

BTNK1有4个可变的参数C、W、C1和S。

与BTNK2相比,BTNK1多了1个右侧的卷积层,令其为函数G(x)。BTNK1对应了输入x与输出F(x)通道数不同的情况,也正是这个添加的卷积层将x变为G(x),起到匹配输入与输出维度差异的作用(G(x)和F(x)通道数相同),进而可以进行求和F(x)+G(x)。

总结

ResNet后4个stage中都有BTNK1和BTNK2。

  • 4个stage中BTNK2参数规律相同,4个stage中BTNK2的参数全都是1个模式和规律,只是输入的形状(C,W,W)不同。
  • stage 1中BTNK1参数的规律与后3个stage不同,然而,4个stage中BTNK1的参数的模式并非全都一样。具体来讲,后3个stage中BTNK1的参数模式一致,stage 1中BTNK1的模式与后3个stage的不一样,这表现在以下2个方面:
    1.参数S:BTNK1左右两个1×1卷积层是否下采样:
     stage 1中的BTNK1:步长S为1,没有进行下采样,输入尺寸和输出尺寸相等。
     后3个stage的BTNK1:步长S为2,进行了下采样,输入尺寸是输出尺寸的2倍。
    2.参数C和C1:BTNK1左侧第一个1×1卷积层是否减少通道数
     stage 1中的BTNK1:输入通道数C和左侧1×1卷积层通道数C1相等(C=C1=64),即左侧1×1卷积层没有减少通道数。
     后3个stage的BTNK1:输入通道数C和左侧1×1卷积层通道数C1不相等(C=2*C1),左侧1×1卷积层有减少通道数。

代码实现

class Bottleneck(nn.Module):
    expansion = 4  # 卷积核是前一个卷积核的四倍

    def __init__(self, in_channel, out_channel, stride=1, downsample=None):
        super(Bottleneck, self).__init__()
        self.conv1 = nn.Conv2d(in_channels=in_channel, out_channels=out_channel,
                               kernel_size=1, stride=1, bias=False)  # squeeze channels
        self.bn1 = nn.BatchNormalization(out_channel)
        # -----------------------------------------
        self.conv2 = nn.Conv2d(in_channels=out_channel, out_channels=out_channel, kernel_size=3, bias=False,
                                   stride=stride, padding=1)
        self.bn2 = nn.BatchNormalization(out_channel)
        # -----------------------------------------
        self.conv3 = nn.Conv2d(out_channels=out_channel * self.expansion, kernel_size=1, stride=1,
                               bias=False)
        self.bn3 = nn.BatchNormalization(out_channel * self.expansion)
        # -----------------------------------------
        self.relu = nn.ReLU(inplace=True)
        self.downsample = downsample

    def forward(self, x):
        identity = x
        if self.downsample is not None:  # 为None的话对应实线的残差结构,如果不为None则是虚线的
            identity = self.downsample(x)

        out = self.conv1(x)
        out = self.bn1(out)
        out = self.relu(out)

        out = self.conv2(out)
        out = self.bn2(out)
        out = self.relu(out)

        out = self.conv3(out)
        out = self.bn3(out)

        out = self.add([out, identity])
        out = self.relu(out)
        return out

引入Resnet50网络之后的效果

什么是Resnet50模型?

参考:文章来源地址https://www.toymoban.com/news/detail-412509.html

  1. https://zhuanlan.zhihu.com/p/353235794
  2. 哔哩哔哩—霹雳吧啦
  3. https://arxiv.org/abs/1512.03385

到了这里,关于什么是Resnet50模型?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 什么是Resnet50模型?

     随着CNN的不断发展,为了获取深层次的特征,卷积的层数也越来越多。一开始的 LeNet 网络只有 5 层,接着 AlexNet 为 8 层,后来 VggNet 网络包含了 19 层,GoogleNet 已经有了 22 层。但仅仅通过增加网络层数的方法,来增强网络的学习能力的方法并不总是可行的,因为网络层数到

    2023年04月13日
    浏览(43)
  • 【深度学习】了解残差网 ResNet 和 ResNeXt 的架构

            了解和实现 ResNet 和 ResNeXt 的架构以实现最先进的图像分类:从Microsoft到 Facebook [第 1 部分], 在这篇由两部分组成的博客文章中,我们将探讨残差网络。更具体地说,我们将讨论Microsoft研究和Facebook AI研究发布的三篇论文,最先进的图像分类网络 - ResNet和ResNeXt架构

    2024年02月17日
    浏览(39)
  • FPGA上利用Vitis AI部署resnet50 TensorFlow神经网络模型

    参考Xilinx官方教程快速入门 • Vitis AI 用户指南 (UG1414) 克隆 Vitis AI 存储库以获取示例、参考代码和脚本(连接github失败可能需要科学上网)。 安装Docker如何在 Ubuntu 20.04 上安装和使用 Docker 安装完docker后,下载最新Vitis AI Docker, 将官方的指令 docker pull xilinx/vitis-ai-pytorch/tensorfl

    2024年02月04日
    浏览(46)
  • 残差网络 ResNet

    目录 1.1 ResNet 2.代码实现 如上图函数的大小代表函数的复杂程度,星星代表最优解,可见加了更多层之后的预测比小模型的预测离真实最优解更远了, ResNet做的事情就是使得模型加深一定会使效果变好而不是变差。 参考: inplace=True (原地操作)-CSDN博客 Python中initialize的全面讲

    2024年01月22日
    浏览(39)
  • 残差网络ResNet

    残差网络的提出,是为了解决深度学习中的退化问题。 退化问题指的是随着神经网络层数的增加,网络性能反而逐渐降低的现象。换句话说,当我们不断增加神经网络的层数时,神经网络的训练误差可能会持续下降,但是验证集误差却不断增加,最终网络性能达到瓶颈。 退化

    2024年02月06日
    浏览(47)
  • ResNet-残差网络二

    上一篇讲了 ResNet 论文中的第一篇:Deep Residual Learning for Image Recognition,主要是介绍了残差网络解决了网络随着深度的增加而带来的退化问题;介绍了残差的概念及两种残差结构;最后通过丰富的实验来证明残差结构对增加网络深度,增强表达能力的准确率有足够的优化作用,

    2024年02月14日
    浏览(43)
  • 深度学习图像分类实战——pytorch搭建卷积神经网络(AlexNet, LeNet, ResNet50)进行场景图像分类(详细)

    目录 1  一、实验过程 1.1  实验目的 1.2  实验简介 1.3  数据集的介绍 1.4  一、LeNet5网络模型 1.5  二、AlexNet网络模型 1.6  三、ResNet50(残差网络)网络模型  二、实验代码 导入实验所需要的库  参数配置 数据预处理 重新DataSet 加载数据转为DataLoader函数 可视化一批训练

    2024年02月05日
    浏览(66)
  • 机器学习之ResNet(残差网络)与常用的标准数据集

    ResNet(Residual Network)是一种深度神经网络,由微软实验室的何凯明等几位大神在2015年提出,并在当年的ImageNet竞赛中获得了分类任务第一名。 ResNet通过引入残差结构(residual structure),解决了深度神经网络在训练过程中出现的梯度消失或梯度爆炸问题,从而使得网络可以构

    2024年02月11日
    浏览(38)
  • 【神经网络】(10) Resnet18、34 残差网络复现,附python完整代码

    各位同学好,今天和大家分享一下 TensorFlow 深度学习 中如何搭载 Resnet18 和 Resnet34 残差神经网络,残差网络 利用 shotcut 的方法成功解决了网络退化的问题 ,在训练集和校验集上,都证明了的更深的网络错误率越小。 论文中给出的具体的网络结构如下: Resnet50 网络结构 我已

    2023年04月08日
    浏览(40)
  • 经典神经网络论文超详细解读(五)——ResNet(残差网络)学习笔记(翻译+精读+代码复现)

    《Deep Residual Learning for Image Recognition》这篇论文是何恺明等大佬写的,在深度学习领域相当经典,在2016CVPR获得best paper。今天就让我们一起来学习一下吧! 论文原文:https://arxiv.org/abs/1512.03385 前情回顾: 经典神经网络论文超详细解读(一)——AlexNet学习笔记(翻译+精读)

    2024年02月08日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包