全方位掌握卷积神经网络:理解原理 优化实践应用

计算机视觉CV的发展 

检测任务
分类与检索
超分辨率重构
医学任务
无人驾驶

整体网络架构

卷积层和激活函数(ReLU)的组合是网络的核心组成部分

激活函数(ReLU)

引入非线性,增强网络的表达能力。

卷积层

负责特征提取

池化层(Pooling Layer)

它在网络中起到加速和降维的作用。

最大池化

全连接层(FC)

全连接层将卷积和池化后的特征图转换为分类任务所需的特征向量。

特征图的变化过程

随着网络的深入,特征图的尺寸会发生变化,这取决于卷积核的大小和步长。特征图的维度在实际应用中可以根据任务需求自行设置卷积核的数量和大小,以及池化层的参数。

  1. 数据输入:网络接收原始图像数据,通常是一个多维数组,表示为高度、宽度和颜色通道(如RGB图像的3个通道)。

  2. 卷积层:图像通过卷积层,每个卷积核(或滤波器)在图像上滑动,执行卷积操作以提取局部特征。这通常会导致特征图的尺寸增加,因为每个卷积核都会生成一个新的特征图。

  3. 激活函数:卷积操作后,通常会应用一个激活函数(如ReLU),以引入非线性,增强网络的表达能力。

  4. 池化层:为了降低特征图的维度,减少计算复杂度,并提取更抽象的特征,会应用池化操作(如最大池化或平均池化)。这会导致特征图尺寸的减小,但保留最重要的特征。

  5. 重复卷积和池化:这个过程会多次重复,每次都会提取更高层次的特征,同时特征图的尺寸逐渐减小。

  6. 展平:在网络的末端,特征图会被展平为一个一维向量,因为全连接层(FC层)只能处理一维数据。

  7. 全连接层:展平后的特征向量通过全连接层,这一层负责将提取的特征映射到最终的分类结果。全连接层的输出节点数量通常等于分类任务的类别数量。

  8. 输出:全连接层的输出通过一个softmax激活函数(对于多分类任务),将输出转换为概率分布,每个类别的概率值表示该类别的预测概率。

经典网络

Alexnet

  • 年份:2012年
  • 特点
    • 使用ReLU激活函数代替传统的Sigmoid或Tanh,加速训练。
    • 使用Dropout减少过拟合。
    • 实施了局部响应归一化(LRN),虽然后来的研究表明LRN并不总是有益的。
    • 使用多GPU训练,由于当时的GPU内存限制。
  • 层数:较浅,5个卷积层和3个全连接层。
  • 影响:AlexNet在2012年的ImageNet挑战中获胜,证明了深度学习在视觉任务中的潜力。

Vgg

  • 年份:2014年
  • 特点
    • 强调了使用更小的(3x3)卷积核堆叠的重要性。
    • 展示了通过增加网络深度可以提升性能。
    • 网络架构非常规整,主要由重复的3x3卷积和2x2最大池化层组成。
  • 层数:较深,有VGG16和VGG19两个版本,分别含有16和19层。
  • 影响:VGG简化了网络结构的复杂度,并在多个视觉任务中取得了很好的效果。

ResNet(残差网络)

  • 年份:2015年
  • 特点
    • 引入残差学习(Residual Learning)概念,通过跳跃连接解决了深度网络的退化问题。
    • 允许构建非常深的网络(例如ResNet有50层、101层、152层版本)而不会出现梯度消失/爆炸问题。
    • 性能随网络深度的增加而增加。
    • 减少了训练深度网络的难度。
  • 层数:非常深,从34层扩展到超过1000层。
  • 影响:ResNet在多个基准测试中取得了先进的结果,成为了很多现代网络架构的基础。
解决层次越多性能越差的问题

以下是ResNet的一些关键原理和特点:

残差学习(Residual Learning)

在传统的神经网络中,每一层都直接学习期望的输出。ResNet则改变了这一策略,通过学习输入与输出之间的残差(即差异)来简化学习过程。具体来说,如果我们的目标是学习某个映射 H(x),ResNet将网络层设计成学习残差映射 F(x) = H(x) - x。理论上,学习残差比直接学习未映射函数更简单。

跳跃连接(Skip Connections)

ResNet通过引入所谓的“跳跃连接”(也称为快捷连接或恒等连接)来实现残差学习。在跳跃连接中,输入不仅传递到下一层,还直接添加到更深层的输出上。这种连接方式允许网络在训练过程中有效地传播梯度,从而缓解梯度消失的问题,同时也提高了网络的学习能力。

x是保底输出,保证多层卷积至少有更优输出

深度网络

ResNet使得构建非常深的神经网络成为可能。传统的深度网络随着层数的增加,性能越来越差。但在ResNet中,即使是几十层到上百层的网络,也能通过残差学习有效地训练。

强化特征传播

跳跃连接强化了前向传播和反向传播的过程。在前向传播过程中,它允许原始的输入信息直接传到后面的层;在反向传播时,梯度可以直接流回到前面的层,从而提高整个网络的训练效率和稳定性。

由于这些特性,ResNet在图像识别、分类等领域取得了显著的成果,可以有效地训练非常深的网络模型而不会导致性能显著下降。ResNet架构的出现,对深度学习领域的发展产生了重大影响。

前置概念

步长

步长是卷积滤波器在输入特征图上移动的距离。每次应用卷积核后,滤波器会根据步长值移动相应的像素数来开始下一次操作。

  1. 步长为1:滤波器每次移动一个像素。
  2. 步长大于1:滤波器跳过中间的像素,这会导致输出特征图的尺寸小于输入尺寸。

步长 S 影响了输出特征图的尺寸和感受野的覆盖范围。感受野是指输出特征图中每个元素对应的输入图像上的区域大小。步长决定了感受野滑动过输入图像时的快慢。

如果步长大于1,输出特征图的空间维度会比输入图像小。如果步长为1且使用了适当的填充,那么输入和输出的空间维度可以保持不变

填充

填充是在输入数据的边缘添加额外的、通常是零值的像素来增加输入数据的尺寸的过程。这样做的目的有两个:

  1. 保持尺寸:无填充的卷积通常会减小特征图的空间维度,填充允许我们控制特征图的大小,可以保持尺寸不变或根据需要调整尺寸。

  2. 边缘信息:在不使用填充的情况下,卷积操作会导致图像边缘的信息比中心部分的信息使用得更少,因为边缘像素在滤波器窗口中出现的次数少于中心像素。填充确保边缘像素也被充分利用。

填充的大小 P 指的是在每个边缘添加的像素行(或列)的数量。

填充举例

感受野

概念介绍

这张图说明了在卷积神经网络(CNN)中感受野的概念。感受野指的是输入图像中影响卷积层输出的区域大小。

在这个特定的例子中,有两个卷积操作:

  1. 第一次卷积(First Conv):使用了3x3的卷积核,这意味着每个卷积操作的输出都是由输入特征图上3x3的区域计算得到的。因此,第一层卷积的直接感受野是3x3。

  2. 第二次卷积(Second Conv):这一层也使用3x3的卷积核。由于它是在第一次卷积的输出上进行的,它的感受野不仅仅局限于其直接输入的3x3区域。由于第一层的每个3x3的输出已经包含了原始输入的一个3x3的区域,第二层的3x3卷积核将覆盖更大的原始输入区域。具体来说,它会覆盖5x5的原始输入区域(因为中心像素的相邻像素在原始输入中已经包含了周围的两个像素)。

在图中红色虚线表示第二层卷积操作的感受野扩展到了更大的输入区域。这是因为第二层的输出依赖于第一层的输出,而第一层的每个输出又依赖于输入的一个3x3区域。

所以,随着通过网络层的深入,每个卷积层的输出所对应的输入图像上的感受野是逐渐扩大的。这就是为什么深层的网络能够捕捉到输入数据中更大范围的特征。

图中的注释指出,如果使用3x3的卷积核进行两次卷积,最终得到的感受野是7x7,这是因为第一次卷积的3x3感受野在第二次卷积后向外扩展了两个像素的距离(对每个方向)。这样两层3x3卷积的组合就能覆盖7x7的输入区域,比单独一次使用更大卷积核(比如7x7)来得到相同大小感受野的方式更有效率,因为它减少了计算量并保留了更多的空间信息。

小型卷积核的堆叠替代大卷积核

使用小型卷积核的堆叠(例如多层3x3卷积核)而不是单个大型卷积核(例如7x7卷积核)有几个优势:

  1. 减少计算量:相比于使用一个7x7的卷积核,两个3x3的卷积核的参数数量更少。一个7x7卷积核含有49个权重,而3x3卷积核只有9个权重。两个3x3卷积核总共18个权重,参数数量减少了超过一半。这意味着网络在学习这些权重时需要的计算量更少,同时还减少了模型的存储需求。

  2. 增加非线性:每次卷积操作后通常会跟随一个非线性激活函数(如ReLU)。如果使用两个3x3卷积核代替一个7x7卷积核,网络将有两次非线性变换的机会而不是一次。这增加了模型的非线性能力,使得网络可以捕捉到更复杂的特征。

  3. 保留更多空间信息:在多个小卷积核的情况下,信息在传递过程中得到更好的保留。每层都对其输入进行一些处理,而不是让一个单一的大卷积核一次性完成所有工作。这种逐层处理有助于保留空间层次结构中的细节信息。

  4. 更好的感受野管理:堆叠卷积层可以逐渐扩大感受野,而不是一次性在一个大的感受野中操作。这种渐进式的方式允许网络更细致地了解每个区域,逐层构建更高层次的抽象。

这些因素共同作用使得深层卷积网络可以更有效地学习,同时保持了计算上的高效性。这就是为什么在ResNet和其他现代CNN架构中,小型卷积核的使用变得如此流行。

特征输入和滤波器相关参数计算

卷积结果特征值的计算方法

假设我们有一个输入特征图,它的大小为 7x7x3(高x宽x深度),这里的深度3代表RGB三个颜色通道。我们有一个3x3x3大小的滤波器,这意味着滤波器在每个颜色通道上都有一个3x3的权重矩阵。此外,每个滤波器都有一个偏置值。

在卷积操作中,我们会进行以下步骤来计算输出特征图中一个位置的特征值:

  1. 对应元素相乘:我们将滤波器的每个权重与输入特征图对应位置的值相乘。

  2. 求和:将上一步中所有乘积的结果相加得到一个总和。

  3. 加上偏置:将上一步的总和加上滤波器的偏置值。

  4. 激活函数:通常,我们还会通过一个激活函数(如ReLU)来处理上一步的结果

如果我们计算R通道的特征值,假设输入特征图的R通道和滤波器的R通道权重如下:

输入特征图R通道的一个3x3区域:
0 0 0
0 1 1
0 1 1

滤波器R通道权重:
1 -1  0
1  0 -1
1  1 -1

我们将这两个3x3矩阵中对应位置的元素相乘,然后将结果相加:

(0*1 + 0*(-1) + 0*0) + (0*1 + 1*0 + 1*(-1)) + (0*1 + 1*1 + 1*(-1)) = 0 + (-1) + 1 = 0

这样我们就得到了R通道的特征值。同样的操作也会应用于G和B通道,并将得到的特征值相加,然后加上偏置值得到最终的特征值。如果G通道计算结果是2,B通道是0,偏置是1,则最终特征值为:

R通道结果 + G通道结果 + B通道结果 + 偏置 = 0 + 2 + 0 + 1 = 3

卷积结果长和宽的计算公式

图片中的示例说明了如何使用这些公式来计算输出特征图的尺寸。

  • 一个输入特征图大小为 7x7x3(H1 = 7, W1 = 7)。
  • 滤波器(卷积核)大小为 3x3(FH = 3, FW = 3)。
  • 假设填充为1(P = 1),步长为1(S = 1)。

那么,我们可以计算输出特征图的每个维度:

 所以,输出特征图的尺寸将会是 7x7x3,其中3是输出特征图的通道数,每个卷积核产生一个通道的输出。

最终的输出尺寸与输入尺寸相同是由于选择了适当的填充(1)和步长(1),这种设计通常用于确保特征图的空间维度在卷积操作后保持不变,这在某些网络设计中是需要的。

滤波器权重计算

  • 输入特征图的深度决定了每个滤波器的深度。例如,对于彩色图像,输入特征图的深度通常是3,对应于RGB三个颜色通道。每个滤波器在这种情况下也将有3个通道,使其能够应用于输入特征图的所有通道
  • 滤波器的个数,也就是卷积层中滤波器(卷积核)的数量,决定了卷积层输出特征图的深度。

如果每个滤波器的大小是 3x3x3,那么每个滤波器的权重数量是:3×3×3=27  。如果我们有三个这样的滤波器,那么总权重数量就是:3×27= 81。每个滤波器还有一个偏置参数,因此两个滤波器的总偏置数量是3,所以这个卷积层的总参数数量是权重和偏置的和:

81权重+3 偏置= 84 

卷积参数共享

在传统的全连接层中,每个输入单元与每个输出单元都有一个唯一的权重,这意味着参数的数量会随着输入数据的大小迅速增加。相比之下,卷积层通过参数共享大大减少了模型的参数数量。

一个卷积核(或滤波器)的权重在整个输入特征图上滑动并应用,这意味着同一卷积核的权重在每个位置都是相同的。因此,无论输入特征图有多大,该卷积核的权重数量保持不变。

引用资料

【导师不教我来教!】基于Pytorch框架的鸢尾花分类实战,IT博士手把手带你跑通鸢尾花分类数据集,深度学习新手必备!---附数据集_哔哩哔哩_bilibili

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL——复合查询

目录 一.基本查询回顾 二. 多表查询 三.自连接 四.子查询 1.单行子查询 2.多行子查询 3.多列子查询 4.在from子句中使用子查询 5.合并查询 一.基本查询回顾 准备数据库: 查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为…

.net core 生成jwt+swagger-通过 IHttpContextAccessor读取token信息

1.安装jwt相关包 <ItemGroup><PackageReference Include"Microsoft.AspNetCore.Authentication.JwtBearer" Version"6.0.25" /><PackageReference Include"Microsoft.IdentityModel.Tokens" Version"7.0.3" /><P…

一个简单的设置,就能摆脱iPad音量键随方向变的困扰

新款iPad Air 5的发布和iPhone SE 3的评审可能是苹果本月最大的新闻&#xff0c;但该公司也悄悄发布了一项功能&#xff0c;自2010年发布第一款以来&#xff0c;iPad用户一直在等待&#xff1a;音量按钮现在在横向模式下很有意义。让我们解释一下。 每台iPad侧面的音量按钮在人…

HTML面试题

HTML 面试题汇总 1. 什么是 <!DOCTYPE>&#xff1f;是否需要在 HTML5 中使用&#xff1f; 参考答案&#xff1a; 它是 HTML 的文档声明&#xff0c;通过它告诉浏览器&#xff0c;使用哪一个 HTML 版本标准解析文档。 在浏览器发展的历史中&#xff0c;HTML 出现过很多个…

032 - STM32学习笔记 - TIM基本定时器(一) - 定时器基本知识

032 - STM32学习笔记 - TIM定时器&#xff08;一&#xff09; - 基本定时器知识 这节开始学习一下TIM定时器功能&#xff0c;从字面意思上理解&#xff0c;定时器的基本功能就是用来定时&#xff0c;与定时器相结合&#xff0c;可以实现一些周期性的数据发送、采集等功能&#…

连锁便利店管理系统有什么用

连锁便利店管理系统对于连锁便利店的运营和管理非常有用。以下是一些常见的用途&#xff1a; 1. 库存管理&#xff1a;连锁便利店通常需要管理多个门店的库存&#xff0c;管理系统可以帮助实时掌握各个门店的库存情况&#xff0c;包括商品数量、进货记录、库存调拨等。这样可以…

服务器数据恢复-误操作导致xfs分区数据丢失的数据恢复案例

服务器数据恢复环境&#xff1a; 某品牌OceanStorT系列某型号存储MD1200磁盘柜&#xff0c;组建的raid5磁盘阵列。上层分配了1个lun&#xff0c;安装的linux操作系统&#xff0c;划分两个分区&#xff0c;分区一通过lvm进行扩容&#xff0c;分区二格式化为xfs文件系统。 服务器…

Portainer.io:让容器管理变得更加直观

在现代软件开发和部署中&#xff0c;容器化技术已经变得越来越流行。Docker 是其中一种领先的容器化平台&#xff0c;而 Portainer.io 则是一个优秀的管理工具&#xff0c;使得 Docker 的使用变得更加简单和可视化。本文将介绍 Portainer.io 的基本功能和如何在 Docker 上安装和…

PyQt6 利用Pyinstaller打包发布程序

锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计53条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话版…

LangChain 30 ChatGPT LLM将字符串作为输入并返回字符串Chat Model将消息列表作为输入并返回消息

LangChain系列文章 LangChain 实现给动物取名字&#xff0c;LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字LangChain 3使用Agent访问Wikipedia和llm-math计算狗的平均年龄LangChain 4用向量数据库Faiss存储&#xff0c;读取YouTube的视频文本搜索I…

装前必看施工干货,贴瓷砖的5大步骤。福州中宅装饰,福州装修

亲爱的朋友们&#xff0c;你们是否曾经在装修房屋时遇到过贴砖的难题呢&#xff1f;贴砖可是装修工程中一项重要的工艺&#xff0c;它直接影响到整个装修的效果和质量。今天&#xff0c;我就来跟大家分享一下贴砖的几个重要要点&#xff0c;希望对你们有所帮助。 1️⃣ 选材是关…

2023 年人工智能研究与技术排名前 10 的国家

人工智能研究是一项全球性的工作。虽然美国和中国因其对人工智能的贡献而备受关注&#xff0c;但事实是&#xff0c;世界各国都在涉足这项技术&#xff0c;尝试新的突破&#xff0c;并吸引投资者的关注。 斯坦福大学的《2023年人工智能报告》估计&#xff0c;到 2022 年&#…

使用宝塔面板部署前端项目到服务器

目录 文章目录 前言 一、第一步&#xff1a;创建文件夹 二、第二步&#xff1a;部署前端项目 三、第三步&#xff1a;打开防火墙 文章目录 前言第一步&#xff1a;创建文件夹第二步&#xff1a;部署前端项目第三步&#xff1a;打开防火墙总结 前言 在此之前&#xff0c;我…

Python学习路线 - Python语言基础入门 - Python基础综合案例 - 数据可视化 - 地图可视化

Python学习路线 - Python语言基础入门 - Python基础综合案例 - 数据可视化 - 地图可视化 基础地图使用基础地图演示基础地图演示 - 视觉映射器 疫情地图-国内疫情地图案例效果数据整理 疫情地图-省级疫情地图省疫情地图 基础地图使用 基础地图演示 代码示例&#xff1a; &quo…

【Spring实战】02 配置多数据源

文章目录 1. 配置数据源信息2. 创建第一个数据源3. 创建第二个数据源4. 创建启动类及查询方法5. 启动服务6. 创建表及做数据7. 查询验证8. 详细代码总结 通过上一节的介绍&#xff0c;我们已经知道了如何使用 Spring 进行数据源的配置以及应用。在一些复杂的应用中&#xff0c;…

【SpringMVC】REST(Representation State Transfer)ful开发

REST全称Representation State Transfer&#xff0c;表现形式状态转换 文章目录 1. 为什么提出了REST&#xff1f;2. RESTful入门案例案例代码修改请求方式修改成RESTful风格&#xff0c;并以POST方式提交 RESTful格式下传参RESTful入门案例总结RequestBody&#xff0c;Reques…

Redis-运维

转自 极客时间 Redis 亚风 原文视频&#xff1a;https://u.geekbang.org/lesson/535?article681062 Redis 同步 Redis主从数据同步,主从第⼀次同步是全量同步 replicaof 主机 端口 #当前这个机器做Master的备份master如何判断slave是不是第⼀次来同步数据&#xff1a; Repl…

第11章 GUI Page400~402 步骤二 画直线

运行效果&#xff1a; 源代码&#xff1a; /**************************************************************** Name: wxMyPainterApp.h* Purpose: Defines Application Class* Author: yanzhenxi (3065598272qq.com)* Created: 2023-12-21* Copyright: yanzhen…

谷歌推大语言模型VideoPoet:文本图片皆可生成视频和音频

Google Research最近发布了一款名为VideoPoet的大型语言模型&#xff08;LLM&#xff09;&#xff0c;旨在解决当前视频生成领域的挑战。该领域近年来涌现出许多视频生成模型&#xff0c;但在生成连贯的大运动时仍存在瓶颈。现有领先模型要么生成较小的运动&#xff0c;要么在生…

蓝桥杯 1223 第 2 场 小白入门赛

蓝桥小课堂-平方和 模拟 1 2 2 2 3 2 ⋯ n 2 n ⋅ ( n 1 ) ⋅ ( 2 n 1 ) 6 1^22^23^2\cdotsn^2\dfrac{n\;\cdot\;(n 1)\;\cdot\;(2n1)}{6} 122232⋯n26n⋅(n1)⋅(2n1)​。 write(n * (n 1) * (n * 2 1) / 6);房顶漏水啦 m a x ( 最大的行 − 最小的行 , 最大的列 −…