六、ResNet网络详细解析(超详细哦)

2023-11-11

1、 RestNet网络

1.1、 RestNet网络结构

ResNet在2015年被提出,在ImageNet比赛classification任务上获得第一名,因为它“简单与实用”并存,之后很多方法都建立在ResNet50或者ResNet101的基础上完成的,检测,分割,识别等领域里得到广泛的应用。它使用了一种连接方式叫做“shortcut connection”,顾名思义,shortcut就是“抄近道”的意思,下面是这个resnet的网络结构:
在这里插入图片描述
它对每层的输入做一个reference(X), 学习形成残差函数, 而不是学习一些没有reference(X)的函数。这种残差函数更容易优化,能使网络层数大大加深。在上图的残差块中它有二层,如下表达式,
其中σ代表非线性函数ReLU。
在这里插入图片描述
然后通过一个shortcut,和第2个ReLU,获得输出y。
在这里插入图片描述
当需要对输入和输出维数进行变化时(如改变通道数目),可以在shortcut时对x做一个线性变换Ws,如下式。
在这里插入图片描述
然而实验证明x已经足够了,不需要再搞个维度变换,除非需求是某个特定维度的输出,如是将通道数翻倍,如下图所示:
在这里插入图片描述
由上图,我们可以清楚的看到“实线”和“虚线”两种连接方式, 实线的Connection部分 (第一个粉色矩形和第三个粉色矩形) 都是执行3x3x64的卷积,他们的channel个数一致,所以采用计算方式:
Y = F(x) + x,虚线的Connection部分 (第一个绿色矩形和第三个绿色矩形) 分别是3x3x64和3x3x128的卷积操作,他们的channel个数不同(64和128),所以采用计算方式: y=F(x)+Wx 。其中W是卷积操作,用来调整x的channel维度。
在计算机视觉里,网络的深度是实现网络好的效果的重要因素,输入特征的“等级”随增网络深度的加深而变高。然而在网络深度不断加深的情况下,梯度弥散/爆炸成为训练深层次的网络的障碍,导致导致网络无法收敛。虽然,归一初始化,各层输入归一化,使得可以收敛的网络的深度提升为原来的十倍。虽然网络收敛了,但网络却开始退化 (增加网络层数却导致更大的误差), 如下图所示:
在这里插入图片描述
由上图可知,在一个浅层网络的基础上叠加y=x的层(称identity mappings,恒等映射),可以让网络随深度增加而不退化。这反映了多层非线性网络无法逼近恒等映射网络。
但是,在深度学习中我们希望有更好性能的网络,而网络不退化则不是我们的目的。 在 RestNet网络中学习的残差函数是F(x) = H(x) - x, 这里如果F(x) = 0, 那么就是上面提到的恒等映射(H(x) = x)。事实上,RestNet是“shortcut connections”的在connections是在恒等映射下的特殊情况,它没有引入额外的参数和计算的复杂度。 假如优化目标函数是逼近一个恒等映射, 而不是0映射(F(x) = 0)或者说恒等映射,那么学习找到对恒等映射的扰动会比重新学习一个映射函数要容易。

1.2、残差块的两种结构

这是文章里面的图,我们可以看到一个“弯弯的弧线“这个就是所谓的”shortcut connection“,也是文中提到identity mapping,这张图也诠释了ResNet的真谛,当然大家可以放心,真正在使用的ResNet模块并不是这么单一,文章中就提出了两种方式:
在这里插入图片描述
这两种结构分别针对ResNet34(左图)和ResNet50/101/152(右图),一般称整个结构为一个“building block” 。其中右图又称为“bottleneck design”,目的就是为了降低参数的数目,实际中,考虑计算的成本,对残差块做了计算优化,即将两个3x3的卷积层替换为1x1 + 3x3 + 1x1,如右图所示。新结构中的中间3x3的卷积层首先在一个降维1x1卷积层下减少了计算,然后在另一个1x1的卷积层下做了还原,既保持了精度又减少了计算量。第一个1x1的卷积把256维channel降到64维,然后在最后通过1x1卷积恢复,整体上用的参数数目:1x1x256x64 + 3x3x64x64 + 1x1x64x256 = 69632,而不使用bottleneck的话就是两个3x3x256的卷积,参数数目: 3x3x256x256x2 = 1179648,差了16.94倍。
对于常规ResNet,可以用于34层或者更少的网络中,对于Bottleneck Design的ResNet通常用于更深的如101这样的网络中,目的是减少计算和参数量。

1.3、ResNet50和ResNet101简单讲解

这里把ResNet50和ResNet101特别提出,主要因为它们的使用率很高,所以需要做特别的说明。给出了它们具体的结构:
在这里插入图片描述
上表是Resnet不同的结构,上表一共提出了5中深度的ResNet,分别是18,34,50,101和152,首先看表的最左侧,我们发现所有的网络都分成5部分,分别是:conv1,conv2_x,conv3_x,conv4_x,conv5_x,之后的其他论文也会专门用这个称呼指代ResNet50或者101的每部分。 例如:101-layer那列,101-layer指的是101层网络,首先有个输入7x7x64的卷积,然后经过3 + 4 + 23 + 3 = 33个building block,每个block为3层,所以有33 x 3 = 99层,最后有个fc层(用于分类),所以1 + 99 + 1 = 101层,确实有101层网络; 注:101层网络仅仅指卷积或者全连接层,而激活层或者Pooling层并没有计算在内;我们关注50-layer和101-layer这两列,可以发现,它们唯一的不同在于conv4_x,ResNet50有6个block,而ResNet101有23个block,两者之间差了17个block,也就是17 x 3 = 51层。

!!!写博客不容易,请君给个赞在离开!!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

六、ResNet网络详细解析(超详细哦) 的相关文章

  • Shell编程——脚本编写思路与过程

    Linux系统Shell编程 脚本编写思路与过程 前段时间有小伙伴问我一些问题 涉及到shell脚本的编写问题 事后 我深入思考了下 实际生产环境的确也会经常用到 因此如何写这个脚本 它的思路在哪 带这个问题引入今天的文章 仅供参考 如有不
  • python中的输入与输出

    文章目录 python中的输入与输出 1 python中的输入 2 比较两个数值的大小 3 python中的格式化的输出 4 格式化输出的练习 python中的输入与输出 1 python中的输入 python3 x input pytho
  • 权限维持-白银票据

    前言 白银票据是利用域的服务账户进行伪造ST 需要一些服务进行交互 比如cifs 共享文件服务 mysql sqlserver之类的 所以白银票据是没有黄金票据这么好用的 但是比白银票据更加隐藏一些 注 限定域环境 复现 1 收集信息 还是
  • 时序数据和语音处理

    时序数据 时序数据概述 即时间序列数据 用于时序预测 作用 用来连续观察同一对象在不同时间点上获得的数据样本集 处理目标 对给定的时间序列样本 找出统计特性和发展规律性 推测未来值 语音是一类特殊的时序数据 识别语音对应的文本信息是当前人工

随机推荐

  • MySQL基础篇

    目录 MySQL概念 数据库相关概念 MySQL数据库 启动与停止 客户端连接 数据模型 SQL SQL通用语法 SQL分类 DDL 数据库操作 表操作 图形化工具的使用 DataGrip DML DQL DCL 函数 字符串函数 数值函数
  • 函数被声明为已否决

    函数被声明为已否决 尝试这个1 Project Properties gt Configuration Properties gt C C gt General gt SDL checks关掉 我的电脑这个方法可以其他方法 2 pragma
  • 判断数组内容是否相同

    题目 设计一个方法 用于比较两个数组的内容是否相同 思路 1 定义两个数组 分别使用静态初始化完成数组元素的初始化 2 定义一个方法 用于比较两个数组的内容是否相同 3 比较两个数组的内容是否相同 按照下面的步骤实现就可以了 首先比较数组长
  • Ubuntu18.04 Apache2 配置CGI环境 C语言编写

    本人的Ubuntu版本号 18 04 4 LTS 根据其他人的参考资料 这套教程在Ubuntu的16 18 20版本基本上是通用的 1 卸载apache2 没有安装过的话可以跳过这一步 要保留网页文件的话 就不要 rm rf var www
  • corntab定时执行任务

    corntab介绍 cron 这个守护进程是为了周期性执行任务或处理等待事件而存在 任务调度分两种 系统任务调度 用户任务调度 计划任务的安排方式分两种 一种是定时性的 也就是例行 就是每隔一定的周期就要重复执行 一种是突发性的 就是这次做
  • 新建SpringBoot Maven项目中pom常用依赖配置及常用的依赖的介绍

    完整的pom文件放在后面 一 常用的依赖的介绍 1 springboot项目的总 父 依赖大全
  • Java8中List转Map的实现方法

    在Java编程开发中 经常会遇到将List转换为Map的需求 List是一种有序的集合 而Map则是一种键值对的映射关系 在Java8中 我们可以使用Stream API提供的新特性来实现这一转换 Java8中List转Map的实现方法 在
  • C++编译过程详述

    对于编译过程的总结 源于我的一个突然的好奇 编译头文件和编译头文件对应的源文件有没有区别 因为写makefile的时候依赖即可以写头文件 也可以写源文件 在网上查了半天 估计我的这个问题比较stupid 也没有明确的回答 索性顺藤摸瓜看了看
  • 游戏王大师规则3

    自己一年前翻译的老物了 放在这里算是做个存档 1 OCG Official Card Game 概要 1 1 决斗 游戏王ARC V OCG 以下略称 OCG 是原则上供2人游玩的游戏 而且 按 OCG 规则决出一局胜负称为 决斗 OCG
  • 前端Sass样式预处理器详解

    Sass 是一款强化 CSS 的辅助工具 它在 CSS 语法的基础上增加了变量 variables 嵌套 nested rules 混合 mixins 导入 inline imports 等高级功能 这些拓展令 CSS 更加强大与优雅 通过
  • ch04游戏对象与图形基础

    目录 一 加载Fantasy Skybox FREE 构建自己的游戏场景 二 写一个简单的总结 总结游戏对象的使用 三 魔鬼与牧师 动作分离版 1 解决方案 2 主要更新 3 链接 一 加载Fantasy Skybox FREE 构建自己的
  • JVM代码缓存区CodeCache原理及用法解析

    这篇文章主要介绍了JVM代码缓存区CodeCache原理及用法解析 文中通过示例代码介绍的非常详细 对大家的学习或者工作具有一定的参考学习价值 需要的朋友可以参考下 一 CodeCache简介 从字面意思理解就是代码缓存区 它缓存的是JIT
  • No Dialect mapping for JDBC type :0

    data service 架构 spring Roo hibernate mysql 在调用stored procedure的时候 出现 No Dialect mapping for JDBC type 0 通过反编译java sql Ty
  • kubectl exec 执行 容器命令

    格式如下 kubectl exec it podName c containerName n namespace shell comand 1 创建目录 kubectl exec it spark master xksl c spark m
  • IDEA 常用快捷键

    一 界面操作 进入设置界面 与QQ截图相冲 ctrl alt s 在窗口之间移动 alt 左右箭头 二 光标操作 按字跳转 非常好用 ctrl 左右箭头 选中当前单词 非常好用 ctrl w Idea 多光标操作 alt j alt shi
  • Python安装pip

    文章转载自 https blog csdn net LCCFlccf article details 80095348 python2 7安装目录下没有Scripts文件夹 这种问题可能是你装的python安装包年代久远了 到官网下载最新的
  • 微信小程序打开pdf文件

    前言 使用原生的微信小程序打开pdf文件 注意使用的是文件流的形式 后端接口也需要流的形式来接收 wxml页面
  • window10安装minio

    1 首先第一步我们先下载minio 可以从官网上下不同的版本 下载地址 MinIO Code and downloads to create high performance object storage 2 启动minio 切记不要双击m
  • 众享比特李刘海:国密在超级账本Fabric中的应用

    导读 4月22日 超级账本Hyperledger北京Meetup在北京大学信息学院举行 本次会议由Hyperledger中国工作组和Linux基金会主办 安妮股份 版权区块链联盟 北京大学协办 专注于技术交流 实践分享 案例解析 作为Hyp
  • 六、ResNet网络详细解析(超详细哦)

    1 RestNet网络 1 1 RestNet网络结构 ResNet在2015年被提出 在ImageNet比赛classification任务上获得第一名 因为它 简单与实用 并存 之后很多方法都建立在ResNet50或者ResNet101