【深度学习】ResNet网络详解

这篇具有很好参考价值的文章主要介绍了【深度学习】ResNet网络详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ResNet

参考

ResNet论文:
https://arxiv.org/abs/1512.03385
本文主要参考视频:https://www.bilibili.com/video/BV1T7411T7wa
https://www.bilibili.com/video/BV14E411H7Uw

结构概况

ResNet的网络结构图如图所示:

resnet网络结构,# 论文阅读,深度学习,网络,计算机视觉

这是ResNet不同层数的网络 结构图。

可以看到,结构大差不差。不论是18层、34层、50层、还是101层、152层。

上来都是一个7x7的卷积层,然后是一个3x3的最大池化下采样。

然后就是按照图中的conv2_xconv3_xconv4_xconv5_x中的残差结构。

最后再跟一个平均池化下采样,和全连接层,sofmax输出。

conv1与池化层

我们先看一下前两层。

resnet网络结构,# 论文阅读,深度学习,网络,计算机视觉

首先呢,ResNet使用ImagesNet数据集,采用的默认输入尺寸是224x224,RGB图像,三通道

按照表中,我们可以看到,图片输入之后,首先是一个7x7,64,stride 2

也就是一个卷积层,卷积核大小为7x7,输出通道为64(也就是卷积核个数),stride=2。

没说padding,我们需要自己算一下,表里写了这一层的输出是112x112

补充一点知识:

假设输入图片为 W x W 卷积核大小为F x F,步长stride=S,padding=P(填充的像素数)
则输出图像的大小 W2 =(W - F +2P)/S +1

可以注意到这个公式中有除法,一般我们做卷积时除不尽的时候都向下取整

可以参考pytorch官方文档:https://pytorch.org/docs/stable/generated/torch.nn.Conv2d.html#torch.nn.Conv2d

resnet网络结构,# 论文阅读,深度学习,网络,计算机视觉

但是我们做池化的时候,也可以采用向上取整

参看pytorch官方文档:https://pytorch.org/docs/stable/generated/torch.nn.MaxPool2d.html#torch.nn.MaxPool2d

有一个参数ceil_mode,默认是floor是向下取整,可以设置为True,向上取整

ceil_mode – when True, will use ceil instead of floor to compute the output shape

有的时候池化会选择向上取整(最大池化和平均池化有时取整方式不同)

那就是说 112 = (224 - 7 + 2P)/ 2 + 1

化简后就是 111 = (217 + 2P)/2 = 108.5+P

所以P=3 所以Padding是3

所以我们输入图片进来,第一层是in_channel=3,out_channel=64,kernel_size=7,stride=2,padding=3

没有偏置bias。经过这一层我们会得到大小为112x112的尺寸,通道数为64

然后经过一个3x3的最大池化下采样,stride=2

W o u t = ( W i n − F + 2 P ) / S + 1 W_{out}= (W_{in} - F + 2P)/S + 1 Wout=(WinF+2P)/S+1

池化层也采用向下取整。所以 56=(112 - 3 + 2P)/2 +1 计算出来P=1

所以第二层池化层是in_channel=64,out_channel=64,kernel_size=3,stride=2,padding=1

经过池化层,我们会得到一个56x56,64通道的输出,紧接着就是conv2_x中对应的一系列残差结构

残差结构

经过前面两层,我们得到一个56x56,64通道的输出

紧接着是conv2_x

这就是残差块,残差块大致有两种类型,一种是两层卷积的,一种的三层卷积的,就是途中红框画的。

resnet网络结构,# 论文阅读,深度学习,网络,计算机视觉

比如如果是ResNet34,那么池化层之后,就是两个3x3,64的卷积层,这两个组成一个残差块。

如果是ResNet50,那么池化层之后就是1x1,64的卷积层 + 3x3,64的卷积层 + 1x1,256的卷积层,三个组成一个残差块。

后面写的x3就代表有三个这样的残差块连接一起

如下图所示,关于残差结构的原理,不多说了,这里主要讲实现。

resnet网络结构,# 论文阅读,深度学习,网络,计算机视觉

有几个点需要注意:

以ResNet34为例,按照表格里面写的,池化之后,我们的大小是56x56x64,那么经过conv2_x之后我们的输出还是56x56x64

输入和输出特征矩阵的大小一样,那么就说明stride=1,padding=1

因为公式 W o u t = ( W i n − F + 2 P ) / S + 1 W_{out}= (W_{in} - F + 2P)/S + 1 Wout=(WinF+2P)/S+1

要保证一样,那就S=1,不然的话,大于1就没法一样,然后计算padding可知,也是1

所以经过这两层之后呢,得到的还是56x56x64的特征图,可以直接与残差块那个分支相加。

但是呢这里需要注意,我们看conv3_x,是3x3,128通道,也就是说经过conv2_x后得到的56x56,64通道

conv3_x里面升维了,并且大小也变了,变成28x28了

这时候要注意一个问题,分支与主分支的结果就无法相加了,大小不一致,维度不一致啊

怎么办呢,所以还有一种虚线连接的残差块,如图

resnet网络结构,# 论文阅读,深度学习,网络,计算机视觉

在分支里面做了一个1x1的卷积层,1x1的卷积层主要是用来升维和降维的。同时通过设置stride可以改变尺寸

所以就通过这个卷积层得到了28x28,128通道的特征图,可以与主分支直接相加了

并且我们通过计算可以算出来,残差块主分支padding=1,右边的分支padding=2

对于ResNet50和101,深层次的ResNet也是按照这样的方法处理的

resnet网络结构,# 论文阅读,深度学习,网络,计算机视觉

但是注意啊,这种虚线结构只是为了解决尺寸不一样无法相加的情况

什么情况下需要用这个呢?

对于ResNet18和ResNet34而言,conv3_xconv4_xconv5_x的第一层才需要虚线结构。

可以看到表里面,ResNet34的conv3_x的第一层会输出28x28,128通道的,但是输入是56x56,64通道的,所以需要虚线结构,而conv2_x不需要,因为输入输出是一样的。

而对于ResNet50和ResNet101,ResNet152而言,conv2_xconv3_xconv4_xconv5_x的第一层都需要虚线结构

因为ResNet50从conv2_x开始,输入56x56,64通道,输出是56x56,256通道的,所以conv2_x也需要虚线结构,不过这个虚线结构只调整通道数即可。

resnet网络结构,# 论文阅读,深度学习,网络,计算机视觉

所以,我们根据表格可以看到ResNet50中,conv3_x有四个残差块,这其中只有第一个会遇到尺寸不一样的问题,需要用虚线结构,别的都不需要。

同样的,conv4_xconv5_x的第一层也需要

另外再注意一个改进:

resnet网络结构,# 论文阅读,深度学习,网络,计算机视觉

Batch Normalization

Batch Normalization的目的是使我们的一批(Batch)feature map满足均值为0,方差为1的分布规律。

这里关于BN层的原理就不写了,可以看这个视频和博客

https://www.bilibili.com/video/BV1T7411T7wa

https://blog.csdn.net/qq_37541097/article/details/104434557

我们需要知道的是

建议将bn层放在卷积层(Conv)和激活层(例如Relu)之间,且卷积层不要使用偏置bias

所以说,我们实际上的残差网络块应该是如图,这个样子的

resnet网络结构,# 论文阅读,深度学习,网络,计算机视觉

总结

至此,整个ResNet的网络结构就清晰了。其中需要注意的点主要就是:文章来源地址https://www.toymoban.com/news/detail-793831.html

  • 计算卷积过程中的参数 W o u t = ( W i n − F + 2 P ) / S + 1 W_{out}= (W_{in} - F + 2P)/S + 1 Wout=(WinF+2P)/S+1
  • ResNet18层和34层conv3_xconv4_xconv5_x中的第一层需要用虚线结构
  • ResNet50层、101层和152层中的conv2_xconv3_xconv4_xconv5_x中的第一层都需要用虚线结构
  • BN层放在卷积层(Conv)和Relu之间,且卷积层不要使用偏置bias

到了这里,关于【深度学习】ResNet网络详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

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

    选取经典的早期Pytorch官方实现代码进行分析 https://github.com/pytorch/vision/blob/9a481d0bec2700763a799ff148fe2e083b575441/torchvision/models/resnet.py 各种ResNet网络是由BasicBlock或者bottleneck构成的,它们是构成深度残差网络的基本模块 ResNet的大部分各种结构是1层conv+4个block+1层fc 需要注意的是最后

    2024年02月02日
    浏览(31)
  • 【深度学习】ResNet网络详解

    参考 ResNet论文: https://arxiv.org/abs/1512.03385 本文主要参考视频:https://www.bilibili.com/video/BV1T7411T7wa https://www.bilibili.com/video/BV14E411H7Uw 结构概况 ResNet的网络结构图如图所示: 这是ResNet不同层数的网络 结构图。 可以看到,结构大差不差。不论是18层、34层、50层、还是101层、152层。

    2024年01月16日
    浏览(27)
  • torchvision中的标准ResNet50网络结构

    注:仅用以记录学习 打印出来的网络结构如下: 结构: 修改最后一层(fc层)代码: 用于特定的分类任务,其中最后一层全连接层的输出类别数量被指定为输入参数

    2024年02月04日
    浏览(28)
  • 深度学习——残差网络(ResNet)

    随着卷积神经网络的发展和普及,我们了解到增加神经网络的层数可以提高模型的训练精度和泛化能力,但简单地增加网络的深度,可能会出现 “梯度弥散” 和 “梯度爆炸” 等问题。传统对应的解决方案则是 权重的初始化 (normalized initializatiton)和 批标准化 (batch normlizatio

    2024年02月06日
    浏览(42)
  • 残差网络(ResNet) -深度学习(Residual Networks (ResNet) – Deep Learning)

    在第一个基于cnn的架构(AlexNet)赢得ImageNet 2012比赛之后,每个随后的获胜架构都在深度神经网络中使用更多的层来降低错误率。这适用于较少的层数,但当我们增加层数时,深度学习中会出现一个常见的问题,称为消失/爆炸梯度。这会导致梯度变为0或太大。因此,当我们增加

    2024年02月15日
    浏览(31)
  • 深度学习(16)--基于经典网络架构resnet训练图像分类模型

    目录 一.项目介绍 二.项目流程详解 2.1.引入所需的工具包 2.2.数据读取和预处理 2.3.加载resnet152模型 2.4.初始化模型 2.5.设置需要更新的参数 2.6.训练模块设置 2.7.再次训练所有层 2.8.测试网络效果 三.完整代码 使用PyTorch工具包调用经典网络架构resnet训练图像分类模型,用于分辨

    2024年02月20日
    浏览(33)
  • 深度学习实战——卷积神经网络/CNN实践(LeNet、Resnet)

          忆如完整项目/代码详见github: https://github.com/yiru1225 (转载标明出处 勿白嫖 star for projects thanks) 本系列博客重点在深度学习相关实践(有问题欢迎在评论区讨论指出,或直接私信联系我)。 第一章  深度学习实战——不同方式的模型部署(CNN、Yolo)_如何部署cnn_

    2023年04月11日
    浏览(33)
  • 【深度学习】Inception模型结构解析,关键词:Inception-v1、v2、v3、v4、Inception-ResNet-v1、Inception-ResNet-v2

    目录 1.Inception-v1 1.1 Introduction 1.2 Inception结构 1.3 GoogLeNet 参考文献 2.Inception-v2 2.1 introduction 2.2 BN算法 参考文献 3.Inception-v3 3.1 General Design Principles 3.2 Factorizing Convolutions with Large Filter Size 3.3 其他思想 参考文献 4. Inception-v4 4.1 introduction 4.2 Inception-v4 结构 4.3 Inception-ResNet-v1 结构

    2024年02月11日
    浏览(31)
  • 【基于深度学习的人脸识别】(Dlib+ResNet残差神经网络)——QT(C++)+Linux

    dlib_face_recognition_resnet_model_v1.dat 是基于深度学习的人脸识别模型,是dlib库中的一个重要组件。该模型的原理涉及到深度卷积神经网络(DCNN)和具体的人脸识别算法。 dlib 人脸识别采用了 Resnet 残差神经网络,识别精度高于普通神经网络,同样我们可以到官网去下载训练好的模

    2024年04月23日
    浏览(33)
  • 【AI】《动手学-深度学习-PyTorch版》笔记(十九):卷积神经网络模型(GoogLeNet、ResNet、DenseNet)

    发布时间:2014年 GoogLeNet的贡献是如何选择合适大小的卷积核,并将不同大小的卷积核组合使用。 之前介绍的网络结构都是串行的,GoogLeNet使用并行的网络块,称为“Inception块” “Inception块”前后进化了四次,论文链接: [1]https://arxiv.org/pdf/1409.4842.pdf [2]https://arxiv.org/pdf/150

    2024年02月12日
    浏览(38)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包