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

news2025/6/8 6:44:46

计算机视觉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.coloradmin.cn/o/1330953.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSM4054 500mA线性锂离子电池充电管理 适用消费类的电子产品

CSM4054 是一款完整的单节鲤离子电池采用恒定电流/恒定电压线性充电器。其 SOT23-5 封装与较少的外部元件数量使得 CSM4054 成为便携式应用的理想选择。 CSM4054 可以适合 USB 电源和适配器电源工作。由于采用了内部 PMOSFET 架构,加上防倒充电路&#xff0…

Rust报错:the msvc targets depend on the msvc linker but `link.exe` was not found

当我在我的 windows 电脑上安装 rust,然后用 cargo 新建了一个项目后,cargo run 会报错: error: linker link.exe not found| note: program not foundnote: the msvc targets depend on the msvc linker but link.exe was not foundnote: p…

如何实现酷狗音乐pc页面点击播放时,打开多个歌曲播放时,始终在一个播放页面,(标签页的通讯)

大致有两种思路, 一种是通过wind.open()方法传第二个参数, A页面: //点击跳转播放页函数function toPlayPage(){window.open(path/xxxx/xxxx?name音乐名,music)//第二个参数写一个定值,代表跳转页面都为music标签页&#xff0…

小程序本地文件读、写、追加数据操作,以及修改文件内容

小程序系统文件管理器 FileSystemManager 要操作/读取本地文件,首先需要创建文件或文件夹,然后再对文件进行读写操作; 首先创建文件 FileSystemManager.writeFile 可直接创建文件并写入内容 定义文件路径,此路径在读写操作时保持一致 const path = `${wx.env.USER_DATA…

基于电商场景的高并发RocketMQ实战-NameServer内核原理剖析、Broker 主从架构与集群模式原理分析

🌈🌈🌈🌈🌈🌈🌈🌈 【11来了】文章导读地址:点击查看文章导读! 🍁🍁🍁🍁🍁🍁&#x1f3…

分而治之:Fork/Join框架(构造一个1到200 000求和的任务)

Fork一词的原始含义是吃饭用的叉子,也有分叉的意思。在linux平台中, 方法fork用来创建子进程。使得系统进程可以多一个执行分组。 而join方法这里表示等待,也就是使用fork方法后系统多了一个执行分支(线程) 所以需要等待这个执行分支执行完毕…

【NI-RIO入门】使用其他文本语言开发CompactRIO

1.FPGA 接口Python API Getting Started — FPGA Interface Python API 19.0.0 documentation 2.FPGA接口C API FPGA 接口 C API 是用于 NI 可重配置 I/O (RIO) 硬件(例如 NI CompactRIO、NI Single-Board RIO、NI 以太网 RIO、NI FlexRIO、NI R 系列多功能 RIO 和…

技术分享 | 接口测试请求超时怎么办?

​ 📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试…

机场数据治理系列介绍(2):六图法开展数据治理的步骤与要点

目录 一、机场数据治理的六图法 1、何为六图法 二、应用数据治理六图法的相关工作步骤 1、制定战略目标 2、梳理业务情况 3、收集需求 4、构建数智应用地图 5、选择合适的算法 6、建立数据地图 7、持续改进和优化 三、相关要点 1、明确数据治理三张清单 2、持续构…

JWT是什么?它有什么用?

1. 什么是 JWT? JWT是 JSON Web Token 的缩写,通过数字签名的方式,以 JSON 对象为载体,在不同的服务器终端之间安全传输的信息。 2. JWT 有什么用? JWT 最常见的场景就是授权认证,一旦用户登录&#xff…

异方差 的 BP检验 方法及原理详解

异方差 的 BP检验详解            文章目录 1. `BP`检验的步骤2. 场景示例步骤 ①步骤 ②BP检验,也称为Breusch-Pagan检验,是一种用于检验线性回归模型中异方差性(即误差项方差不恒定)的统计方法。该方法由Trevor S. Breusch和Adrian R. Pagan在1980年提出。 1.…

亚马逊圣诞关键词怎么选?亚马逊圣诞节促销活动有哪些?——站斧浏览器

亚马逊圣诞关键词怎么选? 以下是在亚马逊圣诞期间利用长尾关键词的一些建议: 圣诞主题关键词:随着节日的临近,与圣诞相关的关键词搜索热度将急剧上升。在产品标题、描述、关键词等位置使用与圣诞节相关的关键词,比如…

ArcTS循环ForEach

//定义类 class Item{image:ResourceStrconstructor(image:ResourceStr){this.imageimage} } Entry Component struct Index {//声明变量private items:Array<Item>[new Item($r(app.media.my_icon)),new Item($r(app.media.my_icon)),new Item($r(app.media.my_icon)),n…

人大金仓Kingbase数据库备份和还原

前言 最近在项目开发过程中&#xff0c;使用了国产数据库人大金仓&#xff08;即Kingbase数据库&#xff09;&#xff0c;在使用过过程中需要对数据库进行备份与还原&#xff0c;在此对相关的命令进行简单介绍&#xff0c;以备不时之需。 Linux环境下安装人大金仓可参考此篇文…

k8s部署elastic+kibana

1.软件版本说明 1.1软件版本说明 软件版本kubernetes1.23.17elasticsearch7.17.3kibana7.17.3 1.2硬件环境说明 宿主机使用windows10安装vmware17.5.0&#xff0c;虚拟机安装linux系统&#xff08;centos7.9&#xff09; 说明&#xff1a; elasticserch和kibana的版本尽量…

邦火策划的餐饮品牌策划,到底是不是打破常规的创新之选?

在餐饮业的浩瀚市场中&#xff0c;邦火策划以其独特的餐饮品牌策划服务&#xff0c;引起了业界的关注。邦火策划是否真的是打破常规的创新之选&#xff1f;让我们深入了解&#xff0c;探寻其中的奥秘。 首先&#xff0c;邦火策划在餐饮品牌策划中的创新之处在于对市场的深度洞…

【IDEA】try-catch自动生成中修改catch的内容

编辑器 --> 文件和代码模板 --> 代码 --> Catch Statement Body

又老性能又差,为什么好多公司依然选择 RabbitMQ?

大家好&#xff0c;我是君哥。 RabbitMQ 这个消息队列相信很多程序员都用过&#xff0c;我第一次使用是在 2016 年&#xff0c;确实是一个老牌的消息队列了&#xff0c;但是为什么一直没有被淘汰呢&#xff1f;今天来聊一聊这个话题。 老旧差 发布历史 为什么说 RabbitMQ 老…

drools入门案例

1 业务场景说明 业务场景&#xff1a;消费者在图书商城购买图书&#xff0c;下单后需要在支付页面显示订单优惠后的价格。具体优惠规则如下&#xff1a; 规则编号 规则名称 描述 1 规则一 所购图书总价在100元以下的没有优惠 2 规则二 所购图书总价在100到200元的优惠2…

AtomHub 开源容器镜像中心开放公测,国内服务稳定下载

由开放原子开源基金会主导&#xff0c;华为、浪潮、DaoCloud、谐云、青云、飓风引擎以及 OpenSDV 开源联盟、openEuler 社区、OpenCloudOS 社区等成员单位共同发起建设的 AtomHub 可信镜像中心正式开放公测。AtomHub 秉承共建、共治、共享的理念&#xff0c;旨在为开源组织和开…