当前位置: 首页 > article >正文

019:什么是 Resnet50 神经网络

本文为合集收录,欢迎查看合集/专栏链接进行全部合集的系统学习。

合集完整版请查看这里。

在上一节中,使用了一个简单的神经网络进行识别数字。

这个网络结构非常简单,一是因为层数少,二是因为结构是顺序的,没有其他分支结构。

这类神经网络的结构表示起来大概就像是:conv -> relu -> conv -> relu -> maxpool -> fc 这种,一层连接着一层,这种神经网络结构可以被称为顺序结构的神经网络,也是最简单的一种结构。

现在介绍一个相对来说更加复杂,但我认为在计算机视觉领域非常重要的一个神经网络结构——Resnet50 模型结构。

本专栏后面所有的算法解析、代码实战以及模型的性能调优,也都是基于该神经网络模型来进行的。

什么是 Resnet50 神经网络

Resnet 神经网络是何凯明在《Deep Residual Learning for Image Recognition》论文中首次提出的。

Resnet50 模型之所以叫这个名字,是因为模型的核心思想就藏在名字里。

名字可以拆分为:Res + net + 50,Res 是 Residual (残差)的缩写,50 指的是整个网络中有 50 个卷积层。

Resnet 有很多系列,比如 Resnet18, Resnet101等,后面跟的数字代表的是神经网络中的卷积层的数量。

基本上你可以这么理解:数字越大,卷积层越多,网络的深度越深,神经网络提取的特征越多。

下图是 Resnet 各系列的网络结构汇总表。可以看到在 Resnet50 的那一列中,从第一层到最后一层,总共50个卷积算法,这里把最后一层的全连接层也看做了卷积,至于为什么可以这么看,是因为两者有算法等价关系。
在这里插入图片描述

残差

那么 Res(Residual)残差又是个什么东西呢?

所谓残差,其实就是在顺序连接的神经网络中,增加了一个 short cut 分支结构,俗称为高速公路。

比如,在上一节手写数字识别那个里子中,模型是一层一层往下传的,这种顺序的神经网络如果层数不多,是完全可以使用的的,但是如果层数很深(比如50层或者几百层),数据这么一层一层往下传,在训练时就会发现神经网络很难被训练出来。

训练不出来的原因有很多,其中一个可能是由于反向传播时梯度消失的问题。

而残差结构就是为了解决这个问题。

如下图所示,左侧是正常的神经网络层,一层层往下传,在右侧增加一条连线,使得整个网络结构形成了一个残差结构。这样,网络的输出不再是单纯卷积的输出 F(x),而是原来的输出和输入的叠加 F(x) + X。
在这里插入图片描述

右侧的连线也被叫做高速公路:输入数据X不经过任何运算,可以快速到达输出的地方。

正是由于这个高速公路的存在,使得数据(无论是正向传播还是反向传播时传递梯度),数据都可以“无损”的通过,避免了上面说到的梯度消失的问题。

这种结构就是残差结构,在很多CV任务中,几乎都可以看到这种结构的存在,不论是图像识别的网络,还是目标检测的网络。

总结一下

Resnet50 是一个经典的图像分类网络,并且在图像分类任务上表现出色,它的创新就是引入了残差结构来确保网络深度可以搭建的很深。

很多工业项目中,会以 resnet50 为 back bone(骨干网络)来构建自己的神经网络。

也就说,不少CV网络中的骨干结构就是 resnet 结构,算法的层数不一定是50层,但是算法、原理几乎是一样的,在这个骨干结构的前后,在加一些模型自有的算法,从而来完成自己的特定任务。

为什么可以这样?

是因为resnet这种结构,包括卷积参数的设计,被证实有很强的图像特征提取能力,只要是图像任务,即使不是识别也需要提取特征,因此将 resnet 结构作为一种特征提取器来使用。

除此之外,几乎每一家做 AI 芯片的公司,都会以 resnet50 这个神经网络在自家芯片上跑出来的性能数据来作为宣传手段,这是因为只要这个网络性能好,就说明这家芯片至少在计算机视觉这个大领域内,性能都会有较好的泛化性,可见该模型的重要性。


http://www.kler.cn/a/510514.html

相关文章:

  • 【分类】【损失函数】处理类别不平衡:CEFL 和 CEFL2 损失函数的实现与应用
  • Ubuntu 24.04 LTS linux 文件权限
  • leetcode707-设计链表
  • 【视觉惯性SLAM:十七、ORB-SLAM3 中的跟踪流程】
  • 在21世纪的我用C语言探寻世界本质——字符函数和字符串函数(2)
  • Net Core微服务入门全纪录(三)——Consul-服务注册与发现(下)
  • Web前端------表单标签
  • 青少年编程与数学 02-006 前端开发框架VUE 25课题、UI数据
  • 3.14 掌握 Token 数量计算:使用 Tiktoken 轻松了解模型输入输出
  • 【新人系列】Python 入门(二十七):Python 库
  • opentelemetry-collector docker安装
  • 游戏引擎学习第84天
  • Linux stress-ng命令解读
  • vue 学习笔记 - 创建第一个项目 idea
  • 合并两个有序数组(88)合并两个有序链表(21)
  • 大模型UI:Gradio全解11——Chatbot:融合大模型的聊天机器人(4)
  • 第34天:Web开发-PHP应用鉴别修复AI算法流量检测PHP.INI通用过滤内置函数
  • 《weak_ptr源码剖析》
  • 在K8S中,业务Pod数据如何存储?
  • JavaScript系列(32)-- WebAssembly集成详解
  • 数据库高可用方案-08-多版本管理
  • owasp SQL 注入-03 (原理)
  • Python爬虫-爱奇艺电视剧数据
  • Redis的部署和操作
  • 基于poll函数实现并发处理
  • 联合体(Union)