深度学习(1)---卷积神经网络
文章目录
- 一、发展历史
- 1.1 CNN简要说明
- 1.2 猫的视觉实验
- 1.3 新认知机
- 1.4 LeNet-5
- 1.5 AlexNet
- 二、卷积层
- 2.1 图像识别特点
- 2.2 卷积运算
- 2.3 卷积核
- 2.4 填充和步长
- 2.5 卷积计算公式
- 2.6 多通道卷积
- 三、池化层
一、发展历史
1.1 CNN简要说明
1. 卷积神经网络(Convolutional Neural Networks,CNN)是一种专门针对图像领域任务提出的神经网络,它通过多个卷积层和池化层来对输入图像进行特征提取和分类。自2012年以来,卷积神经网络在大部分图像任务中表现出了卓越的性能,例如图像分类、图像分割、目标检测、图像检索等。
2. 卷积神经网络的基本结构包括输入层、卷积层、池化层和全连接层。其中,卷积层负责在输入图像上进行卷积运算,提取局部特征;池化层则用于减小特征图的尺寸,从而减少计算量和避免过拟合;全连接层则用于将前面各层的特征进行组合,产生具有更高级别的特征表示。
3. 卷积神经网络的优点在于:它可以自动提取图像中的特征,不需要手工设计特征;它可以处理高维度的图像输入,具有很强的通用性;同时,卷积神经网络具有较强的鲁棒性和容错性,能够有效地处理噪声和干扰。
1.2 猫的视觉实验
1. 卷积神经网络的发展,最早可以追溯到 1962 年,Hubel 和 Wiesel 对 猫大脑中的视觉系统的研究 。他们首次发现猫的视觉系统中存在层级结构,并且发现了两种重要的细胞simple cells和complex cells,不同类型的细胞承担不同抽象层次的视觉感知功能。
Simple cells和complex cells是视觉皮层中的两种不同类型的细胞。
Simple cells(简单细胞)是视皮层中一种具有简单功能、对视觉刺激产生简单反应的神经元。它们主要接收来自视网膜的信号,对视野中的某种特定特征,如方向、颜色或形状等,产生反应。
与simple cells相比,complex cells(复杂细胞)具有更复杂的功能,能够对更复杂的视觉刺激产生反应。它们不仅能对特定的方向、颜色或形状产生反应,还能对更复杂的视觉信息如运动、纹理等产生反应。
总的来说,视觉皮层中的simple cells和complex cells是两种不同类型的神经元,它们各自具有其特殊的视觉功能和反应机制。
2. 实验过程:(1)在猫脑上打开3mm,插入电极。(2)让猫看各种形状、位置、亮度和运动的光条。(3)观察大脑视觉神经元激活情况。

3. 通过实验得到的一些结论:(1)神经元细胞存在局部感受区域(receptive field),也称为感受野,是神经元对特定刺激产生反应的感受区域。(2)细胞对角度有选择性。(3)细胞对运动方向有选择性。
4. 对CNN的启发:(1)视觉系统是一个分层次和分阶段进行处理的过程,从低级到高级的抽象过程→堆叠使用卷积和池化。(2)神经元细胞实际上是存在局部感受区域的,具体来说它们是局部敏感→神经元局部连接。
1.3 新认知机
1. 在上述实验的启发下,日本科学家福岛邦彦提出了神经认知模型。福岛邦彦说:人类的视觉神经是分层的。首先,物体发出或者反射的光进入眼睛,通过瞳孔晶状体等照射到视网膜上成像,然后视网膜上的感光细胞会将图像转化为神经冲动传递到大脑。

2. 大脑最初接受视觉信号的神经皮层叫做初级皮层V1,它所获得的是一大堆像素点;随后,V1皮层会把处理过的信号传递到V2皮层,V2皮层会得到图像的边缘、方向等信息;V2皮层再次对信号进行处理,进入V3皮层,在这里神经元会获得物体的轮廓、细节等信息…信号经过多个皮层的传递,最终抽象出物体的大量特征,从而做出判断。

3. 日本科学家福岛邦彦于1988年提出的一个卷积神经网络的雏形----新认知机(Neocognitron)该模型采用了基于局部感受野的卷积操作,通过无监督学习进行特征的层次聚类,从而实现了对于输入图像的识别和分类。新认知机是一种八层前馈网络,包括输入层、两个卷积层、两个池化层(下采样层)、两个全连接层和一个输出层。新认知机是卷积神经网络的一个重要基础,后来的卷积神经网络模型,例如LeNet-5和AlexNet等,都采用了类似的结构和设计思路。

1.4 LeNet-5
1. LeNet-5是由Yann LeCun等人于1998年提出的一种卷积神经网络,它是第一个大规模商用的卷积神经网络。LeNet-5在手写邮政编码识别方面取得了显著的成功,并被广泛应用于美国邮政系统。
2. 下图是LeCun在原始论文中的一张结构图。如果不计输入层,该模型共7层,包括2个卷积层,2个池化层,3个全连接层。

3. LeNet5这个网络虽然很小,但是它包含了深度学习的基本模块:卷积层,池化层,全连接层,是其它深度学习模型的基础。
1.5 AlexNet
1. AlexNet是第一个震惊整个计算机视觉领域的卷积神经网络。由亚历克斯·克罗素(Alex Krizhevsky)和团队在2012年提出,并在当年的ImageNet图像分类挑战赛中取得了突破性的成绩,使得卷积神经网络成为计算机视觉领域的热门研究课题。

2. 上图为AlexNet原始的网络结构图,可以发现看起来并不是那么的直观明了。同时,受限于当时GPU缓存的大小,所以当时在训练这一网络时,将其分成了上下两个部分分别在不同的GPU上运算。但是,我们现在就大可不必这样做,直接合并在一起即可。因此,我们可以重新将其画成如下形式:

二、卷积层
2.1 图像识别特点
1. 特征具有局部性。比如老虎头部的 “王字” 只出现在老虎的头部区域。

2. 特征可能出现在图像的任意位置。比如下面这张老虎的图片和上面的图片的特征位置不一样。

3. 下采样图像,不会改变图像的类别和目标。如下面的图片虽然尺寸变了,但是类型和特征不变。

2.2 卷积运算
卷积运算是指从图像的左上角开始,开一个与卷积核同样大小的活动窗口,窗口图像与卷积核像元对应起来相乘再相加,并用计算结果代替窗口中心的像元亮度值。然后,活动窗口向右移动一列,并作同样的运算。以此类推,从左到右、从上到下,即可得到一幅新图像。
2.3 卷积核
1. 卷积核是图像处理时给定输入图像,输入图像中一个小区域中像素加权平均后成为输出图像中的每个对应像素,其中权值由一个函数定义,这个函数称为卷积核。卷积核是一个权矩阵,与使用的图像区域大小相同。
2. 卷积核对图像进行处理之后。相当于对图像进行了特征提取,输出通常成为特征图。
3. 如下面图片中:
- 第一个卷积核是边缘识别类卷积核。这类卷积核的共同特征是:卷积核内所有的值求和为0,这是因为边缘的区域,图像的像素值会发生突变,与这样的卷积核做卷积会得到一个不为0的值。而非边缘的区域,像素值很接近,与这样的卷积核做卷积会得到一个约等于0的值。
- 第二个卷积核是锐利化卷积核。这类卷积核的作用是凸显像素值有变化的区域,使得本来像素值梯度就比较大的区域(边缘区域)变得像素值梯度更大。在边缘检测中,卷积核的设计要求卷积核内的所有值求和为0,这里的要求刚好相反,要求卷积核内的所有值应该不为0,凸显出像素值梯度较大的区域。
- 第三个卷积核是模糊化卷积核。这类卷积核的作用原理是对一片区域内的像素值求平均值,使得像素变化更加平缓,达到模糊化的目的。

4. 案例解析:
import torch
from PIL import Image
import torchvisionimage = Image.open('girl.png').convert('RGB') #导入图片
image_to_tensor = torchvision.transforms.ToTensor() #实例化ToTensor
original_image_tensor = image_to_tensor(image).unsqueeze(0) #把图片转换成tensor#卷积核:prewitt横向
conv_prewitt_h = torch.nn.Conv2d(in_channels=3,out_channels=1,kernel_size=3,padding=0,bias=False) #bias要设定成False,要不然会随机生成bias,每次结果都不一样
conv_prewitt_h.weight.data = torch.tensor([[[[-1,-1,-1],[0,0,0],[1,1,1]],[[-1,-1,-1],[0,0,0],[1,1,1]],[[-1,-1,-1],[0,0,0],[1,1,1]]]], dtype=torch.float32)#卷积核:模糊化
conv_blur = torch.nn.Conv2d(in_channels=3,out_channels=1,kernel_size=5,padding=0,bias=False)
conv_blur.weight.data = torch.full((1,3,5,5),0.04)#卷积核:锐利化
conv_sharp = torch.nn.Conv2d(in_channels=3,out_channels=1,kernel_size=3,padding=0,bias=False)
conv_sharp.weight.data = torch.tensor([[[[-1,-1,1],[-1,-1,-1],[-1,-1,-1]],[[-1,-1,1],[-1,22,-1],[-1,-1,-1]],[[-1,-1,1],[-1,-1,-1],[-1,-1,-1]]]], dtype=torch.float32)#生成并保存图片
tensor_prewitt_h = conv_prewitt_h(original_image_tensor)
torchvision.utils.save_image(tensor_prewitt_h, 'prewitt_h.png')tensor_blur = conv_blur(original_image_tensor)
torchvision.utils.save_image(tensor_blur, 'blur.png')tensor_sharp = conv_sharp(original_image_tensor)
torchvision.utils.save_image(tensor_sharp, 'sharp.png')
(1)原图:

(2)横向边缘卷积后:

(3)锐利化卷积后:

(4)模糊化卷积后:

2.4 填充和步长
1. 填充(Padding):输入图像与卷积核进行卷积后的结果中会损失部分值,输入图像的边缘被“修剪”掉了(边缘处只检测了部分像素点,丢失了图片边界处的众多信息)。这是因为边缘上的像素永远不会位于卷积核中心,而卷积核也没法扩展到边缘区域以外。为解决这个问题,可以在进行卷积操作前,对原矩阵进行边界填充(Padding),也就是在矩阵的边界上填充一些值,以增加矩阵的大小,通常都用“0”来进行填充的。
2. 填充的作用:(1)使卷积后图像分辨率保持不变,方便计算特征图尺寸的变化。(2)弥补边界信息的 “丢失” 问题。


3. 步长(Stride):滑动卷积核时,我们会先从输入的左上角开始,每次往左滑动一列或者往下滑动一行逐一计算输出,我们将每次滑动的行数和列数称为Stride。在之前的图片中,Stride=1;在下图中,Stride=2。

4. Stride的作用是:成倍缩小尺寸,而这个参数的值就是缩小的具体倍数。比如步幅为2,输出就是输入的1/2;步幅为3,输出就是输入的1/3;以此类推。

2.5 卷积计算公式
1. 计算公式:
输入图片的尺寸:一般用n*n表示输入的image大小。
卷积核的大小:一般用 f*f表示卷积核的大小。
填充(Padding):一般用 p来表示填充大小。
步长(Stride):一般用 s来表示步长大小。
输出图片的尺寸:一般用 o来表示。
如果这些都已知,可以求得计算公式如下,其中的符号是向下取整符号,用于结果不是整数时进行向下取整。

2. 举例如下:

2.6 多通道卷积
1. 上述例子都只包含一个输入通道,而实际上大多数输入图像都有 RGB 3个通道。
RGB是一种颜色模型,它代表了红色(R)、绿色(G)和蓝色(B)三种基本颜色的组合。通过调整这三种颜色的强度和亮度,可以创建出各种不同的颜色。在计算机图形学和数字图像处理中,RGB是最常用的颜色表示方法之一。每个颜色通道的取值范围为0-255,表示颜色的强度,通过不同通道的组合可以得到大约1600万种不同的颜色。
通过调整RGB中每个通道的值,可以混合和匹配不同的颜色,从而对图像进行卷积操作。举个例子,假设有一张彩色图片,我们可以使用RGB模式来获取每个像素点的颜色信息,然后通过卷积算法对图像进行处理。
2. 多通道卷积的计算过程如下:
- (1)将卷积核与输入数据的每个通道对应进行点积运算。这涉及到将卷积核的每个元素与输入数据的相应元素相乘,然后将所有乘积相加。
- (2)将步骤(1)中的结果相加,得到卷积的结果。
- (3)将步骤(2)中的结果存储在输出特征图的相应位置。
- (4)通过滑动卷积核并重复步骤(1)到(3),直到遍历输入数据的所有位置,从而计算输出特征图的所有值。
3. 下面这些图片可以帮助理解上面的过程:




三、池化层
1. 池化:一个像素表示一块区域的像素值,降低图像的分辨率。
2. 池化层:池化层是深度学习中常用的一种层级结构,它可以对输入数据进行降采样,减少数据量,同时保留重要的特征信息。池化层通常紧跟在卷积层之后,可以有效地减少数据量和计算复杂度,提高模型的训练速度和泛化能力。
3. 池化层的结构与卷积层类似,它也由多个滤波器组成,每个滤波器对输入数据进行卷积操作,得到一个输出特征图。不同的是,池化层的卷积操作通常不使用权重参数,而是使用一种固定的池化函数,例如最大池化、平均池化等。

4. 池化层的作用:(1)缓解卷积层对位置的过度敏感。(2)减少冗余,降低图像的分辨率,从而减少参数量。

5. 池化层的分类:最大池化(max pooling)、平均池化(average pooling)、重叠池化(OverlappingPooling)、空金字塔池化(Spatial Pyramid Pooling)。
- 最大池化(max pooling):选图像区域的最大值作为该区域池化后的值。
- 平均池化(average pooling):计算图像区域的平均值作为该区域池化后的值。
- 重叠池化(OverlappingPooling):相邻池化窗口之间有重叠区域,此时一般sizeX > stride。
- 空金字塔池化(Spatial Pyramid Pooling):将一个pooling变成了多个scale的pooling,用不同大小池化窗口作用于上层的卷积特征。
6. 如下图是一个最大池化和平均池化:


相关文章:
深度学习(1)---卷积神经网络
文章目录 一、发展历史1.1 CNN简要说明1.2 猫的视觉实验1.3 新认知机1.4 LeNet-51.5 AlexNet 二、卷积层2.1 图像识别特点2.2 卷积运算2.3 卷积核2.4 填充和步长2.5 卷积计算公式2.6 多通道卷积 三、池化层 一、发展历史 1.1 CNN简要说明 1. 卷积神经网络(Convolut…...
探索社会工程的深度:从定义到高级攻击策略
在广阔的网络安全领域,社会工程作为一种微妙的威胁而出现,它利用人类的漏洞来访问敏感信息或实施欺诈。网络安全背景下的社会工程的定义很明确:它包括使用欺骗手段操纵个人泄露机密或个人信息,然后将这些信息用于欺诈目的。 此类…...
CTF 入门指南:从零开始学习网络安全竞赛
文章目录 写在前面CTF 简介和背景CTF 赛题类型介绍CTF 技能和工具准备好书推荐 写作末尾 写在前面 CTF比赛是快速提升网络安全实战技能的重要途径,已成为各个行业选拔网络安全人才的通用方法。但是,本书作者在从事CTF培训的过程中,发现存在几…...
Spring整合第三方框架
目录 Spring整合第三方框架 加载外部properties文件 自定义命名空间解析原理 自定义命名空间总结和案例需求 总结 案例 Spring整合第三方框架 加载外部properties文件 Spring整合第三方框架不像MyBatis那么简单了,例如Dubbo框架在与Spring框架整合时…...
Linux Shell 无vi获取文件某行指定内容和修改某行指定内容
注意:操作之前一定要先备份!!!一定要先备份!!!一定要先备份!!! 1. 获取某配置文件中某一行某项的值 cat /sshd_config |grep "PermitRootLogin" …...
在EXCEL中构建加载项之创建加载项的目的及规范要求
【分享成果,随喜正能量】一句南无阿弥陀佛,本是释迦牟尼佛所证的无上正等正觉法,洒在娑婆世界的众生海中,只为末世众生能够以信愿之心抓住此救命稻草,要知道今世人此生的处境,可能只剩这道要么极乐要么三涂…...
Hive【Hive(三)查询语句】
前言 今天是中秋节,早上七点就醒了,干啥呢,大一开学后空教室紧缺,还不趁着假期来学校等啥呢。顺便偷偷许个愿吧,希望在明年的这个时候,秋招不知道赶不赶得上,我希望拿几个国奖,蓝桥杯…...
商场做小程序商城的作用是什么?
商场是众多商家聚集在一起的购物公共场所,大商场也往往入驻着众多行业商家,是每个城市重要的组成部分。 随着互联网电商深入及客户消费行为改变,不少商场如今的客流量非常有限,甚至可以说是员工比客人多,这就导致撤店…...
XPD738协议系列-USB Type-C PD 和 Type-A 双口控制器
产品描述: XPD738 是一款集成 USB Type-C、USB Power Delivery(PD)2.0/3.0 以及 PPS、QC3.0/QC3.0/QC2.0 快充协议、华为 FCP/SCP/HVSCP 快充协议、三星 AFC 快充协议、BC1.2 DCP 以及苹果设备 2.4A 充电规范的多功能 USB Type-C 和 Type-A …...
【面试八股】IP协议八股
IP协议八股 子网掩码的作用为什么IP协议需要分片IP协议什么时候需要分片IP协议是怎么进行分片的那么IP协议是如果进行标识属于同一个分片呢?TCP协议和UDP协议将数据交给IP协议之后,是否需要分片传输? 子网掩码的作用 用来标识网络号和主机号…...
【冰糖R语言】创建R包(打包R程序)
目标:将现有R程序打包 可能涉及知识点:devtools包、usethis包、Rstudio软件 一、R包的类型 通常一个R包中包含以下元素: 1)R文件夹:函数代码 2)man文件夹:存放每个函数的注释文件 3&#x…...
照片后期处理软件DxO FilmPack 6 mac中文说明
DxO FilmPack 6 for Mac是一款照片后期处理软件。它可以模拟超过60种著名胶片品牌和类型的色彩和颗粒感,使照片具有复古、艺术和时尚风格。 DxO FilmPack 6 mac支持RAW和JPG格式的照片,并提供丰富的调整选项,如亮度、对比度、曝光、阴影和高…...
51单片机音乐闹钟秒表倒计时整点报时多功能电子钟万年历数码管显示( proteus仿真+程序+原理图+报告+讲解视频)
51单片机音乐闹钟秒表倒计时整点报时多功能电子钟万年历数码管显示( proteus仿真程序原理图报告讲解视频) 讲解视频1.主要功能:2.仿真3. 程序代码4.原理图5. 设计报告6. 设计资料内容清单 51单片机音乐闹钟秒表倒计时整点报时多功能电子钟万年历数码管显…...
Scala第九章节
Scala第九章节 scala总目录 章节目标 理解包的相关内容掌握样例类, 样例对象的使用掌握计算器案例 1. 包 实际开发中, 我们肯定会遇到同名的类, 例如: 两个Person类. 那在不改变类名的情况下, 如何区分它们呢? 这就要使用到包(package)了. 1.1 简介 包就是文件夹, 用关…...
arduino - UNO-R3,mega2560-R3,NUCLEO-H723ZG的arduino引脚定义区别
文章目录 arduino - UNO-R3,mega2560-R3,NUCLEO-H723ZG的引脚定义区别概述笔记NUCLEO-H723ZGmega2560-R3UNO-R3经过比对, 这2个板子(NUCLEO-H723ZG, mega2560-R3)都是和UNO-R3的arduino引脚定义一样的.mega2560-r3和NUCLEO-H723ZG的区别补充arduino uno r3的纯数字IO和模拟IO作…...
提取多个txt数据并合成excel——例子:与中国建交的国家
提取多个txt数据并合成excel——例子:与中国建交的国家 一、概要二、整体架构流程三、完整代码 一、概要 这段代码主要执行以下任务: 1. 定义辅助函数:首先,定义了两个辅助函数。has_chinese_chars函数用于检查给定的字符串中是否…...
uni-app:js修改元素样式(宽度、外边距)
效果 代码 1、在<view>元素上添加一个ref属性,用于在JavaScript代码中获取对该元素的引用:<view ref"myView" id"mybox"></view> 2、获取元素引用 :const viewElement this.$refs.myView.$el; 3、修改…...
day36-单元测试
1. 单元测试Junit 1.1 什么是单元测试?(掌握) 对部分代码进行测试。 1.2 Junit的特点?(掌握) 是一个第三方的工具。(把别人写的代码导入项目中)(专业叫法:…...
7、脏话检测
6、片花关联长视频 脏话检测功能本身远不如上一篇介绍的片花关联长视频有技术挑战性,不过还是值得说说,因为这是我们采用技术方式提高工作效率的第一次尝试。 游戏解说是审核难度比较大的一类短视频内容,一方面是时间比较长,很多…...
Godot信号教程(使用C#语言)| 创建自定义信号 | 发出自定义信号 | 使用代码监听信号
文章目录 信号是什么连接信号使用编辑器连接信号使用代码连接信号Lambda 自定义信号声明信号发射信号带参数的信号 其他文章 信号是什么 在Godot游戏引擎中,信号是一种用于对象之间通信的重要机制。它允许一个对象发出信号,而其他对象可以连接到这个信号…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
