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

一、说明

        了解和实现 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.hqwc.cn/news/27833.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++初阶】list的模拟实现 附源码

一.list介绍 list底层是一个双向带头循环链表&#xff0c;这个我们以前用C语言模拟实现过&#xff0c;->双向带头循环链表 下面是list的文档介绍&#xff1a; list文档介绍 我们会根据 list 的文档来模拟实现 list 的增删查改及其它接口。 二.list模拟实现思路 既然是用C模拟…

【Vue】给 elementUI 中的 this.$confirm、this.$alert、 this.$prompt添加按钮的加载效果

文章目录 主要使用 beforeClose 方法实现 loading 的效果beforeClose MessageBox 关闭前的回调&#xff0c;会暂停实例的关闭 function(action, instance, done)1. action 的值为confirm, cancel或close。 2. instance 为 MessageBox 实例&#xff0c;可以通过它访问实例上的属…

Django + Bootstrap - 【echart】 统计图表进阶使用-统计用户日活日增、月活月增等数据(二)

一. 前言 Bootstrap是一个流行的前端框架&#xff0c;而ECharts是一个流行的可视化库。 Bootstrap可以用来设计网站和应用程序的用户界面&#xff0c;而ECharts可以用来创建交互式和可视化的图表。 chart.js中文文档&#xff1a;http://www.bootcss.com/p/chart.js/docs/ 二. …

LT8619B 是一款HDMI转TTL或者2 PORT LVDS的芯片。

LT8619B 1. 概述 LT8619B是龙迅基于清除边缘技术的高性能HDMI接收芯片&#xff0c;符合HDMI 1.4&#xff08;高清多媒体接口&#xff09;规范。RGB 输出端口可支持 RGB888/RGB666/RGB565 格式&#xff0c;输出分辨率最高可支持 4Kx2K 分辨率。凭借可编程标量&#xff0c;LT86…

切换.net Framework 版本后,出现NuGet 包是使用不同于当前目标框架的目标框架安装的,可能需要重新安装

问题现象&#xff1a; 由于添加新的dll文件&#xff0c;依赖的.NET Framework版本与当前的不一致&#xff0c;在vs 中切换了目标框架版本后&#xff0c;运行程序&#xff0c;出现以下的warnning信息&#xff1a; 一些 NuGet 包是使用不同于当前目标框架的目标框架安装的&#…

控制对文件访问

控制对文件访问 Linux文件权限 权限文件影响目录影响r读取文件内容列出目录内容w更改文件内容创建删除目录文件x作为命令执行目录可以变成当前工作目录 命令行管理文件系统权限 更改文件和目录权限 chmod chmod WhoWhatWhich file|directoryWho (u,g,o,a代表用户&#xff…

分布式事务 Seata

分布式事务 Seata 事务介绍分布式理论Seata 介绍Seata 部署与集成Seata TC Server 部署微服务集成 Seata XA 模式AT 模式AT 模式执行过程读写隔离写隔离读隔离 实现 AT 模式 TCC 模式TCC 模式介绍实现 TCC 模式 Saga 模式Seata 四种模式对比 事务介绍 事务&#xff08;Transac…

使用GPU进行大规模并行仿真,解决强化学习采样瓶颈:CPU、GPU架构以及原理详解

强化学习的落地应用场景,我认为可以是仿真环境仿真程度高,且仿真速度快的任务场景。而这篇帖子将会将:使用 GPU 进行大规模并行仿真,解决强化学习采样瓶颈。并直接举出三个例子,展示如何对原有的仿真环境进行修改,让它们适应 GPU 并行加速。 1.强化学习论文背后的仿真环…

降级npm后,出现xxx 不是内部或外部命令解决方法

比如我安装了anyproxy npm install anyproxy -g 之后在cmd中输入anyproxy 发现 anyproxy 不是内部或外部命令解决方法. 一般出现这样的问题原因是npm安装出现了问题&#xff0c;全局模块目录没有被添加到系统环境变量。 Windows用户检查下npm的目录是否加入了系统变量P…

【JavaEE】Tomcat的安装和使用、创建Mevan项目使用Servlet写一个程序

目录 前言 一、Tomcat的下载和安装 二、写一个简单的Servlet项目 1、创建一个Maven项目 2、引入依赖 3、创建目录 4、编写Servlet代码。 5、打包程序 6、将程序部署到Tomcat上 7、验证程序运行结果 三、在IDEA上安装Smart Tomcat插件 四、Servlet中的一些常见错误 …

计算机网络 day9 DNAT实验

目录 DNAT DNAT策略的典型应用环境 DNAT策略的原理 在网关中使用DNAT策略发布内网服务器 DNAT实验&#xff1a; 实验环境&#xff1a; DNAT网络规划拓扑图&#xff1a; 步骤&#xff1a; 1、创建linux客户端Web网站&#xff08;go语言&#xff09;&#xff0c;实现Web服…

RS485远传电表有哪些功能?

RS485远传电表是一种具有远程传输功能的电表&#xff0c;可以通过RS485接口进行数据传输。它主要用于远程测量电能消耗、监测电力质量和实时控制电力负载等方面。 RS485远传电表具有多种功能&#xff0c;如&#xff1a; 1.远程测量电能消耗&#xff1a;RS485远传电表可以通过远…