深度学习(1)---卷积神经网络(CNN)

文章目录

  • 一、发展历史
    • 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. 如下图是一个最大池化和平均池化:

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

基于SSM的公司项目管理系统设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

java复习回顾

文章目录 0 开发工具1. 对象和类、三大特性2. 成员/实例变量和实例变量(this关键字)3. 方法重载overload4. 构造方法和this关键字5. 继承6. 访问修饰符7. 方法重写8. 继承下的构造执行9. 多态9.1 向上转型9.2 向下转型9.3 多态的应用 0 开发工具 Maven是…

Acwing 907. 区间覆盖

Acwing 907. 区间覆盖 知识点题目描述思路讲解代码展示 知识点 贪心 题目描述 思路讲解 代码展示 #include <iostream> #include <algorithm>using namespace std;const int N 100010;int n;struct Range {int l, r;bool operator < (const Range &W) …

分页前后端完整代码

一、后端代码 User实体类要继承PageVo package com.like.entity;import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.like.common.PageVo; import…

借助ChatGPT的神奇力量,解锁AI无限可能!

&#x1f680;欢迎来到本文&#x1f680; &#x1f349;个人简介&#xff1a;陈童学哦&#xff0c;目前学习C/C、算法、Python、Java等方向&#xff0c;一个正在慢慢前行的普通人。 &#x1f3c0;系列专栏&#xff1a;陈童学的日记 &#x1f4a1;其他专栏&#xff1a;CSTL&…

计算机毕业设计 基于SSM的宿舍管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

时间序列-AR模型与MA模型的原理与实现

文章目录 1 自回归模型AR Model1.1 自回归模型 vs 多元线性回归模型1.1.1 线性回归1.1.2 AR(1)模型1.1.3 AR(p)模型 1.2 AR建模问题 2 移动平均模型 MA Model2.1 MA模型的数学表示2.1.1 MA(1)模型2.2.2 MA(q)模型 2.2 MA建模问题 ARIMA模型是AR模型&#xff08;自回归模型&…

使用 Python 给 PDF 添加目录书签

0、库的选择——pypdf 原因&#xff1a;Python Version Support Python 3.11 3.10 3.9 3.8 3.7 3.6 2.7 pypdf>3.0 YES YES YES YES YES YES PyPDF2>2.0 YES YES YES YES YES YES PyPDF2 1.20.0 - 1.28.4 YES YES YES YES YES YES P…

91、Redis - 事务 与 订阅-发布 相关的命令 及 演示

★ 事务相关的命令 Redis事务保证事务内的多条命令会按顺序作为整体执行&#xff0c;其他客户端发出的请求绝不可能被插入到事务处理的中间&#xff0c; 这样可以保证事务内所有命令作为一个隔离操作被执行。 Redis事务同样具有原子性&#xff0c;事务内所有命令要么全部被执…

年度顶级赛事来袭:2023 CCF大数据与计算智能大赛首批赛题上线!

久等了&#xff01; 大数据与人工智能领域年度顶级盛事——2023 CCF大数据与计算智能大赛——首批赛题已上线&#xff0c;大赛火力全开&#xff0c;只等你来挑战&#xff01; 大赛介绍 CCF大数据与计算智能大赛&#xff08;CCF Big Data & Computing Intelligence Contes…

深入学习git

1、git原理及整体架构图 一些常用的命令 git add . 或 git add src/com/ygl/hello/hello.java 指定文件 git commit . 或 git commit src/com/ygl/hello/hello.java 指定文件 git push origin 分支名称 2、git stash的应用场景 场景一&#xff1a;你正在当前分支A开发&…

多目标平衡黏菌算法(MOEOSMA)求解八个现实世界受约束的工程问题

目录 1 受约束的工程问题 1.1 减速器设计问题(Speed reducer design problem) 1.2 弹簧设计问题(Spring design problem) 1.3 静压推力轴承设计问题(Hydrostatic thrust bearing design problem) 1.4 振动平台设计问题(Vibrating platform design problem) 1.5 汽车侧面碰…

云安全【阿里云ECS攻防】

关于VPC的概念还请看&#xff1a;记录一下弹性计算云服务的一些词汇概念 - 火线 Zone-安全攻防社区 一、初始化访问 1、元数据 1.1、SSRF导致读取元数据 如果管理员给ECS配置了RAM角色&#xff0c;那么就可以获得临时凭证 如果配置RAM角色 在获取ram临时凭证的时候&#xff…

铁道货车通用技术条件

声明 本文是学习GB-T 5600-2018 铁道货车通用技术条件. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 90 mm90 mm。 B.2 制造要求 B.2.1 车体钢结构组成后&#xff1a; a) 敞车钢质侧、端板的平面度公差应小于或等于15 mm/m; 压型侧、端板的平面度…

python生成中金所期权行权价

参考沪深300股指期权的合约表&#xff0c;写一个工具函数&#xff1a; 使用方法 def get_format_option_gap(value: float, deviation: int 0): # 根据中证1000指数获取点位"""根据标准的行权价&#xff0c;生成不同档位的期权列表&#xff0c;适合中金所:…

[红明谷CTF 2021]write_shell %09绕过过滤空格 ``执行

目录 1.正常短标签 2.短标签配合内联执行 看看代码 <?php error_reporting(0); highlight_file(__FILE__); function check($input){if(preg_match("/| |_|php|;|~|\\^|\\|eval|{|}/i",$input)){ 过滤了 木马类型的东西// if(preg_match("/| |_||php/&quo…

最新AI智能创作系统源码V2.6.2/AI绘画系统/支持GPT联网提问/支持Prompt应用

一、AI创作系统 SparkAi创作系统是基于国外很火的ChatGPT进行开发的AI智能问答系统和AI绘画系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图…

验证曲线(validation_curve)项目实战

验证曲线 validation_curve 一、简介 validation_curve验证曲线&#xff0c;可确定不同参数值下的训练和测试分数 根据指定参数的不同值计算估计器的得分 这与使用一个参数的网格搜索类似。不过&#xff0c;这也会计算训练得分&#xff0c;只是一个用于绘制结果的工具。 二、…

【AI视野·今日Robot 机器人论文速览 第四十五期】Mon, 2 Oct 2023

AI视野今日CS.Robotics 机器人学论文速览 Mon, 2 Oct 2023 Totally 42 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers Learning Decentralized Flocking Controllers with Spatio-Temporal Graph Neural Network Authors Siji Chen, Yanshen Sun, …

R语言中更改R包安装路径

看到这些包下载到我的C盘&#xff0c;我蛮不爽的&#xff1a; 所以决定毫不犹豫的改到D盘&#xff1a; 首先&#xff0c;我们需要在RStudio中新建一个初始启动文件&#xff1a; file.edit(~/.Rprofile) 然后去你喜欢的环境新建一个文件夹存放安装的包的位置&#xff0c;我喜欢…