经典网络解读—IResNet

news2025/1/19 20:21:46

论文:Improved Residual Networks for Image and Video Recognition(2020.4)
作者:Ionut Cosmin Duta, Li Liu, Fan Zhu, Ling Shao
链接:https://arxiv.org/abs/2004.04989
代码:https://github.com/iduta/iresnet

文章目录

  • 1、算法概述
  • 2、前置知识-ResNet
  • 3、IResNet细节
    • 3.1 Improved information flow through the network
    • 3.2 Improved projection shortcut
    • 3.3 Grouped building block
  • 4、实验


1、算法概述

IResnet是对Resnet进行改进的算法,作者从三个部分进行优化改进:1、网络中的信息流;2、残差子模块设计;shortcut连接方式;作者通过在以上三部分做出改进,使得IResnet的准确性和学习收敛性方面显示出比较大的提升。具体来说,对于分类任务,同样模型复杂度下,超出Resnet-50 1.19%的top1准确率。对于Resnet网络,训练非常深的网络,例如400层或者500层,会出现严重的优化问题,但是作者提出的网络结构可以实现训练非常深的网络结构。最终,作者建立了404层的卷积神经网络用于训练ImageNet数据集,3002层卷积神经网络训练CIFAR-10和CIFAR-100。


2、前置知识-ResNet

Resnet由大量的残差模块(blocks)组成,它的核心就是在模块中加入恒等映射(the identity mapping)用来使得网络学习更加容易。恒等映射是通过使用shortcut/skip connection来实现的:将block的输入添加到其学习输出中。理论上,网络可以自己学习自身的映射,不需要这些捷径。然而,在实践中,优化器学习恒等映射并不容易。这被称为退化问题。Resnet论文实验指出,较深的网络甚至比较浅的网络精度反而更差,与理论上严重不符合,而这个原因就是网络的退化问题造成的。Resnet的提出缓解了部分网络退化问题,但没有完全解决;例如当Resnet深度从152增加到200时,ImageNet上分类结果变差,优化困难,这表明,当层数增加时,ResNet仍然会损害信息通过网络的传播。

在Resnet中,当前后block输入尺度不一致时,就会采用projection shortcut。可见projection shortcut在Resnet处理网络退化问题中没有充当重要角色。然而,作者认为projection shortcut在网络架构中扮演着重要的角色,因为它们存在于主要的信息传播路径上,因此很容易干扰信号或造成信息丢失。作者通过引入改进版本的projection shortcut,在不增加参数的情况下能带来非常大的提升。在原始Resnet中,瓶颈模块用来控制网络的参数量,模块中只有卷积负责学习空间特征,所以通道数量非常重要,通道数量越多,学习的特征越丰富,作者通过改进,通道可以扩大到原始版本的4倍。
所以,相对于原始ResNet,作者改进:
1、 提出一种基于stage的残差学习网络结构。所提出的方法通过为信息在网络层之间传播提供更好的路径,从而促进了网络优化。
2、 提出了一种改进的projection shortcut,减少了信息丢失,提供了更好的结果。
3、 提出了一个block,能学习更强大的空间特征。
4、 提出的网络结构能在各个数据集中相对于基准Resnet结果都得到了提升。


3、IResNet细节

3.1 Improved information flow through the network

Resnet由很多个残差模块构成,残差模块可以由下图(a)所示:
在这里插入图片描述
用公式可表示为:
在这里插入图片描述
其中x[l] 和x[l+1] 表示为第l个残差模块的输入与输出,ReLU代表激活函数,F(x[l] ,{wi[l] })代表含有多个层的可学习的残差映射函数。

原始版Resnet由两个1x1卷积和一个3x3卷积组成并且每个卷积层后都跟随一个bn层和ReLU激活层,大的灰色箭头表示shortcut连接;这条链路只包含一个ReLU激活函数,该ReLU可以通过将负信号归零来潜在地对信息的传播产生负面影响。这在训练开始时尤其重要(一段时间后,网络可能开始调整权重以输出一个在通过ReLU时不受影响的正信号)。这个影响在何凯明的另一篇论文[1]中提出了改进方式,叫做预激活,即通过将BN层和ReLU层前移,如下图(b)所示。

原始版本的ResNet(图a)在主路径上设置了太多的门(ReLU),这会阻碍信息的传播,改进版本图b,又使得信息畅通无阻,不受任何控制,这两种极端的shortcut设置都不是最理想的,并且呈现出不同的问题。在预激活版本图b中引发出两个问题:
1、网络的4个stage都没有对完整信号进行BN归一化,全部的bn操作都在分支中进行,因此,当我们增加blocks时也在同时增加完整信号的非归一化(unnormalized),也就造成了网络学习困难。这个问题在图a和图b两种结构都体现出来了。
2、预激活版本(图b)的主路径是学习恒等映射的,每个block连接处缺少非线性映射,这限制了学习能力。作者针对以上两点进行改进,按stage切分为start、Middle、end,并且在每个stage的最后一个block后加入BN用于稳定训练和加入ReLU激活用于增加网络表达能力。如图c的End ResBlock。通过以上改进,既能保证完整信息在网络中高效流动也能有效控制它。

3.2 Improved projection shortcut

在原始Resnet版本中,当输入x与F的输出维度不匹配时,就需要对x进行projection shortcut操作。如下图a所示,作者认为原来架构中步长为2的1x1 conv会丢失75%的重要信息,而留下的25%的信息也没有设计什么有意义的筛选标准,这会引入噪声和造成信息丢失,对主要通道流信息造成负面影响。

作者的改进方式是空间和通道适配分别用maxpooling和1x1卷积操作,而不是原版中用1x1卷积同时完成,即对于spacial projection,使用stride=2的3×3 max pooling层,对于channel projection使用stride=1的1×1 conv,然后再跟BN。这样做的优点是:spacial projection将考虑来自特征映射的所有信息,并在下一步中选择激活度最高的元素,减少了信息的损失,后面的实验结果也证明了这点。

这样改进后的projection shortcut,在通道流程上可以看作是 软下采样(3x3 conv) 和 硬下采样(3x3 max pooling)两种方式的结合,是两种方式优势的互补。“硬采样”有助于分类(选择激活程度最高的元素),而“软采样”也有助于不丢失所有空间背景(因此,有助于更好的定位,因为元素之间可以进行过渡比较平滑)。同样这个改进并不增加模型复杂度和模型参数量,非常实惠。
在这里插入图片描述

3.3 Grouped building block

在原始Resnet版本中引入瓶颈构建块是出于实际考虑,在增加网络深度的同时保持合理的计算成本。在瓶颈残差块中,先使用1x1减低通道数,然后使用3x3卷积提取特征,最后用1x1卷积提升通道数恢复原来的信息量,这样做是为了控制计算量和参数量,但是3x3卷积是在空间学习中占用非常重要的角色,瓶颈残差块中却限制了其输入输出通道的数量。

作者就基于这一点提出了改进,保证了3x3卷积以最大的输入输出通道进行计算,为了保证不增加计算量和参数量,作者这里采用了分组卷积(grouped convolution)。作者叫它ResGroup block。作者基于Resnet-50为基准,根据每个stage的group设置数量分别给出了固定版本ResGroupFix-50和变化版本ResGroup-50结构,如下表所示:
在这里插入图片描述
通过引入ResGroup block这种方法,3x3卷积拥有最多的通道和更高的学习空间特征的能力。其引入的空间通道是原始Resnet的四倍,是ResNeXt的两倍。这对于提高性能非常重要,因为3x3 conv是负责学习空间特征的唯一组件,因此,为3x3 conv提供最大数量的通道可以提高检测空间特征的能力。在实验部分,作者展示了该方法的有效性。如下图所示:
在这里插入图片描述


4、实验

ImageNet上分类实验
在这里插入图片描述
可以看到,IResNet随着网络层数增加,结果都在持续变好,并且比原始Resnet版本和预激活版本都好。


IResnet和Resnet的训练曲线对比如下:
在这里插入图片描述


当网络深度达到302和404层的时候,Imagenet测试集表现如下:
在这里插入图片描述
和200层的效果比较,top1 error也是在随着网络层数增加在不断减小的。


CIFAR-10/100数据,网络上千层测试效果:
在这里插入图片描述
从表中可以看出,原始版的Resnet,当网络从164层增加到1001层时,已经表现出严重的网络退化现象,而IResnet表现随着层数增加,错误率在减小。当网络层数增加到2000层时,原始版Resnet直接收敛失败,表现出严重的优化问题,而IResnet版本则到了3002层才开始表现出下降(文中表示可能过拟合了)。所以可以得出,随着网络层数增加,IResnet的效果会更好,不会出现网络退化问题。


文献:
[1] He, K., Zhang, X., Ren, S., Sun, J.: Identity mappings in deep residual networks. In: ECCV (2016)

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

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

相关文章

IK分词器安装、配置、分词自定义、Rest使用、SpringBoot使用

文章目录 1. 概述2. 安装配置3. 自定义拆分文本4. 调用4.1 拆分规则4.2 Rest 调用4.3 SpringBoot 调用 1. 概述 IK分词器是ElasticSearch(es)的一个最最最有名插件,能够把一段中文或者别的语句划分成一个个的关键字,进而在搜索的时候对数据库中或者索引库…

并发场景下 缓存击穿 穿透 雪崩如何解决

最近建了一个技术交流群,欢迎志同道合的同学加入,群里主要讨论:分享业务解决方案、深度分析面试题并解答工作中遇到的问题,同时也能为我提供写作的素材。 群号 208236931,欢迎进群交流学习,一起进步、进步、…

3.4 海思SS928开发 - 烧写工具 - BurnTool Emmc 烧写

3.4 烧写工具 - BurnTool Emmc 烧写 BurnTool 工具提供了多种烧写方式,这里只介绍最常用的 烧写emmc方式。 环境准备 PC 与单板之间连接好调试串口以及网线。 将厂商提供的出厂镜像拷贝至 PC 硬盘上,解压后得到的文件如下: . ├── boot_…

ARM学习(26)链接库的依赖查看

笔者今天来聊一下查看链接库的依赖。 通常情况下,运行一个可执行文件的时候,可能会出现找不到依赖库的情况,比如图下这种情况,可以看到是缺少了license.dll或者libtest.so,所以无法运行。怎么知道它到底缺少什么dll呢&…

收藏这份方案,制造业营销管理快人一步【内附下载链接】

随着“中国制造2025”等政策的实施,制造业正经历着技术革新和产业升级,尤其在智能化和绿色制造领域取得了显著进展。 然而, 制造业面临着消费者需求日益多样化和个性化的挑战,迫切需要从生产导向转变为市场导向。与此同时&#…

Transformer中的位置编码详解

什么是位置编码 位置编码概述 位置编码的目的是为了补充序列的位置信息,这是因为自注意力机制本身不包含位置的概念(例如顺序信息)。位置编码的具体作用是,对于不同的输入序列成分,赋予其不同的位置标识,确…

RIP小实验配置及缺省路由下发

配置如下: IP配置: IP配置完先查看RIP协议学习到的路由表,没有内容则代表没有开启RIP 启用RIP:这里的rip后跟的ID只具有本地意义,可以在1-65535之间随便取,不同路由器之间都可以取用不同的,为了…

宿舍预付费管控云平台

1.宿舍预付费管控云平台概述 宿舍预付费管控云平台是一种创新的智能管理系统,专为学校、公寓等住宿环境设计,旨在提升管理效率,优化用户体验,并实现资源的高效利用。通过云端技术,该平台可以实现远程充值、实时消费记…

Day 30 回溯总结

重新安排行程(*) 给定一个机票的字符串二维数组 [from, to],子数组中的两个成员分别表示飞机出发和降落的机场地点,对该行程进行重新规划排序。所有这些机票都属于一个从 JFK(肯尼迪国际机场)出发的先生,所以该行程必…

设置表格高度后,数值改变但实际不变

1.选中表格 2.点击“开始”——>“段落设置”的选项启动按钮,设置为单倍行距 3.可以看到,表格的行高被调小了。

【SLAM】在Win10上实现Nerf-Pytorch【GPU版】

文章目录 ReadMe安装依赖运行下载两个示例数据集:lego和fern训练一个低分辨率的Lego NeRF:训练一个低分辨率蕨类植物NeRF:更多数据集预训练模型可复现实现1、下载nerf-pytorch工程2、安装依赖3、下载数据4、运行lego NeRF:ReadMe Github链接 NeRF (神经辐射场)是一种在合成…

prompt问题【中间不好】

问题1:longchain 关键词在中间容易被忽略掉 Found in the Middle: How Language Models Use Long Contexts Better via Plug-and-Play Positional Encoding 论文对大模型在长文本情况下的性能做了一系列实验研究,发现了一个有趣的“Lost in the middle”现象&#x…

理解Docker容器和镜像的区别

容器镜像读写层 容器最上边那一层是可读可写的。 镜像可以看作是面向对象编程中的类。 文章目录 一、镜像(只读层的集合) 二、容器(多层只读层一层读写层) 三、镜像层 一、镜像(只读层的集合) 镜像&…

Vue3从入门到实战:深度了解相关API

shallowRef 作用:创建一个响应式数据,但只对顶层属性进行响应式处理。 用法: let myVar shallowRef(initialValue); 特点:只跟踪引用值的变化,不关心值内部的属性变化。 shallowReactive 作用:创建一个…

ASPICE 追溯性实践分享

01前言 接着之前的分享,遗留的追溯性ASPICE 认证实践及个人理解分享-CSDN博客文章浏览阅读961次,点赞22次,收藏17次。ASPICE是Automotive 和SPICE的组合,全英文为(Automotive Software ProcessImprovement and Determ…

【全】一文读懂 containerd 中的 NRI 机制

本文内容节选自 《containerd 原理剖析与实战》,本书正参加限时优惠内购,限时 69.9 元购买。 本文介绍 containerd 中的一种可插拔的扩展机制 NRI。 1. NRI 介绍 NRI(Node Resource Interface),即节点资源接口。是 c…

汇编语言——输入16位二进制数,存入BX

这是我原先的做法: shl bx,1 ;bx逻辑左移一位 sub dl,30h ;键盘输入的0/1,ASCII码分别为30h/31h,要转换成0/1 add bl,dl ;bl逻辑左移一位后加上现在输入的字符data segment data ends stack segment stackdw 100 dup (?)top label wo…

Oracle数据库 :查询表结构脚本

查询脚本 : SELECT CASE WHEN a.column_id1 THEN a.TABLE_NAME ELSE END AS 表名, a.column_id AS 序号, a.column_name as 列名, REPLACE(comments, CHR(10), ) as 列说明, a.data_type || ( || a.data_length || ) as 数据类型, a.DATA_LENGTH AS 长度, a.DATA_…

【mac】【python】新建项目虚拟环境后,使用命令pip出现错误:zsh: command not found: pip

【mac】【python】新建项目虚拟环境后,使用命令pip出现错误:zsh: command not found: pip 问题描述: 拉取或者创建新的python项目时,为项目添加了新的解释器,创建啦虚拟环境,但是执行pip命令的时候找不到命…

C++修炼之路之继承<一>隐藏,赋值转换规则,继承关系

目录 前言 一:继承的概念和定义 1.概念 2.继承的定义 1.定义格式 2.继承关系和访问限定符 3.继承基类成员访问方式的变化 二:基类和派生类对象赋值转换 规则 三:继承中的作用域 规则 经典举例 经典例题--区分函数重载和隐藏…