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

计算机视觉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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

go语言初体验1--使用go install

当安装后go语言后。 尝试编写go程序。 当使用 go install 命令,报错。 go: go install requires a version when current directory is not in a moduleTry go install jvmgo\ch01latest to install the latest version通过查找资料。 用命令: go env …

数据库开发之图形化工具以及表操作的详细解析

2.3 图形化工具 2.3.1 介绍 前面我们讲解了DDL中关于数据库操作的SQL语句,在我们编写这些SQL时,都是在命令行当中完成的。大家在练习的时候应该也感受到了,在命令行当中来敲这些SQL语句很不方便,主要的原因有以下 3 点&#xff…

Centos安装vsftpd:centos配置vsftpd,ftp报200和227错误

一、centos下载安装vsftpd(root权限) 1、下载安装 yum -y install vsftpd 2、vsftpd的配置文件 /etc/vsftpd.conf 3、备份原来的配置文件 sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.backup 4、修改配置文件如下:vi /etc/vsftpd.conf …

Hadoop入门学习笔记——三、使用HDFS文件系统

视频课程地址:https://www.bilibili.com/video/BV1WY4y197g7 课程资料链接:https://pan.baidu.com/s/15KpnWeKpvExpKmOC8xjmtQ?pwd5ay8 Hadoop入门学习笔记(汇总) 目录 三、使用HDFS文件系统3.1. 使用命令操作HDFS文件系统3.1.…

语法分析树(先看例子再看定义)

语法分析树(先看例子再看定义) 先讲例子 书上讲问题,先讲定义,一顿学术操作,让人云里雾里,然后出例子。其实这样往往让人觉得看书的过程就是放弃的过程。 关于语法分析树,我先从上篇文章的例…

新版IDEA中Git的使用(一)

说明:本文介绍如何在新版IDEA中使用Git 创建项目 首先,在GitLab里面创建一个项目(git_demo),克隆到桌面上。 然后在IDEA中创建一个项目,项目路径放在这个Git文件夹里面。 Git界面 当前分支&Commit …

python dash 写一个登陆页 4

界面 代码: 这里引入了dash_bootstrap_components 进行界面美化 ,要记一些className,也不是原来说的不用写CSS了。 from dash import Dash, html, dcc, callback, Output, Input, State import dash_bootstrap_components as dbcapp Dash(…

使用 KVM 管理程序优化虚拟化

KVM(基于内核的虚拟机)是一项强大的开源虚拟化技术,内置于Linux 内核。它支持在单个物理主机上运行多个虚拟机 (VM),这对于资源效率、服务器整合以及为不同目的创建隔离环境特别有帮助。 本文将深入介绍 KVM 管理程序&#xff0…

MySQL主从架构及读写分离实战

​​​​​​ 目录 一、实验目的与环境 二、基础环境介绍 三、搭建主从集群 1、理论基础 2、同步的原理 3、搭建主从集群 3.1 配置master主服务器 3.2 配置slave从服务 3.3 主从集群测试 3.4 集群搭建扩展: 3.5、GTID同步集群 4、集群扩容 5、半同步复…

Git的总体认知与具体实现

GIt概念 是一种分布式控制管理器 tips:敏捷开发 -> 先上线,后续开发再继续开发 集中式和分布式 集中式的版本控制系统每次在写代码时都需要从服务器中拉取一份下来,并且如果服务器丢失了,那么所有的就都丢失了,你本机客户端仅…

电力系统风储联合一次调频MATLAB仿真模型

微❤关注“电气仔推送”获得资料(专享优惠) 简介: 同一电力系统在不同风电渗透率下遭受同一负荷扰动时,其频率变化规律所示: (1)随着电力系统中风电渗透率的不断提高,风电零惯性响…

要参加微软官方 Copilot 智能编程训练营了

GitHub Copilot 是由 GitHub、OpenAI 和 Microsoft 联合开发的生成式 AI 模型驱动的。 GitHub Copilot 分析用户正在编辑的文件及相关文件的上下文,并在编写代码时提供自动补全式的建议。 刚好下周要参加微软官方组织的 GitHub Copilot 工作坊-智能编程训练营&…

指针:传址调用

#include <stdio.h> void Swap1(int x, int y) {int tmp x;x y;y tmp; } int main() {int a 0;int b 0;scanf("%d %d", &a, &b);printf("交换前&#xff1a;a%d b%d\n", a, b);Swap1(a, b);printf("交换后&#xff1a;a%d b%d\n&…

深度学习(七):bert理解之输入形式

传统的预训练方法存在一些问题&#xff0c;如单向语言模型的局限性和无法处理双向上下文的限制。为了解决这些问题&#xff0c;一种新的预训练方法随即被提出&#xff0c;即BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;。通过在大规模…

sessionStorage可以在多个Tab之间共享数据吗?

文章目录 一、MDN二、求证三、答案四、最后 一、MDN 只读 sessionStorage 属性访问当前源的会话存储对象。sessionStorage与localStorage类似&#xff1b;不同之处在于 localStorage 里面存储的数据没有过期时间设置&#xff0c;而存储在 sessionStorage 里面的数据在页面会话…

《xHCI 1.2》3体系结构概览

3.2 xHCI数据结构 3.2.1 Device Context Base Address Array 3.2.2 Device Context 3.2.3 Slot Context

机器学习——模型评估与选择(拟合、)

【说明】文章内容来自《机器学习——基于sklearn》&#xff0c;用于学习记录。若有争议联系删除。 1、拟合 拟合是指机器学习模型在训练的过程中&#xff0c;通过更新参数&#xff0c;使得模型不断契合可观测数据(训练集)的过程。欠拟合指的是模型在训练和预测表现都不好&…

C# 使用Socket进行简单的通讯

目录 写在前面 代码实现 服务端部分 客户端部分 运行示例 总结 写在前面 在.Net的 System.Net.Sockets 命名空间中包含托管的跨平台套接字网络实现。 System.Net 命名空间中的所有其他网络访问类均建立在套接字的此实现之上。 其中的Socket 类是基于与 Linux、macOS 或 W…

STM32实现三个小灯亮

led.c #include"led.h"void Led_Init(void) {GPIO_InitTypeDef GPIO_VALUE; //???RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//???GPIO_VALUE.GPIO_ModeGPIO_Mode_Out_PP;//???? ????GPIO_VALUE.GPIO_PinGPIO_Pin_1|GPIO_Pin_2|GPIO_P…

使用教程之【SkyWant.[2304]】路由器操作系统,破解移动【Netkeeper】校园网【小白篇】

许多高校目前饱受Netkeeper认证的痛苦&#xff0c;普通路由器无法使用&#xff0c; 教你利用SkyWant的Netkeeper认证软件来使你的SkyWant路由器顺利认证上网&#xff0c;全宿舍又可以合作共赢了&#xff01; 步骤一&#xff1a;正确连接网线&#xff0c;插电开机 正确连接网…