图像分类算法:ResNet论文解读

news/2024/11/29 8:58:07/

图像分类算法:ResNet论文解读

前言

​ 其实网上已经有很多很好的解读各种论文的文章了,但是我决定自己也写一写,当然,我的主要目的就是帮助自己梳理、深入理解论文,因为写文章,你必须把你所写的东西表达清楚而正确,我认为这是一种很好的锻炼,当然如果可以帮助到网友,也是很开心的事情。

说明

​ 如果有笔误或者写错误的地方请指出(勿喷),如果你有更好的见解也可以提出,我也会认真学习。

原始论文地址

​ 点击这里,或者复制链接

https://arxiv.org/abs/1512.03385

目录结构

文章目录

    • 图像分类算法:ResNet论文解读
      • 1. 背景简介:
      • 2. 文章内容概述:
      • 3. 深层网络退化问题:
      • 4. 残差框架:
      • 5. 残差结构形状不一致解决方法:
      • 6. shortcut connections:
      • 7. 网络架构介绍:
      • 8. 总结:

1. 背景简介:

​ CNN在快速发展,在短短两三年时间,各种网络层出不穷。而VGG这篇论文表明了深度的重要性,但是在深度重要性的驱动下,一个问题出现了:更好的网络难搞就像堆积木一样堆得越高越好嘛?

​ 回答这个问题的一个障碍是:**梯度消失与梯度爆炸。而这个问题已经被初始化手段(BN)**很大程度的解决了。但是,作者发现当网络随着深度的增加,准确度会饱和,然后迅速退化。

​ 什么意思,如下图(论文原图)所示,深度的增加并没有如我们所想那样,精度也随之增加:

在这里插入图片描述

​ 在这种情况下,作者提出了ResNet网络。

2. 文章内容概述:

​ 由于更深层次神经网络更难训练,作者提出了基于残差的学习框架,并借此探索了深层神经网络的准确率,最大的深度甚至达到1000层,而其最佳的模型也在ImageNet上取得了top-5错误率3.57的精度,这个精度已经超过了人类所能达到的标准(我记得好像是5左右),也因此,后面就没有举办该比赛了,但是这个数据集仍然可以被拿来使用。

3. 深层网络退化问题:

​ 作者发现,随着网络深度增加,准确度会饱和,然后迅速退化。

​ 但是,从理论上来说:假设一个浅层模型和另外一个深层模型,其中这个深层模型的前面层都是从浅层模型复制过来的,是恒等映射,那么理论上性能应该更好,因为这相当于你在别人的基础上进一步学习,效果自然应该更好。如下图所示:

在这里插入图片描述

​ 但是,实际上,现有的求解器无法如我们所想的那样运作。但这也符合世界的客观规律,因为学习不是一成不变的,即使同一个人在不同的时间点看同一个风景心情也是不同的。

4. 残差框架:

​ 为了一定程度上解决退化问题,作者提出了基于残差的学习框架。

​ 如下图所示(论文原图):

在这里插入图片描述

​ 即,我们不希望让对叠层去适应底层映射,而是去适应残差。

​ 说人话,在理论情况下,假设我们的已有的模型输入为x,此时堆叠一层,那么其可以看成学习一个目标函数H(x)的映射。但是退化问题表明了,实际上学的与我们所想可能有点差距。因此,作者希望新增加的层,去学习H(x)与x之间的差值,即这个新增加的层去学习残差H(x)-x。

​ 作者为了实现这个目的,特意添加上图右边的曲线(并且这个曲线并没有增加学习参数),这样模型的输出值为F(x)+x(假设F(x)为残差),即新的层没有直接学习最终目标,而是学习了残差值。

​ 虽然普通的我们也许并清除这样做是否可以解决网络退化问题,但是试验就是最好的证明方法,而作者也采用试验证明了这个方法的确可行。

5. 残差结构形状不一致解决方法:

​ 残差结构有一个问题,就是如果我们的x与F(x)的shape不一致,那么两者是不能相加的。

​ 解决这个问题的方法很多:

  • 为输入输出添加0值,让两者大小一致(不建议
  • 添加1*1卷积层,来改变通道数

在这里插入图片描述

6. shortcut connections:

​ 上图中,右边的曲线被作者称为“shortcut connections”,之所以用英文,主要中文翻译起来怪怪的,叫“快捷连接???”。

​ 其特点是:满足要求的同时不增加任何需要学习的参数。

一个问题:能不能只跨一层或者跨多层?

​ 跨多层是可以的,上面图片就跨了三层。不过不建议跨单层,因为跨单层就相当于线性变换了,效果不佳。

因为最后才送入relu函数中,那么跨单层就类似于:H(x) = F(x) + x,其中F(x)=w1*x
而两层的话,F(x) =  w2*ReLU(w1*x)
上面只是随便举个例子,示意一下,勿较真

7. 网络架构介绍:

​ 来自作者的原表格:

在这里插入图片描述

​ 这个表格很容易看懂,我只稍微提几点:

  • 为什么上面没有作者尝试的1000层,因为1000层只是作者的初次尝试,里面仍然存在一些问题等待解决(比如作者的1000层效果并不佳,和100层的类似)
  • FLOPs(flop + s): 浮点运算数,是计算量的体现。还有一个类似的是FLOPS(floating-point operations per second),是每秒浮点运算次数,体现了计算速度。(可以从英文单词角度记忆)

​ 另外还有一张图,是ResNet-34的架构,帮助大家辅助理解上表(不过这张图有点小,大家可以把论文下载下来看):

在这里插入图片描述

8. 总结:

​ ResNet可以说是图像分类的一个小巅峰,是一个很常用的网络结构 。其主要贡献就是提出残差学习框架,并探索了更深的网络模型,为后面的发展继续开拓了道路。

​ 如果你对使用pytorch实现ResNet感兴趣,可以看我的另外两篇文章,一篇是实现ResNet架构,另外一篇是侧重训练、测试。(必须提一句,前一篇有些笔误的地方,在后一篇中提及并改正了

https://blog.csdn.net/weixin_46676835/article/details/128745885
https://blog.csdn.net/weixin_46676835/article/details/129716004

http://www.ppmy.cn/news/47803.html

相关文章

【Linux】-关于Linux的指令(上)

作者:小树苗渴望变成参天大树 作者宣言:认真写好每一篇博客 作者gitee:gitee 如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧! TOC 前言 今天我们来讲关于Linux的基本指令,博主讲的指令会对应着Windows…

CLIP 论文解读

文章目录 模型训练推理 实验与Visual N-Grams 相比较分布Shift的鲁棒性 不足参考 现有的计算机视觉系统用来预测一组固定的预订对象类别,比如ImageNet数据集有1000类,CoCo数据集有80类。这种受限的监督形式限制了模型的通用性和可用性。使用这种方法训练…

ClickHouse同步MySQL数据

目录 1 概述1.1 特点1.2 使用细则 2 案例实操2.1 MySQL 开启 binlog 和 GTID 模式2.2 准备 MySQL 表和数据2.3 开启 ClickHouse 物化引擎2.4 创建复制管道2.5 修改数据2.6 删除数据2.7 删除表 1 概述 MySQL 的用户群体很大,为了能够增强数据的实时性,很多…

Nmap入门到高级【第二章】

预计更新Nmap基础知识 1.1 Nmap简介和历史 1.2 Nmap安装和使用方法 1.3 Nmap扫描技术和扫描选项 Nmap扫描技术 2.1 端口扫描技术 2.2 操作系统检测技术 2.3 服务和应用程序检测技术 2.4 漏洞检测技术 Nmap扫描选项 3.1 扫描类型选项 3.2 过滤器选项 3.3 探测选项 3.4 输出选项…

Python OpenCV 蓝图:1~5

原文:OpenCV with Python Blueprints 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 计算机视觉 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 当别人说你没有底线的时候,你最好真…

一文吃透Http协议

Http 协议 1. 初始 Http Http 协议 , 是应用层最为广泛使用的协议 , Http 就是浏览器和服务器之间的桥梁. Http 是基于 TCP 协议实现的 , 通常我们输入搜索框中的网址 (URL) , 浏览器就会根据这个 URL 构造出一个 Http 请求 , 发送给服务器. 服务器就会返回一个 Http 响应(包…

Vue 消息订阅与发布

消息订阅与发布,也可以实现任意组件之间的通信。 订阅者:就相当于是我们,用于接收数据。 发布者:就相当于是媒体,用于传递数据。 安装消息订阅与发布插件: 在原生 JS 中 不太容易实现消息订阅与发布&…

C语言的Hello World的汇编剖析(64位 Intel架构)

C语言的Hello World的汇编剖析(64位 Intel架构) 文章目录 C语言的Hello World的汇编剖析(64位 Intel架构)一. 前提准备二. C转换为汇编操作准备2.1 创建目录&复制代码2.2 C文件转换为汇编文件 三. 剖析汇编文件四. 指令相关五…