【深度学习】了解残差网 ResNet 和 ResNeXt 的架构

news2024/11/30 15:46:30

一、说明

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

二、残差网络历史回顾

        这是由两部分组成的系列文章的第 1 部分,解释了探索残差网络的博客文章。

我们将回顾以下三篇介绍和改进残差网络的论文:

  • [篇一] 用于图像识别的深度残差学习(链接到Microsoft研究的论文)
  • [第2部分] 深度残差网络中的身份映射(链接到Microsoft研究的论文)
  • [第2部分] 深度神经网络的聚合残差转换(链接到Facebook AI Research的论文))

2.1 ResNet成功了吗?

  • 在ILSVRC 1分类竞赛中获得第一名,前2015名错误率为5.3%(集成模型)
  • 在ILSVRC和COCO 1竞赛中荣获ImageNet检测,ImageNet本地化,Coco检测和Coco分割的第一名。
  • 用 ResNet-16 替换 Faster R-CNN 中的 VGG-101 层。他们观察到相对改善了28%
  • 具有 100 层和 1000 层的高效训练网络。

2.2 ResNet解决了什么问题?

        当深度网络开始收敛时,就会暴露出一个退化问题:随着网络深度的增加,精度变得饱和,然后迅速下降。

三、看到多余无效的行动:

        让我们通过向浅层网络添加更多层来获取其更深层次的网络。效果能如何?

3.1 最坏情况:

        更深的模型的早期层可以用浅层网络代替,其余层可以只充当恒等函数(输入等于输出)。

浅层网络及其更深的变体都提供相同的输出

        

3.2 有益的场景 

        在更深的网络中,额外的层比较浅的对应部分更好地近似映射,并显着减少误差。

3.3 实验 

         在最坏的情况下,浅层网络和深层变体都应提供相同的精度。在有益的场景情况下,较深的模型应比较浅的对应部分提供更好的准确性。 但是我们目前的求解器的实验表明,更深的模型表现不佳。因此,使用更深的网络会降低模型的性能。本文试图使用深度残差学习框架来解决这个问题。

四、如何解决“深度很深,精度不高”的问题

        常规的神经网络运算中,层x映射成层y是直接映射。我们这里做个改动:设H(x)是非线性函数,定义残差方程F(x) = H(x) - x,它可以重构为H(x)= F(x) + x,其中 F(x) 和 x 分别表示堆叠的非线性层和恒等, 函数(input=output)。

作者的假设是,优化残差映射函数 F(x) 比优化原始的、未引用的映射 H(x) 更容易。

4.1 残余块背后的直觉 

        如果恒等映射是最优的,我们可以轻松地将残差推到零(F(x) = 0),而不是通过非线性层堆栈拟合恒等映射(x,输入=输出)。用简单的语言来说,很容易想出像F(x)=0这样的解决方案,而不是F(x)=x,使用非线性CNN层堆栈作为函数(想想看)。所以,这个函数F(x)就是作者所说的残差函数。

  残差块中的身份映射

      

        作者做了几个测试来验证他们的假设。现在让我们逐一看一下。

4.2  测试用例:

        采用普通网络(VGG 类型的 18 层网络)(网络 1)和它的更深层次变体(34 层,网络 2),并将残差层添加到网络 2(具有残差连接的 34 层,网络 3)。

        设计网络:

  1. 主要使用3 * 3过滤器。
  2. 使用 CNN 层进行下采样,步幅为 2。
  3. 全局平均池化层和 1000 路全连接层,最后是 Softmax。

        普通 VGG 和带残余块的 VGG

        残差连接有两种类型:

 残余块

       

  1. 当输入和输出具有相同维度时,可以直接使用标识快捷方式 (x)。

        输入和输出尺寸相同的残差功能

        2. 当尺寸发生变化时,A) 快捷方式仍执行标识映射,并用增加的维度填充额外的零条目。B)投影快捷方式用于使用以下公式匹配尺寸(由1 * 1 conv完成)

        当输入和输出尺寸不同时,残差块功能。

        第一种情况不添加额外的参数,第二种情况以 W_{s} 的形式添加

        结果:

        尽管 18 层网络只是 34 层网络中的子空间,但它的性能仍然更好。ResNet 在网络更深的情况下表现显着优于

ResNet 模型与其反普通网的比较

4.3 更深入的研究

        研究了以下网络

ResNet 架构

        每个 ResNet 块要么是 2 层深(用于像 ResNet 18、34 这样的小型网络)要么是 3 层深(ResNet 50、101、152)。

ResNet 2 层和 3 层块

Pytorch 实现可以在这里看到:

PyTorch/Vision

视觉 - 特定于计算机视觉的数据集、转换和模型

github.com

        瓶颈类实现 3 层块,基本块实现 2 层块。它还实现了所有ResNet架构,并在ImageNet上训练了预训练的权重。

4.4 观察:

  1. ResNet 网络收敛速度比普通对应部分更快。
  2. 身份与投影在所有层中使用投影快捷方式(公式-2)的增量增益非常小。因此,所有 ResNet 块仅使用标识快捷方式,投影快捷方式仅在尺寸更改时使用。
  3. ResNet-34 的前 5 名验证误差比 BN-inception 和 VGG 高出 5.71%。ResNet-152 实现了 5.4% 的前 49 名验证错误。6 个不同深度模型的集合实现了 5.3% 的前 57 验证误差。获得ILSVRC-1第一名
ResNet ImageNet Results-2015

五、使用 Pytorch 实现

        我在这里对几乎所有图像分类网络都有详细的实现。快速阅读可以让您在几分之一秒内实现和训练 ResNet。Pytorch 已经有了自己的实现,我的看法只是在进行迁移学习时考虑不同的情况。

几乎所有使用 PyTorch 的图像分类问题

这是一个为PyTorch构建代码库的实验性设置。它的主要目的是使用转移更快地进行实验......

becominghuman.ai

        我写了一篇详细的博客文章 迁移学习.虽然代码是在这里用 keras 实现的,但这些想法更抽象,可能对您在原型设计中有用

六、关于该系列 

        这是由两部分组成的系列文章的第 2 部分,解释了探索残差网络的博客文章。

  • 了解和实现 ResNet 架构 [第 1 部分]
  • 理解和实现 ResNeXt 架构[第 2 部分]

        对于已经理解第 1 部分的人来说,这将是一个相当简单的阅读。我将遵循与第 1 部分相同的方法。

  1. 关于深度残差网络中的身份映射的简要讨论(链接到论文)[重要的案例研究]
  2. ResNeXt Architecture Review (链接到论文))
  3. ResNeXt的实验研究
  4. ResNeXt 在 PyTorch 中的实现

七、深度残差网络中的身份映射简述

        本文通过用不同的函数替换恒等映射(x)来理论理解为什么残差网络中不存在梯度消失问题以及跳过连接的作用。

        残差网络方程

        F 是堆叠的非线性层,f 是 Relu 激活函数。

        他们发现,当f(y1)和h(x1)都是恒等映射时,信号可以直接从一个单位传播到任何其他单位,无论是向前还是向后。此外,当它们都是标识映射时,两者都实现了最小的错误率。让我们分别看一下每个案例。

7.1. 寻找最优 h(x_{l}) 函数

   残差网络中跳过连接的最佳功能

     

 ResNet 模块的反向传播

       

        案例-1,λ = 0: 这将是一个普通的网络。由于 w2、w1、w0 都在 {-1, 1} 之间,因此梯度随着网络深度的增加而消失。这清楚地显示了梯度消失问题

        案例-2,Lambda >1:在这种情况下,反向传播值逐渐增加并导致梯度爆炸。

        案例-3,Lambda <1: 对于浅层网络,这可能不是问题。但对于超大型网络,在大多数情况下,权重+lambda仍然小于<1,并且它实现了与case-1相同的问题。

        案例-4,Lambda =1: 在这种情况下,每个权重都增加 1,这消除了与非常大的数字相乘的问题,如情况 2 和小数字(如情况 1),并起到很好的屏障作用。

        该论文还通过在跳过连接中添加反向传播和卷积层进行审查,发现网络性能下降。以下是他们尝试过的 5 个实验网络,其中只有第一个 (a) 给出了最小的错误率。

残差网络中的不同跳过连接。

深度残差网络结果

7.2. 找到最优 f(y_{l}) 函数

不同的残余块

        

        在ResNet-5和ResNet-110上对上述164种架构进行了研究,并获得了以下结果。在这两个网络中,预激活的性能都优于所有其他网络。因此,使用简单的加法和恒等映射而不是Relu f(x)函数更合适。在残差层中拥有Relu和BN层有助于网络快速优化并更好地正则化(更少的测试误差),从而减少过度拟合。

残差网络 错误指标

                                                        

八、结论

        因此,拥有身份快捷方式连接(案例-1)和身份添加后激活对于使信息传播顺利至关重要。消融实验与上面讨论的推导一致。

8.1 ResNeXt 架构评论

        ResNeXt 在 ILSVRC 2 分类任务中获得了第二名,并且在 Coco 检测和 ImageNet-2016k 集方面的性能也比 ResNet 同类产品有所提高。

        这是一篇非常简单的论文,它引入了一个名为“基数”的新术语。本文只是简单地解释了这个术语,并在ResNet网络中使用它,并进行了各种消融研究。

        该论文多次尝试描述Inception网络的复杂性以及为什么ResNeXt架构很简单。我不会在这里这样做,因为它需要读者理解Inception网络。我在这里只谈谈架构。

ResNet(左)和ResNeXt(右)架构。

  • 上图区分了简单的ResNet块和ResNeXt博客。
  • 它遵循拆分-转换-聚合策略。
  • ResNeXt 块内的路径数定义为基数。 在上图中 C=32
  • 所有路径都包含相同的拓扑。
  • 具有高基数不是具有高深度和宽度,而是有助于减少验证错误。
  • 与ResNet对应部分相比,ResNeXt尝试嵌入更多的子空间。
  • 两种体系结构具有不同的宽度。ResNet 中的第 1 层有一个宽度为 64 的卷积层,而 ResNext 中的第 1 层有 32 个不同的卷积层,宽度为 4(32*4 宽度)。尽管 ResNeXt 的整体宽度较大,但两种架构的参数数量相同(~70k)(ResNet 256*64+3*3*64*64+64*26)(ResNeXt C*(256*d+3*d*d+d*3),C=256 和 d=32)

以下是ResNet和ResNeXt之间的架构差异

ResNet vs ResNeXt 结构.

        因此,resnext_32*4d 表示具有 4 个瓶颈 [上图中的一个块] 层的网络,每层的基数为 32。稍后我们将观察 PyTorch 中的 resnext_32*4D 和 resnext_64*4D 实现。

8.2 研究:

        1 基数与宽度:随着 C 从 1 增加到 32,我们可以清楚地看到 top-1% 错误率的下降。因此,通过减小宽度来增加 C 可以提高模型的性能。

基数与宽度

                                                                       

        2. 增加基数与更深/更宽:基本上研究了 3 个案例。1) 层数从 200 层增加到 101 层。2)通过增加瓶颈宽度来扩大。3)通过加倍C来增加基数。

他们观察到,增加C可以提供更好的性能改进。以下是结果。

基数与更深/更广泛的网络

九、结论 

        不同 ResNeXt 架构的集合给出了 5.3% 的前 03 名错误率,从而在 ILSVRC 竞赛中排名第二。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/768559.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity URP 2D光照导入与配置

上面随时间变化的火烧云和晚霞&#xff0c;篝火的呼吸光照&#xff0c;都是URP的功劳。 1.什么是URP&#xff1f; URP 全称为 Universal Render Pipeline(通用渲染管线)。 它的特点是在手游和端游均能在保持性能的同时有良好的效果 也就说在多数情况下&#xff0c;在下面的平台…

java swing jxpanel嵌入链接url

如何嵌入url 尝试了很多方式&#xff0c;有jdic&#xff0c;webBrowser都不太行&#xff0c;可能有的是因为开发环境欠缺一些条件&#xff0c;最后使用了JXPanel嵌入网页url的方式&#xff0c;成功了。 需要的条件 jar包 &#xff1a;jdk1.8或以上即可&#xff0c;不用额外的…

c语言修炼第三章--结构体

目录 前言 3.1结构体的含义以及语法 3.1.1结构体含义 3.1.2结构体语法形式 3.1.2结构体变量的创建和初始化 3.2结构体成员的类型 3.3结构体的成员访问 3.3.1.操作符 3.3.2->操作符 3.4结构体传参 前言 小伙伴们大家好&#xff01;欢迎继续和菜菜酱学习c语言呐&…

Python零基础入门(八)——字典与集合

系列文章目录 个人简介&#xff1a;机电专业在读研究生&#xff0c;CSDN内容合伙人&#xff0c;博主个人首页 Python入门专栏&#xff1a;《Python入门》欢迎阅读&#xff0c;一起进步&#xff01;&#x1f31f;&#x1f31f;&#x1f31f; 码字不易&#xff0c;如果觉得文章不…

zookeeper伪分布式安装

1、环境准备 需要有jdk1.8 2、安装 &#xff08;1&#xff09;将zookeeper的安装包上传到/opt/modules目录下 &#xff08;2&#xff09;解压 [rootdatacollection modules]# tar -zxvf apache-zookeeper-3.6.3-bin.tar.gz -C /opt/installs/&#xff08;3&#xff09;更名…

nacos配置管理模型

nacos配置管理模型 Nacos&#xff08;全称为"Naming and Configuration Service"&#xff09;是阿里巴巴开源的一款用于实现服务发现、动态配置和服务管理的产品。它提供了面向微服务架构的注册中心、配置中心和命名服务&#xff0c;并以高可用性、可扩展性和容错性…

SQL Server 存储过程入门

SQL Server 存储过程入门 1.存储过程的定义&#xff1a;2.存储过程的作用与好处&#xff1a;3.存储过程的基本语法&#xff1a;&#xff08;1&#xff09;创建&#xff08;2&#xff09;使用 4.存储过程的3个示例&#xff1a;&#xff08;1&#xff09;创建一个Contact表的名为…

6.6Jmeter远程调度Linux机器Jmeter测试

1、配置Agent和启动 1.1、打开jmeter/bin目录下的jmeter.properties 1、server_port1099取消注释 2、remote_hosts127.0.0.1 改为remote_hosts127.0.0.1:1099 或者是remote_hostsAgent机的ip:1099 3、server.rmi.localport1099 4、server.rmi.ssl.disablefalse改为true&#x…

MySQL5.7升为8.0新指南

MySQL5.7升为8.0新指南 一、效果图 俗话说的好&#xff1a;有图有真相 升级前 升级后 二、核心思路 以官方教程为主&#xff0c;各种博文为辅&#xff0c;实践出真知 官方教程网址&#xff1a;https://dev.mysql.com/doc/refman/8.0/en/windows-upgrading.html 重点内容重…

微信小程序——字符串截取

indexOf() &#xff1a; 判断一个字符是否在字符串 中 存在&#xff0c;如果存在返回该元素或字符第一次出现 的 位置 的 索引&#xff0c;不存在返回-1。 lastIndexOf() &#xff1a; 返回一个指定的字符串值最后出现的位置&#xff0c;在一个字符串中的指定位置从后向前搜索。…

Go语言之文件操作,读写文件,其他文件操作

编码 ASCII表 众所周知&#xff0c;计算机起源于美国&#xff0c;英文只有26个字符&#xff0c;算上其他所有特殊符号也不会超过128个。字节是计算机的基本储存单位&#xff0c;一个字节(bytes)包括八个比特位(bit),能够表示出256个二进制数字&#xff0c;所以美国人在这里只是…

大语言模型:从应用到产出;百度网盘推出AI的图搜功能

&#x1f989; AI新闻 &#x1f680; 百度网盘推出基于AI的高级图搜功能&#xff0c;提供更精确、全面的搜索结果 摘要&#xff1a;百度网盘近日推出了一项名为“高级图搜”的AI功能。通过基于向量的语义搜索&#xff0c;该功能可以理解时间、地点、人物、事件等组合搜索语句…

LeetCode 热题 100(二):滑动窗口。3. 无重复字符的最长子串、 438.找到字符串中所有字母异位词

滑动窗口例题&#xff1a; 一、3. 无重复字符的最长子串 题目要求&#xff1a;就是说找到包含不同字母最长的串。 思路&#xff1a;可以想到使用set去重&#xff0c;同时应用滑动窗口。本质上还是双指针法&#xff0c;l是窗口左边界 r是窗口右边界。 如果set包含了当前字母就…

Can总线概述

1&#xff1a;Can总线简介 CAN总线是控制器局域网络&#xff08;Controller Area Network&#xff0c;CAN&#xff09;的简称&#xff0c;由德国BOSCH公司开发&#xff0c;并最终成为国际标准&#xff08;ISO 11898-1&#xff09;&#xff0c;是一种串行数据通信总线。 在当前…

webpack-theme-color-replacer+elementui自定义配置主题色

webpack-theme-color-replacer原理是通过获取到配置数组里的颜色值&#xff0c;在触发换色方法时&#xff0c;elementui使用的颜色值存在与配置表中颜色一致的颜色&#xff0c;则改颜色会被替换成新的颜色值。 若是自定义的css文件&#xff0c;需要配置css文件路径 若是需要修…

视频弹题、视频答题来实现视频防录屏和防挂机

视频弹题、视频答题来实现视频防录屏和防挂机 1.视频播放到某个时间点&#xff0c;弹出问题卡&#xff0c;学员只有正确回答课件视频中弹出的问题之后才能继续观看视频。 2.通过互动问答的方式&#xff0c;不仅有利于巩固前边学习的知识点&#xff0c;评估学员的学习效果&#…

ShardingSphere分库分表实战之水平分库和水平分表

&#x1f680; ShardingSphere &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&…

边框动画 单边追随

时间短就直接看第三个使用 clip-path animation 完成。 <!DOCTYPE html> <html><head><style>/* 第一个 */.btn {width: 100px;height: 40px;background: yellow;position: relative;display: flex;align-items: center;justify-content: center;bor…

Unity游戏源码分享-单车骑行游戏

Unity游戏源码分享-单车骑行游戏 项目地址&#xff1a;https://download.csdn.net/download/Highning0007/88057717

【问题总结】Docker环境下备份和恢复postgresql数据库

目录 文章目录 以从备份恢复forest_resources库为例一、备份数据库二、需要还原的数据库准备1 删除掉远程的库。2 重新创建一个空的库。可以使用sql3 找到数据库存放的路径&#xff0c;并将备份文件上传到对应的路径下 三、 进入docker容器内部&#xff0c;执行数据库恢复附录…