《深度学习》卷积神经网络CNN 原理及其流程解析

news2024/9/22 23:40:30

目录

一、CNN图像原理

1、了解图像的原理

2、举例

二、CNN图像识别

1、画面不变性

2、主要表现

        1)平移不变性

        2)尺度不变性

        3)旋转不变性

3、传统神经网络识别

        1)数据预处理

        2)特征提取

        3)搭建神经网络模型

        4)模型训练

        5)模型评估和预测

        6)缺点

4、卷积神经网络识别图片

        1)如何识别稍微变形的图片

        2)什么是卷积核

        3)操作方式

        4)举例

        5)卷积操作存在的问题

三、卷积神经网络原理

1、图片经过卷积核处理后的样子

2、卷积神经网络的系统

3、卷积层计算结果

4、池化层Pooling

        1)作用

        2)常见的池化层

        3)池化层操作方法

        4)最大池化的原理分析

5、全连接层

6、感受野

7、卷积神经网络的多种模型


一、CNN图像原理

1、了解图像的原理

        在深度学习中,通过神经网络模拟人脑的工作方式来处理分析图像数据

        图像在计算机中是一堆按顺序排列的数字,数值为0到255。0表示最暗,255表示最亮,每个数字代表像素点的亮度或颜色值。这些数字矩阵被输入到神经网络中进行处理和学习。神经网络由多个层组成,每一层都包含一些神经元,这些神经元通过学习从输入数据中提取特征。

2、举例

        例如上述的一张图片,为只有黑色和白色的灰度图,每个小方块代表一个像素点,每个像素点上有其对应的像素值,像素值的大小决定像素的明暗程度。

        大多数图片表达方式都是RGB的颜色模型,可表示为红(red)、绿(green)、蓝(blue)三种颜色,即一张图片由红、绿、蓝三原色的色光以不同的比例相加,以产生多种多样的色光,RGB颜色模型中,单个矩阵就扩展成了有序排列的三个矩阵,也可以用三维张量去理解。 其中的每一个矩阵又叫这个图片的一个channel(通道),宽, 高, 深来描述。

二、CNN图像识别

1、画面不变性

        知道一个物体不管在画面左侧还是右侧,都会被识别为同一物体,这一特点就是不变性,例如有一张图片想要使用卷积神经网络训练并识别它,那么就要让他经历位置的旋转、移动、颜色的各种变化等等,对这些图片进行训练然后去识别,能够正确识别即可表示为图像不变性。

2、主要表现

        1)平移不变性

                CNN对于图像中物体的平移(即位置的改变)具有一定的不变性。即使物体在图像中移动了一些,CNN仍然能够正确地识别它。这是因为CNN中的卷积层对输入图像的局部区域进行特征提取,并且在后续的池化层中进行降采样,所以即使物体移动了一点,某些特征仍然能够被正确检测到。

        2)尺度不变性

                CNN对于图像中物体的尺度(即大小的改变)具有一定的不变性。即使物体的大小发生变化,CNN仍然能够正确地识别它。这是因为在卷积层中使用的滤波器是局部感知场,可以检测到物体的不同尺度的特征。

        3)旋转不变性

                CNN对于图像中物体的旋转具有一定的不变性。即使物体发生了旋转,CNN仍然能够正确地识别它。这是因为卷积层中的滤波器能够检测到旋转不变的特征,例如边缘和纹理。

3、传统神经网络识别

        1)数据预处理

                首先,将图像数据进行预处理,包括缩放、裁剪、归一化等操作。这些操作有助于提高模型的鲁棒性和减少计算负担。

        2)特征提取

                将预处理后的图像数据转化为向量形式。通常使用特征提取方法,如边缘检测、颜色分布等,将图像转化为有意义的特征向量。这些特征向量可以直接作为输入数据供神经网络处理。

        3)搭建神经网络模型

                定义一个前馈神经网络模型。前馈神经网络由输入层、隐藏层和输出层组成。隐藏层可以包含多个层,每个层包含多个神经元。每个神经元通过权重激活函数将上一层的输出传递给下一层。

        4)模型训练

                使用带有标记的训练数据集对神经网络模型进行训练。在训练过程中,通过反向传播算法计算模型参数的梯度,并使用优化算法(如随机梯度下降)更新模型参数,以使模型能够更好地拟合训练数据。

        5)模型评估和预测

                使用带有标记的测试数据集对训练好的模型进行评估。通过计算模型在测试数据上的准确率、精确率、召回率等指标,可以评估模型的性能和泛化能力。对于新的未知图像,将其输入训练好的模型中,通过前向传播算法计算模型的输出。输出通常是一个概率分布,表示图像属于各个类别的概率。可以选择概率最高的类别作为图像的分类结果。

        6)缺点

                传统神经网络在图像识别任务上的性能可能相对较弱,因为它往往难以自动地提取和学习到更高级别、更抽象的特征表示。

                最好的解决办法就是用大量物体位于不同位置的数据训练,同时增加网络的隐藏层个数从而扩大网络学习这些变体的能力。

        

4、卷积神经网络识别图片

        1)如何识别稍微变形的图片

                有上述一个标准的X图片(左侧),如何才能识别略微变形的图片X(右侧),此时可以利用一个卷积核来不停地扫描整幅原始图片中的部分内容,将图片一块一块的取出,得到原始图片的数据信息,然后再将待测试的图片以同样的方式取出,比对两幅图像中的构造来判断结果,例如下图所示:

        2)什么是卷积核

                卷积核也称为滤波器特征检测器,在CNN中,卷积核是一个小的矩阵张量,它通过与输入的图像进行卷积操作提取图像中的特征。卷积操作可以看作是将卷积核与输入数据的某一部分进行点积运算,然后将结果相加得到一个输出值。

                卷积核的大小通常是正方形的,并且由多个通道组成,其中每个通道对应一个特征。例如,可以有一个大小为3x3x3的卷积核,其中3x3表示卷积核的空间大小,3表示输入图像的通道数。

        3)操作方式

        即首先有一张图片,然后设置一个卷积核,将这个卷积核顺序对应图片的每一个位置,将然后使其进行点乘,将相乘的结果求和得到一个值即为卷积后图片的像素点的像素值,最终内积完得到一个结果叫特征图。

        4)举例

                对于一张彩色图像,其由三个通道的颜色构成,所以对其进行卷积操作的时候也是需要使用一个卷积核分别对每个通道的图片进行内积操作,每张图片中的一个部位和卷积核相乘后求和得到一个值,然后再将三个通道相乘得到的值相加即可得到卷积后的单个像素值,如下所示:

                一个卷积核肯定难以完全的到所有图片的数据信息,所以有了第二个卷积核,甚至更多的卷积核使用同样的操作,再次得到一个新的卷积后的结果,多个卷积核做内积后得到多个结果即可表示为该图片的多个特征,即为多个特征图。

        5)卷积操作存在的问题

                a. 步长stride:卷积核每次滑动的位置步长。

                b. 卷积核的个数:决定输出的depth厚度。同时代表卷积核的个数

                c. 填充值zero-padding:在外围边缘补充若干圈0,方便从初始位置以步长为单位可以刚好滑倒末尾位置,通俗地讲就是为了总长能被步长整除。

        上图表示为,数据窗口每次移动两个步长3*3的局部数据,即stride=2 两组神经元卷积核),即depth=2,意味着有两个滤波器, zero-padding=1

三、卷积神经网络原理

1、图片经过卷积核处理后的样子

        不同的卷积核处理完得到的结果不同,但是结果的轮廓一样。

2、卷积神经网络的系统

        CNN的系统结构包括多个层级,一般包括输入层、卷积层、池化层、全连接层和输出层。

        输入层:接收原始图像作为输入。

        卷积层:通过应用卷积核对输入图像进行卷积操作,提取图像的特征。每个卷积层可以包含多个卷积核,每个卷积核负责提取不同的特征。

        激活函数层:通过应用非线性的激活函数(如ReLU)来引入非线性变换,增强网络的表达能力。

        池化层:通过减少空间维度降低特征图的大小,同时保留主要的特征。常用的池化操作包括最大池化和平均池化。

        全连接层:将池化层的输出连接到一个或多个全连接层,进行全局特征关联,提取更高级别的特征。

        输出层:最后一个全连接层通常是一个softmax层,用于输出模型的预测结果。

        通过反向传播算法,CNN可以从标记的训练数据中学习到最优的网络参数,以便能够准确地识别和分类图像。

3、卷积层计算结果

        有一张图片经过卷积核处理后得到一个特征图,原图的宽度为W1,高度为H1,卷积核的长度为FH,宽度为FW,卷积核滑动的步长为S,图片边界填充的层数为P,求处理完的特征图的长度H2,宽度W2,有如下公式即可表达:

例如:

        输入数据为32*32*3的图像(3表示3个通道,三张图片),用10个5*5*3的卷积核来进行操作,步长为1,边界0填充为2,最终输出结果为?

        (32-5+2*2)/1 +1 =32,输出规模为32*32*10的特征图

(此处可记住一个值5 1 2,表示为卷积核个数为5,步长为1,填充层数为2,输入图片和输出图片大小一致)

4、池化层Pooling

        1)作用

                池化层是一种降采样减小数据的空间大小,因此参数的数量和计算量也会下降,这在一定程度上也控制了过拟合

        2)常见的池化层

                平均池化(average pooling):计算图像区域的平均值作为该区域池化后的值。

                最大池化(max pooling):选图像区域的最大值作为该区域池化后的值。是最为常见的。

                全局平均池化、全局最大池化。

        3)池化层操作方法

                与卷积层类似,池化层运算符由一个固定形状的窗口组成,该窗口根据其步幅大小在输入的所有区域上滑动,为固定形状窗口(有时称为 池化窗口)遍历的每个位置计算一个输出。 然而,不同于卷积层中的输入与卷积核之间的互相关计算,池化层不包含参数。

                如下所示为最大池化,窗口大小为2*2,步长为2

                通常来说,CNN的卷积层之间都会周期性地插入池化层。

        4)最大池化的原理分析

                如图所示,首先对一幅图像做卷积处理,然后得到的结果做最大池化得到一个值3,然后对特征相同位置不同的另外几幅图像分别作卷积以及池化处理,最终得到的结果同样是相同的,此时即可发现图像特征的位置不影响结果

5、全连接层

        当抓取到足以用来识别图片的特征后,接下来的就是如何进行分类。 全连接层(也叫前馈层)就可以用来将最后的输出映射到线性可分的空间。 通常卷积网络的最后会将末端得到的长方体平摊(flatten)成一个长长的向量,并送入全连接层配合输出层进行分类。

6、感受野

        感受野(receptive field)是指卷积层中一个神经元(或滤波器)对输入层的区域的感知范围。换句话说,它表示了一个神经元能够"看到"的输入数据的局部区域,其大小取决于神经网络的结构,具体而言,它取决于卷积层的滤波器大小、步幅和填充方式。

        例如,一个卷积神经网络的第一个卷积层,滤波器大小为3x3,步幅为1,没有填充。在这种情况下,一个神经元的感受野将是3x3的局部区域。如果有多个卷积层堆叠在一起,每一层都应用相同的滤波器大小和步幅,那么随着网络的深度增加,感受野也将逐渐增大。

        较小的感受野能够捕捉到输入数据的细节和局部特征,而较大的感受野则能够捕捉到更宽范围的上下文信息和全局特征。

7、卷积神经网络的多种模型

        LeNet:第一个成功的卷积神经网络应用

        AlexNet:类似LeNet,但更深更大。使用了层叠的卷积层来抓取特征(通常是一个卷积层马上一个max pooling层)

        ZF Net:增加了中间卷积层的尺寸,让第一层的stride和filter size更小。

        GoogLeNet:减少parameters数量,最后一层用max pooling层代替了全连接层,更重要的是Inception-v4模块的使用。

        VGGNet:只使用3x3 卷积层和2x2 pooling层从头到尾堆叠。

        ResNet:引入了跨层连接和batch normalization。

        DenseNet:将跨层连接从头进行到尾。

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

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

相关文章

C++基础(8.继承_多态)

目录 继承: 继承的概念: 继承的定义: 基类和派生类对象赋值转换 : 继承中的作用域: 派生类的默认成员函数: 例题: ​编辑​编辑​编辑 继承与友元: 继承与静态成员&#xff1…

图片马赛克处理(Java)

1.需求 给图片的指定区域打码给整张图片打码马赛克方格取色支持中心点取色和随机取色马赛克支持灰度处理 2.源码 package com.visy.utils;import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOE…

Rabbitmq消息队列,安装,使用,三种工作模式

产品 消息队列技术介绍 消息队列概述 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合、异步消息、流量削锋等问题。实现高性能、高可用、可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。 目前在生产环境,使用较多的消息队列有…

基于51单片机的汽车倒车防撞报警器系统

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 本课题基于微控制器控制器, 设计一款汽车倒车防撞报警器系统。 要求: 要求:1.配有距离, 用于把车和障碍物之间的距离信号送入控制器。 2.配有报警系…

2024AI做PPT软件如何重塑演示文稿的创作

现在AI技术的发展已经可以帮我们写作、绘画,最近我发现了不少ai做ppt的工具!不体验不知道,原来合理使用AI工具可以有效的帮我们进行一些办公文件的编写,提高了不少工作效率。如果你也有这方面的需求就接着往下看吧。 1.笔灵AIPPT…

内网穿透out了?黑群晖+IPv6+NAS公网助手的访问体验

科技宅最带折腾黑群晖,这不,尝试一下ipv6动态域名解析,远程访问群晖NAS的方法千千万,这个方法我早就想到了,今天终于体验了一把,把经验分享一下: 目录 黑群晖的魅力 IPv6的加入:无…

Python办公自动化教程(003):PDF的加密

【1】代码 from PyPDF2 import PdfReader, PdfWriter# 读取PDF文件 pdf_reader PdfReader(./file/Python教程_1.pdf) pdf_writer PdfWriter()# 对第1页进行加密 page pdf_reader.pages[0]pdf_writer.add_page(page) # 设置密码 pdf_writer.encrypt(3535)with open(./file/P…

上位机图像处理和嵌入式模块部署(linux小系统开发)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 和若干年前相比较,现在嵌入式linux开发要简单得多。稍微贵一点的有树莓派,国产的有各种水果派,基本上都可以按照…

苍穹外卖学习日志 -----20天项目从零到完结-----含软件下载,环境配置,框架学习,代码编写,报错处理,测试联调,每日总结,心路历程等等......

年份 2024 基础:Javase Javaweb 已完结 2024 8.25---9.14 20天 Day-01 8.25 今天开始学习已经晚了,网盘下载了一下文件,做了一些开始项目的准备工作。 本来其实打算用notepad来写学习日志的,但是那个传…

如何给bat文件替换好看的图标

最近遇到软件运行在Windows系统,通过bat文件启动,但是bat文件的图标不好看,而且作为启动快捷方式放桌面看上去跟其他软件不搭调,于是得给bat文件换个软件图标。 软件ico图标 Windows系统下使用.ico文件作为软件图标。另外favicon…

go libreoffice word 转pdf

一、main.go 关键代码 完整代码 package mainimport ("fmt""github.com/jmoiron/sqlx""github.com/tealeg/xlsx""log""os/exec""path/filepath" ) import _ "github.com/go-sql-driver/mysql"import &q…

Python练习宝典:Day 1 - 选择题 - 基础知识

目录 一、踏上Python之旅二、Python语言基础三、流程控制语句四、序列的应用 一、踏上Python之旅 1.想要输出 I Love Python,应该使用()函数。 A.printf() B.print() C.println() D.Print()2.Python安装成功的标志是在控制台(终端)输入python/python3后,命令提示符变为: A.&…

数业智能心大陆:职场倦怠的新解法

什么是职业倦怠? 在职场中,职业倦怠的表现形式丰富多样。从数业智能心大陆 AI 心理咨询平台的数据来看,职业倦怠呈现出多种状态。教师可能对教学不再满怀热情,精心备课也成为过去式;情绪上容易烦躁、易怒,在…

【d47_2】【Java】【力扣】1791.找出星型图的中心节点

思路 直接判断 edges[0][0] edges[0][1] edges[1][0] edges[1][1] 谁重复了 例如&#xff1a; [ [1,2] [2,3] ....],那么中心节点一定是2 代码 class Solution {public int findCenter(int[][] edges) {for (int i0;i<1;i){if (edges[1][0]edges[0][i]) {return edg…

车载软件调试工具系列---Trace32简介UI界面简介

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

java项目之常规应急物资管理系统(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的常规应急物资管理系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息。 项目简介&#xff1a; 基于SpringBootVue的…

TikTok流量不佳:是网络环境选择不当还是其他原因?

TikTok&#xff0c;作为全球短视频社交平台的佼佼者&#xff0c;每天都有海量的内容被上传和分享。然而&#xff0c;很多用户和内容创作者发现&#xff0c;他们的TikTok视频流量并不理想。这引发了一个问题&#xff1a;TikTok流量不佳&#xff0c;是因为网络环境选择不当&#…

S3C2440定时器

ee一、构造 二、设置相关位 1、MPLLCON寄存器&#xff08;配置MPLL寄存器&#xff0c;进行倍频&#xff09; 根据下列表格的想要输出的频率进行选择&#xff0c;选择完毕之后&#xff0c;对该寄存器进行设置 2、时钟分频控制&#xff08;CLKDIVN&#xff09;寄存器 根据不…

AD19基础应用技巧:交叉选择/跳转到器件/镜像粘贴/元器件矩形区域排列/选择过滤器/捕捉对象等设置

目录 1. 原理图<>PCB跳转2. 镜像粘贴3. 矩形区域排列4.选择过滤器5. 捕捉的对象Object for Snapping的设置 6.Grids/Guides/Axes1. **Grids&#xff08;网格&#xff09;**2. **Guides&#xff08;参考线&#xff09;**3. **Axes&#xff08;坐标轴&#xff09;**捕捉模式…

基于python的文本聚类分析与可视化实现,使用kmeans聚类,手肘法分析

1、数据预处理 由于在数据分析之前数据集通常都存在数据重复、脏数据等问题&#xff0c;所以为了提高 数据分析结果的质量&#xff0c;在应用之前就必须对数据集进行数据预处理。数据预处理的方法通常有清洗、集成、转换、规约这四个方面&#xff0c;接下来详细介绍这对爬取…