【CNN卷积神经网络算法】卷积神经网络

卷积神经网络整体架构

总结 

  • 输入层:原始数据(图像)
    • 例如可以输入一张RGB图像,其可以标示为一个三维矩阵,宽W高H和通道数C=3对应着RGB
  • 卷积层:提取局部特征,变换输入数据为丰富的特征图
    • 网络使用多个卷积核(滤波器)在输入图像上进行卷积操作。每个卷积核会在图像上滑动,通过点积运算提取局部特征(如边缘、角点、纹理等)
    • 经过第一层卷积后,得到的输出特征通常仍是二维布局,但通道数可能增加(因为多个卷积核的存在),且特征图的宽高可能比原图略小(取决于卷积核大小、步幅和填充策略)
    • 类似于多个专家针对一个文物不同角度的分析,每个专家就代表一个卷积核,每个卷积核都会得到针对性的特征总结
  • 池化层:下采样,减少数据维度和过拟合风险,保留主要特征
    • 通过池化操作,可以大幅降低特征图的空间维度(宽和高的大小)从而减少参数量和计算量
    • 池化还具有一定的平移不变性作用,即即使图像有小幅度的位移,池化后的特征仍较为稳定
    • 池化层就像缩小图片的分辨率,虽然丢失了一些细节,但是保留了整体的轮廓和主要特征
  • 重复多个卷积+池化模块:逐层提取更高级、更抽象的特征
    • 一个CNN会多次重复“卷积层 + 激活函数(如ReLU) + 池化层”的组合
    • 前面的卷积层可能提取一些低级特征(如边缘、线条),后面的卷积层则在这些低级特征的基础上提取更高级的特征(如特定形状、局部纹理、物体部分的组合);随着不断的深入,特征数会越来越多,从而实现了对原始数据的多层抽象
    • 最初你在一幅复杂的画中仅识别出一些简单的线条和轮廓(低级特征),接着通过进一步分析这些线条组合成小的形状或局部结构(中级特征),最终再将这些局部结构组合成特定物体的轮廓或类别特征(高级特征)
  • 全连接层:将抽象的高级特征映射到输出空间(比如分类类别)
    • 当特征图被压缩到足够小的空间尺寸后(例如变为几行几列但有较多特征通道),会将其“铺平”(flatten)成一维向量,再输入到全连接层进行分类或回归任务
    • 经过多层的特征提取后,你手头有一组有用的高层特征,这些特征就像一个描述物体特性的列表。全连接层相当于一位专家评审,根据特征的分布和数值,对物体进行最终的类别判断
  • 输出层:输出预测结果(如类别概率分布)
    • 最后的输出层(例如使用Softmax激活)会根据前面层提取的高层次特征,给出最终的分类结果或回归结果
    • 输出层就像是评委宣布最终判决的时刻,根据前面提供的所有证据(特征)最终下结论,这个图像中到底是什么物体

卷积层

主要步骤

  • 卷积核扫描输入数据:通过滑动窗口方式,将卷积核与输入数据的局部区域进行元素级别的乘积和求和,提取局部特征
  • 加偏置:在卷积结果上添加偏置项,调整特征的整体水平
  • 应用激活函数:通过非线性激活函数(如 ReLU)增强模型的表达能力,允许网络学习复杂的模式
  • 生成输出特征图:每个卷积核生成一个特征图,多个卷积核共同提取输入数据的多种特征

输出的特征图就相当于通过不同颜色的筛选器观察图纸,从而得到了不同视角或者不同特征的图像个,每一个筛选器捕捉到图纸不同特征 

卷积核

什么是卷积核

卷积核是一个小尺寸的矩阵(通常为3x3、5x5等),其参数在训练过程中通过反向传播算法学习得到。每个卷积核负责提取输入数据的某种特定特征,如边缘、纹理等

这个就类似于通过小窗口扫描大图纸,窗口中有不同颜色的燃料。每当窗口覆盖某一部分图纸时,你根据涂料的颜色组合来识别该部分是否存在特定的图案(如边缘)。不同的涂料组合(卷积核)能够检测到不同的图案特征

运算过程了解

假设输入数据为一个二维图像,尺寸为 H×W,卷积核尺寸为K×K,其中(i,j) 是输出特征图的位置,m,n 是卷积核的索引

 加偏置

加偏置的原因

与全连接神经网络类似,偏置项 bbb 是一个常数,添加到卷积结果中,用于调整输出的整体水平。它允许模型在没有任何激活时输出非零值,增强模型的表达能力

同上面小窗口扫描大图纸的事例,偏置项就是在识别图案的时候添加的背景光亮度,无论窗口的图案如何,背景光亮度的调整都可以帮助我们更好的识别图案

步幅

含义

含义

步幅指的是卷积核在输入数据上每次滑动的像素数

在二维卷积中,步幅通常用两个值表示,分别对应垂直和水平方向的滑动步伐;多数情况下步幅在两个方向上是相同的

步幅决定了卷积核扫描输入数据时的步伐大小,进而影响输出特征图的尺寸

较大的步幅会减少特征图的尺寸,从而降低计算量;较小的步幅则会生成更大尺寸的特征图,保留更多的空间信息

理解

步幅就类似于平时阅读的时候,每次翻页时候移动的行数,加入每页都有固定数量的行

  • 步幅为1:每次翻页的时候只移动一行,也就相当于详细阅读每一行的内容,此时不会遗漏任何信息
  • 步幅为2:每次翻页的时候移动两行,相当于快速浏览文章中的内容
  • 步幅为3:每次翻页的时候移动三行,更加快读的浏览文章内容

优缺点

优点

  • 控制特征图尺寸:通过调整步幅,可以有效控制特征图的尺寸,进而影响后续层的计算量和参数数量
  • 降低计算量:较大的步幅减少了特征图的尺寸,从而降低了计算复杂度,适用于需要快速处理的任务
  • 抽取更大范围的特征:较大的步幅覆盖了更大范围的输入,有助于捕捉更全局的特征信息

缺点

  • 信息丢失:较大的步幅可能导致特征图中某些重要信息被跳过,影响模型的性能,尤其是在需要细粒度特征的任务中
  • 特征不连续:步幅过大可能导致特征图中的特征不够连续,影响后续层对特征的理解和利用

实际应用场景

图像分类

在图像分类任务中,通常需要逐步提取高层次的特征。通过在早期卷积层使用较小的步幅),保留更多的空间信息;在后期卷积层使用较大的步幅,实现特征图的下采样,减少计算量

目标检测

目标检测需要在特征图中定位目标的位置。较小的步幅有助于保持特征图的高分辨率,提供更精确的定位信息

语义分割

语义分割要求对每个像素进行分类,因此需要高分辨率的特征图。通常在网络中使用较小的步幅,结合上采样(如反卷积、上采样层)来恢复特征图的空间尺寸

填充

含义

如果输入的数据没有经过卷积核,那么最后输出的图像尺寸会越来越小,填充存在的目的就是为了控制输出尺寸或者保持输入尺寸

填充的几种方式

  • 零填充(Zero Padding):在输入的边缘填充零值
  • 镜像填充(Reflection Padding):使用输入边缘的镜像像素进行填充
  • 常数填充(Constant Padding):填充特定的常数值

作用

控制输出尺寸

不使用填充时,卷积操作会逐步减少特征图的尺寸。通过填充可以控制最后输出特征图的尺寸不变

保留边缘信息

在没有填充的情况下,卷积核无法完全覆盖输入的边缘像素,导致边缘信息在特征提取过程中可能被忽略或丢失。通过填充,可以确保边缘像素也参与到卷积运算中,从而更好地保留图像的边缘信息

就像用刷子涂色。如果不在画布边缘留出足够的空间,刷子靠近边缘时,颜色可能无法均匀涂抹。通过在画布周围预留空间(填充),你可以更好地控制边缘部分的涂色效果

允许更深的网络结构

填充可以帮助保持特征图的尺寸,允许网络增加更多的卷积层而不会导致特征图过早地缩小。这对于构建深层网络,提高模型的表达能力非常重要

计算输出特征图(重点)

基本公式

具体计算

公式

  • 填充:P=0
  • 步幅:S=2

结果

多通道卷积计算(重点)

单个计算理解

首先分析输入特征图

  • 输入的特征图是三维的,例如是一个普通的彩色图像
  • 宽W高H是其二维尺寸
  • 深度C则表示图像的通道数,例如在该处表示一个RGB彩色图像

卷积核(w)的尺寸与深度匹配

  • 卷积核高度为FH宽度FW,与输入图像的平面区域相对应,参考上面一节二维特征图
  • 卷积核的深度与输入的深度C相同,其表示每个通道上对应的权重
  • 运算时,卷积核会在输入特征图的平面上“滑动”,但其深度方向与输入完全对齐,从而能与输入的每个通道进行加权求和

多通道输入 映射为单通道输出特征图

  • 当一个卷积核与输入特征图在某一个位置对齐的时候,它会对该位置下输入特征图的三个维度进行数值加权求和
  • 最终产生的输出是一个单一数值
  • 将卷积核在输入特征图上“滑动”所有可能的位置,就会得到一个二维的输出特征图 OH×OW

多个卷积核

 

  • 右侧FN表示不同管卷积核,每个卷积核都会生成一个输出特征图
  • 将这些输出特征图叠加在一起就形成了一个OH * OW * FN的输出特征图集合
  • 简而言之,每个卷积核相当于一个“特征提取器”,多个卷积核同时工作,就能抽取到多维度、多层次的特征,形成输出特征图的多个通道

卷积核的分析范围

刚开始认为一个卷积核只是用来分析图像某个部分,但是后来发现,其一个卷积核是一个可在输入图像上移动的小窗口

一般所说的卷积就是卷积核,卷积核从图像的左上角开始,对应输入图像的一个局部区域进行像素级相乘相加操作,然后得到一个输出数值,形成输出特征图的一个像素点

接着,卷积核以一定的步幅(stride)向右移动,重复相同操作,对图像的下一个局部区域进行处理。等到这一行走到尽头,再往下移动一行,如同阅读英文文字一样从上到下、从左到右进行扫描。这样,一个卷积核会在图像的每个局部位置都执行相同的过滤操作

最终,一个卷积核生成的输出特征图代表了该卷积核在整个图像上提取到的某种特定特征(例如特定方向的边缘、某种纹理图案等)

综上理解,一个卷积核不是只分析某个角落的图像,而是通过在图像各位置滑动来对整个图像进行“同类型特征”的搜索与分析

多个卷积核叠加的含义

多个卷积核的输出叠加不是简单的不同部分拼接,而是对整个图像从不同维度进行分析结果合集

简单来说,针对于一件艺术品,每个卷积核就像一个鉴宝专家,每个专家的鉴别角度不同,最后多个专家综合判断给出最终的综合评价

每一个卷积核都对整个输入图像进行扫描,只是每个卷积核因为权重(参数)不同,对图像的敏感模式也不同。有的卷积核可能对水平边缘更敏感,有的对垂直边缘,有的对颜色变化,有的对特定纹理

当我们将多个卷积核的输出特征图整合起来,就相当于为原始图像创建了一个更丰富的描述方式。这些叠在一起的特征图(多通道输出)是对原始输入的一种高层次表征,它们提取了输入中各种潜在有用的模式

与原始图像相比,这些特征图并非简单重复输入信息,而是对输入信息进行了加权、提取和转换,是输入图像在“特征空间”中的映射,更利于后续分类、检测或识别任务

卷积核中的权重与通道数

理解

想象你有红、绿、蓝三块透明滤镜(表示输入的三个通道),叠放在一起形成一个区域的颜色特征。卷积核的三个通道权重就像三个可调节的旋钮,当你在这个区域观看时,通过调节这三个旋钮(权重),你可以强化对红色信息的关注,弱化对蓝色信息的关注,或平衡三种颜色的比例

自动找到最有利于识别特定模式的权重组合。最终输出的数值不再是简单的RGB颜色值,而是某种代表特征是否存在的“强度数值”

分析

C对应的是输入数据的通道数,权重则是学习得到的参数

如果输入是RGB图像,那么输入的深度C=3。卷积核的深度方向与输入匹配,也为3。这意味着卷积核中有3个对应通道的滤波器片(对R通道一个,对G通道一个,对B通道一个),这个可以结合上述事例中的旋钮进行理解

每个通道的权重(滤波器参数)是通过训练学习得到的数字,这些数字并不直接代表颜色或亮度,而是模型根据大量数据训练后得出的最优参数,用以提取对任务有用的特征

当卷积核与输入数据在某个位置对齐时,它会对R通道像素乘以R通道权重,对G通道像素乘以G通道权重,对B通道像素乘以B通道权重,然后将这些加起来

这个加权求和过程相当于对每个通道的信息进行加权整合。最终,这个合成值反映了该卷积核在这个位置是否检测到它所“关注”的特定模式(特征)

池化层

池化(Pooling)层通常会对输入特征图进行下采样(subsampling),通过在局部区域(例如2x2的窗口)上选取最大值(Max Pooling)或平均值(Average Pooling),从而减小特征图的大小,同时保留重要特征信息

最大池化计算

平均池化运算 

池化后的特征图分析

  • 4x4的特征图,用2x2的窗口去池化,并且每次移动步幅为2
  • 第一次池化在左上角的2x2区域中取值(无论是最大池化或平均池化),得到一个数值,这会成为输出特征图的(1,1)位置
  • 向右移动2个像素,对右上2x2区域进行池化,得到输出特征图的(1,2)位置
  • 往下移动2个像素再进行同样的操作两次,就得到了输出特征图的第二行

2x2的窗口在4x4的图上移动两次(横纵各两次),自然输出就变成2x2

部分图片以及资料来源:B站UP“炮哥带你学”

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

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

相关文章

HarmonyOS Next 元服务新建到上架全流程

HarmonyOS Next 元服务新建到上架全流程 接上篇 这篇文章的主要目的是介绍元服务从新建到上家的完整流程 在AGC平台上新建一个项目 链接 一个项目可以多个应用 AGC新建一个元服务应用 新建一个本地元服务项目 如果成功在AGC平台上新建过元服务,那么这里会自动显…

Mac/Windows端长期破解myBase8方法(无需安装火绒)

提醒 不管哪个端,都需要先退出myBase。 Mac 进入用户根目录/Users/c0ny100,即下边是Macintosh HD > 用户 > [你的用户名]这个界面然后按ShiftCommond.,显示隐藏文件。找到.Mybase8.ini文件 打开.Mybase8.ini文件,删除Fir…

【网络安全】【Kali Linux】简单ICMP主机探测

一、参考资料 《Python安全攻防——渗透测试实战指南》,吴涛 等编著,机械工业出版社,2021年10月 二、探测原理 ICMP(ping命令) 三、脚本编写 1、导入所需的库: 2、扫描功能函数: 3、主函数…

Oracle进行exp导出密码中有特殊字符报EXP-00056和ORA-12154错处理

今天,业务人员反馈,在本地进行exp导出时报错,报错内容如下: 在Oracle密码中有特殊字符时,需要加引号,但引号怎么加呢?总结如下: 1、在windows系统中 exp 用户名/“““密码”””n…

MVC流程分析

DisaptcherServlet本质是servlet&#xff0c;执行init()方法&#xff0c;自启动底层执行代码&#xff0c; 作用&#xff1a; 1、读取springmvc配置文件&#xff0c;创建Controller对象&#xff0c;放入容器中&#xff0c;map<"id",对象> 2、接收用户请求&#…

fiddler设置抓取https,还抓取不到https如何解决?

一、清楚 C:\Users\Admin\AppData\Roaming\Microsoft\Crypto\RSA 目录下所有文件&#xff08;首次安装fiddler请忽略&#xff09; 二、清除电脑上的根证书&#xff0c;WINR快捷键&#xff0c;输入&#xff1a;certmgr.msc&#xff0c; 然后回车&#xff0c;查找所有fiddler证书…

【知识】总体标准差和样本标准差有什么区别

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 总体标准差和样本标准差之间的区别主要在于它们的计算方式&#xff0c;特别是在分母的选择上。这种差异是因为我们通常在实际应用中并不总是能够得到整…

.NET 9 已发布,您可以这样升级或更新

.NET 9 已经发布&#xff0c;您可能正在考虑更新您的 ASP.NET Core 应用程序。 我们将介绍更新应用程序所需的内容。从更新 Visual Studio 和下载 .NET SDK 到找出可能破坏应用程序的任何重大更改。 下载 .NET 9 SDK 这些是下载 .NET 9 SDK 所需的步骤。 更新 Visual Studi…

【Iot】前端串口serialport.js串口通信库快速入门(附经验总结)

前端串口serialport.js串口通信库快速入门(附经验总结) 一、serialport简介1.1 安装1.2 基本用法1.3 完整示例代码二、问题2.1 数据包被拆分(已解决)2.2 串口返回的多种数据,如何区分类别(待解决)公司项目需要开发一个windows客户端,提供串口modbusRTU数据读取、处理、显…

前端报错npm ERR cb() never called问题

环境使用node版本v14.21.3&#xff0c;npm版本6.14.18 1.问题描述 1.1使用npm install后报错 npm ERR! cb() never called!npm ERR! This is an error with npm itself. Please report this error at: npm ERR! ? ? <https://npm.community>npm ERR! A complete log…

【下】王树森《小红书推荐系统公开课》- 课程笔记(特征交叉、行为序列、重排/推荐系统多样性、物品冷启动、涨指标的方法)

写在前面 本文为王树森老师《小红书推荐系统公开课》的课程笔记 课程来源&#xff1a;ShusenWang的个人空间-ShusenWang个人主页-哔哩哔哩视频 (bilibili.com)课程资料&#xff1a;GitHub - wangshusen/RecommenderSystem 由于篇幅较长&#xff0c;分为【上】【下】两篇文章…

[C++]C++工具之对异常情况的处理(throw、catch、try)以及用命名空间避免同名冲突

一、C 异常处理&#x1f60a; 1.1 定义 C 中的异常处理用于应对程序运行中的异常情况&#xff08;如除零、数组越界等&#xff09;&#xff0c;通过 try-catch 机制捕获和处理错误&#xff0c;防止程序崩溃。 异常是程序运行时意外发生的事件&#xff0c;可以通过抛出&#xf…

Dynamics 365 CRM- 后端

Dynamics 365 CRM 后端插件语法示例 public IPluginExecutionContext context null;//上下文 public IOrganizationServiceFactory serviceFactory null;//组织服务工厂对象 public IOrganizationService service null;//Org服务对象//创建执行上下文 context (IPluginExe…

C语言——实现并求出两个数的最大公约数

问题描述&#xff1a;求出两个数的最大公约数 //求两个数的最大公约数 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> #include<time.h>int main() {int a,b;printf("请您输入两个数 a 和 b\n");scanf…

采用qL-MPC技术进行小型固定翼无人机的路径跟随控制

来自论文"Predictive Path-Following Control for Fixed-Wing UAVs Using the qLMPC Framework in the Presence of Wind Disturbances" 控制架构 采用的是 ULTRA-Extra无人机&#xff0c;相关参数如下&#xff1a; 这里用于guidance law的无人机运动学模型为&#…

三维无人机航迹算法的目标函数如何确定

一、定义目标函数 在三维无人机航迹算法中,目标函数的确定通常基于具体的任务需求和飞行约束。以下是一个简单的例子,展示了如何为三维无人机航迹规划定义一个目标函数。 例子:最小化飞行时间和避障的三维无人机航迹规划 1.任务描述:无人机需要从起点飞到终点,同时避开一些…

《Java核心技术I》Swing用户界面组件

Swing和模型-视图-控制器设计模式 用户界面组件各个组成部分&#xff0c;如按钮&#xff0c;复选框&#xff0c;文本框或复杂的树控件&#xff0c;每个组件都有三个特征&#xff1a; 内容&#xff0c;如按钮的状态&#xff0c;文本域中的文本。外观&#xff0c;颜色&#xff0c…

【Office】Office实现shift+鼠标滚轮左右滑动

Office实现shift鼠标滚轮左右滑动 windows系统安装office之后发现&#xff0c;使用shift鼠标滚轮不能够实现左右滑动&#xff0c;我记得以前的office好像是可以的&#xff0c;然后在网上找了一下&#xff0c;找到了一个插件可以实现这个功能 OfficeScroll插件 下载地址&…

vlan和vlanif

文章目录 1、为什么会有vlan的存在2、vlan(虚拟局域网)1、vlan原理1. 为什么这样划分了2、如何实现不同交换机相同的vlan实现互访呢3、最优化的解决方法&#xff0c;vlan不同交换机4、vlan标签和vlan数据帧 5、vlan实现2、基于vlan的划分方式1、基于接口的vlan划分方式2、基于m…

Web项目图片视频加载缓慢/首屏加载白屏

Web项目图片视频加载缓慢/首屏加载白屏 文章目录 Web项目图片视频加载缓慢/首屏加载白屏一、原因二、 解决方案2.1、 图片和视频的优化2.1.1、压缩图片或视频2.1.2、 选择合适的图片或视频格式2.1.3、 使用图片或视频 CDN 加速2.1.4、Nginx中开启gzip 三、压缩工具推荐 一、原因…