经典网络ResNet介绍

2023-11-19

经典网络ResNet(Residual Networks)由Kaiming He等人于2015年提出,论文名为《Deep Residual Learning for Image Recognition》,论文见:https://arxiv.org/pdf/1512.03385.pdf

ResNet要解决的是深度神经网络的”退化(degradation)”问题,即使用浅层直接堆叠成深层网络,不仅难以利用深层网络强大的特征提取能力,而且准确率会下降,这个退化不是由于过拟合引起的。

ResNet也称为残差网络。ResNet是由残差块(Residual Building Block)构建的,论文截图如下所示:提出了两种映射:identity mapping(恒等映射),指的是右侧标有x的曲线;residual mapping(残差映射),残差指的是F(x)部分。最后的输出是F(x)+x。F(x)+x的实现可通过具有”shortcut connections”的前馈神经网络来实现。shortcut connections是跳过一层或多层的连接。图中的”weight layer”指卷积操作。如果网络已经达到最优,继续加深网络,residual mapping将变为0,只剩下identity mapping,这样理论上网络会一直处于最优状态,网络的性能也就不会随着深度增加而降低。

残差块由多个级联的卷积层和一个shortcut connections组成,将二者的输出值累加后,通过ReLU激活层得到残差块的输出。多个残差块可以串联起来,从而实现更深的网络。

残差块有两种设计方式,论文截图如下所示:左图针对较浅的网络,如ResNet-18/34;右图针对较深的网络,又称为”bottleneck” building block,如ResNet-50/101/152,使用此方式的目的就是为了降低参数数目。

论文中给出了5种不同层数的ResNet,论文截图如下所示:可见,ResNet-18/34是进行两层卷积的残差,ResNet-50/101/152是进行三层卷积的残差,分别对应于上图中的残差块的两种设计方式。ResNet-18/34对应的每个残差块的卷积kernel大小依次是3*3、3*3,ResNet-50/101/152对应的每个残差块的卷积kernel大小依次是1*1、3*3、1*1。

18、34层等数字是如何计算出来的:以34层为例,1个卷积(conv1)+3残差块*2个卷积(conv2_x)+4个残差块*2个卷积(conv3_x)+6个残差块*2个卷积(conv4_x)+3个残差块*2个卷积(conv5_x)+最后的1个全连接层=34。这里的层仅指卷积层和全连接层,其它类型的层并没有计算在内。

论文中给出了层数为34的ResNet网络结构,论文截图如下所示:左侧为VGG-19网络结构;中间为34层的普通网络结构;在此基础上,在层与层之间加入shortcut connections,就将普通网络转换为对应的ResNet网络,即右侧网络结构。与上表中ResNet-34一致。

右侧ResNet网络,曲线有实线和虚线两种。虚线表示恒等映射x输出的feature map数、width、height与残差F(x)的输出不一致时,x需要进行卷积kernel大小为1*1的运算操作,因为最终F(x)与x要执行”+”操作,即Eltwise操作。GoogLeNet中使用Concat操作。

假如输入图像大小为n*n,过滤器(filter)为f*f,padding为p,步长(stride)为s,则输出大小为:计算卷积层大小,如果商不是整数,向下取整,即floor函数;计算池化层大小,如果商不是整数,向上取整,即ceil函数。参考:https://blog.csdn.net/fengbingchun/article/details/80262495

https://github.com/fengbingchun/Caffe_Test/tree/master/test_data/Net/ResNet 上整理了论文中ResNet对应的18、34、50、101、152的prototxt文件。

这里描述下ResNet-50架构:与上表中”50-layer”一致

(1).输入层(Input):图像大小为224*224*3。

(2).卷积层conv1+BatchNorm+Scale+ReLU:使用64个7*7的filter,stride为2,padding为3,输出为112*112*64,64个feature maps。

(3).卷积层conv2_x:输出为56*56*256,256个feature maps。

A.最大池化层:filter为3*3,stride为2,padding为0,输出为56*56*64,64个feature maps。

B.连续3个残差块,每个残差块,包含3层卷积,卷积kernel大小依次为1*1、3*3、1*1,feature maps数依次为64、64、256,第1、2层卷积做Convolution+BatchNorm+Scale+ReLU,第3层卷积做Convolution+BatchNorm+Scale。第1个残差块的identity mapping需做卷积kernel大小为1*1+BatchNorm+Scale运算,使其输出调整为56*56*256,便于做Eltwise操作。每个残差块后做Eltwise+ReLU操作。

(4).卷积层conv3_x:输出为28*28*512,512个feature maps。

连续4个残差块,每个残差块,包含3层卷积,卷积kernel大小依次为1*1、3*3、1*1,feature maps数依次为128、128、512,第1、2层卷积做Convolution+BatchNorm+Scale+ReLU,第3层卷积做Convolution+BatchNorm+Scale。第1个残差块的identity mapping需做卷积kernel大小为1*1+BatchNorm+Scale运算,使其输出调整为28*28*512,便于做Eltwise操作。每个残差块后做Eltwise+ReLU操作。

(5).卷积层conv4_x:输出为14*14*1024,1024个feature maps。

连续6个残差块,每个残差块,包含3层卷积,卷积kernel大小依次为1*1、3*3、1*1,feature maps数依次为256、256、1024,第1、2层卷积做Convolution+BatchNorm+Scale+ReLU,第3层卷积做Convolution+BatchNorm+Scale。第1个残差块的identity mapping需做卷积kernel大小为1*1+BatchNorm+Scale运算,使其输出调整为14*14*1024,便于做Eltwise操作。每个残差块后做Eltwise+ReLU操作。

(6).卷积层conv5_x:输出为7*7*2048,2048个feature maps。

连续3个残差块,每个残差块,包含3层卷积,卷积kernel大小依次为1*1、3*3、1*1,feature maps数依次为512、512、2048,第1、2层卷积做Convolution+BatchNorm+Scale+ReLU,第3层卷积做Convolution+BatchNorm+Scale。第1个残差块的identity mapping需做卷积kernel大小为1*1+BatchNorm+Scale运算,使其输出调整为7*7*2048,便于做Eltwise操作。每个残差块后做Eltwise+ReLU操作。

(7).平均池化层:filter为7*7,stride为1,padding为0,输出为1*1*2048,2048个feature maps。

(8).全连接层:有1000个神经元或输出1000个feature maps。

(9).输出层(Softmax):输出分类结果,看它究竟是1000个可能类别中的哪一个。

可视化结果如下图所示:

GitHubhttps://github.com/fengbingchun/NN_Test

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

经典网络ResNet介绍 的相关文章

随机推荐

  • /proc/modules分析

    参考 redhat linux deployment guide 5 2 21 proc modules This file displays a list of all modules loaded into the kernel Its
  • Qt5实现与单片机ATS89S51通信

    Qt实现与单片机直接的通信上位机 单片机代码 测试环境 项目目标 实现效果 关键通信类 QSerialport 总结 这是我大二下学期的单片机课设做的一个小项目 实现上位机与下位机之间的通信 测试环境 开发环境 Qt5 96 Mingw32
  • Acwing 890. 能被整除的数

    注 S 表示集合S中的元素个数 对于 S1 U S2 U S3 U U Sn 中的任意一个元素x 证明在等式右侧只被计算一次 上述证明中假设x属于k个集合 推出x会被计算的次数 注 Si是指1 n中i的倍数的个数 使用容斥原理的时间复杂度是
  • 3年c/c++开发总结(二):书籍[1]

    对3年来学习中书籍的整理 评价 主要为c c 方面 分数为个人意见 虽然大家都知道 但还是强调下 免得口水 分1 5 5为最高 格式 英文名 中文名 作者 出版社 个人评价 评分 无译者说明是因为建议看原版 p s 国产图书要努力 因看过的
  • (Ext基础篇) 表单与输入控件

    FormPanel和BasicForm详解 我们制作一个Ext form FormPanel 然后在里面设置field 顾名思议 FormPanel是Ext Panel的一个子类 可以对其执行各种Panel操作 实际上 表单的功能是在Ext
  • vue滚动插件:vue-seamless-scroll

    地址 使用 vue seamless scroll 使用方法 1 下包 yarn add vue seamless scroll 2 局部导入 import vueSeamlessScroll from vue seamless scrol
  • 搜索指定站点和指定文档类型

    对于像我这个不生产代码 只是代码搬运工的程序员来说 搜索引擎是必不可少的 遇到问题 搜索一下 基本都能找到答案 但有时 搜索出来的答案千篇一律 而且垃圾网站一波波 这时就要指定搜索某些 网站 如csdn 1 指定站点 在搜索框里面输入 关键
  • HTTP状态码总结

    为了更好地了解各个状态码代表的意思 做了一个总结 在实际的工作中 主要涉及到的还是200 404 500等 1 HTTP状态码分5大类 状态码 类别 100 199 信息性状态码 200 299 成功状态码 300 399 重定向状态码 4
  • 如何在 wxPython 中创建多个工具栏

    在GUI编程领域 wxPython已经成为一个功能强大且通用的库 使开发人员能够轻松制作令人惊叹的图形用户界面 在众多基本组件中 工具栏在为用户提供对各种功能的快速访问方面发挥着至关重要的作用 在本教程中 我们将深入探讨使用 wxPytho
  • LCD笔记(4)分析内核自带的LCD驱动程序

    1 驱动程序框架 Linux驱动程序 驱动程序框架 硬件编程 在前面已经基于QEMU编写了LCD驱动程序 对LCD驱动程序的框架已经分析清楚 核心就是 分配fb info 设置fb info 注册fb info 硬件相关的设置 1 1 入口
  • 使用AS自带工具转换Java文件为.kt问题总结

    android studio Java项目转kotlin问题总结 起因 崩溃问题 部分类Java 和kotlin api存在差异导致编译时报错 起因 忙里偷闲想学一下kotlin 于是在看了一些kotlin基础以后 把项目拉了个分支 想将J
  • pytorch下import numpy失败_深度学习之Pytorch基础教程!

    关注后 星标 Datawhale 每日干货 每月组队学习 不错过 Datawhale干货 作者 李祖贤 Datawhale高校群成员 深圳大学 随着深度学习的发展 深度学习框架开始大量的出现 尤其是近两年 Google Facebook M
  • lscpu命令详解

    基础命令学习目录首页 一 lscpu输出 使用lscpu查看的结果如下图 这里会显示很多信息 如下 使用lscpu p会详细的numa信息 如下 root localhost lscpu p The following is the par
  • 【Mongodb教程 第五课 】MongoDB 删除集合

    drop 方法 MongoDB 的 db collection drop 是用来从数据库中删除一个集合 语法 drop 命令的基本语法如下 db COLLECTION NAME drop 示例 首先 检查可用的集合在数据库 mydb gt
  • 简单混合运算计算器

    实现一个能够进行简单混合运算的计算器 要求对混合运算的表达式进行先乘除后加减运算 其实现的效果如下图所示 小练习 GUI窗体 面向对象思路 代码 Expression类 package 计算器 import java util Linked
  • 使用R语言实现卷积神经网络cnn进行图像识别

    目录 1 卷积神经网络 CNN 简介 2 安装和加载必要的R包 3 加载和处理数据 4 构建CNN模型
  • 攻防 & 渗透 & Kali笔记(持续更新)

    0x00 写在前面 本来是记录kali用法的一篇文章 后来就慢慢变成了记录攻防 渗透测试 Kali用法的文章了 本来信息安全就涉及到方方面面就是个大杂烩 0x01 John the Ripper john爆破需要一个shadow文件 推荐使
  • Python-import导入上级目录文件

    假设有如下目录结构 dir0 file1 py file2 py dir3 file3 py dir4 file4 py dir0文件夹下有file1 py file2 py两个文件和dir3 dir4两个子文件夹 dir3中有file3
  • IDEA太强悍了!java初级工程师工资多少

    所以 我认为在你选择之前不妨好好想想什么是Java 你适不适合从事这份工作 Java开发是近20多年来最热门的编程语言 就业市场确实比较大 入门的难度也比C和C 要低 结合各方面来说 你选择Java是一定没有问题的 接下来就要好好想想自己适
  • 经典网络ResNet介绍

    经典网络ResNet Residual Networks 由Kaiming He等人于2015年提出 论文名为 Deep Residual Learning for Image Recognition 论文见 https arxiv org