卷积神经网络

目录

注意:有参数计算的才叫层

1.应用

1.1分类和检索

1.2超分辨率重构

1.3医学任务

1.4无人驾驶

1.5人脸识别

2.卷积

2.1卷积神经网络和传统网络的区别

2.2整体框架

2.3理解卷积(重点)

2.4为何要进行多层卷积

2.5卷积核的参数

2.6参数共享

2.7池化层

2.8整体结构

2.9VGG

2.10残差网络resnet

2.11感受野

参考文献


注意:有参数计算的才叫层

1.应用

1.1分类和检索

分类:简单理解为识别一张图片是狗还是猫。

检索:已经识别出一张图片是个狗,同时把是像狗(是狗)的图片都找出来。

1.2超分辨率重构

定义:就是把一张不清晰的图片变成一张清晰的图片

1.3医学任务

 细胞检测等

1.4无人驾驶

1.5人脸识别

2.卷积

2.1卷积神经网络和传统网络的区别

用下图简述:下图左侧为全连接层的神经网络,也是多层感知机的概念,下图右侧是卷积神经网络。当输入一个28×28×1的图片时,传统神经网络会将像素拉成一列,作为输入,而卷积神经网络,则是按照28×28×1的三维特征作为输入。

2.2整体框架

以下图为例简述

         输入层:28×28×1像素的图片

         卷积层:提取特征

         池化层:压缩特征

         全连接层:得到10种分类的概率

2.3理解卷积(重点)

以下图为例简述:首先我们看下图中间的红色框,假设他是一张图片,框中红色的圆圈是猫脸,蓝色框圈起来的是眼和嘴,假设这种图片32×32×3,我们希望能有效提取特征,不同的特征在不同的区域,比方说眼和嘴巴在不同的区域,猫和猫周围的环境也在不同的区域,所以为了提高效率,我们希望能按照区域提取特征,或者说得到嘴和眼睛等的有效特征,所以我们直接按照区域提取特征,比方说用一个5×5×3的卷积在图片中去提取嘴和眼睛的特征,区域的可以简单理解为下图左侧标记的1,2,3...等。

进一步我们用下图理解利用卷积时权重用在什么地方:假设输入是5×5×1的图片(蓝色区域),卷积是3×3×1的核,那么在第一个区域输入为x1,权重为w1(蓝色区域右下角的小标),输出为12,而12就代表该区域的特征,如果该区域是猫的嘴巴,那么12就属于嘴巴的特征。 

用下图进一步理解卷积的过程:首先我们要理解一个彩色图像在计算机中由RGB三张图组合在一起,才显示为彩色,假设输入为7×7×3,卷积为3×3×3(卷积核的值就是权重),三层卷积核分别和RGB第一个区域相乘,得到结果为R=0,G=2,B=0,也就是wx=2,再加上b输出为3,对应下图右侧绿框第一个值。

注意:这个输出为3×3×2,这个2不是RGB通道数,是彩图的个数。

 用下图去理解上图:从下图左侧看,就是说分别对三层RGB进行计算,最后输出归为一层。从下图由侧理解,就是RGB合一重新变成彩图。

 

2.4为何要进行多层卷积

从下图简述:卷积的本质是特征提取,比方说,如下图左所示,我们进行三次特征提取,第一次Low-Level得到的特征,变成第二次Mid-Level的输入,同理第三层High-Level的输入是第二层的输出。我们从下图右理解这个过程,加上一张图32×32×3作为输入,用6个大小为5×5×3的卷积核得到6个28×28×1的特征图,其中每一个像素都是输入的RGB三个通道叠加而来,所以这6个特征图理解为彩图,表示为28×28×6,将该新数据作为输入,再用10个5×5×10的卷积核得到10个24×24×1的输出,表示为24×24×10。

2.5卷积核的参数

滑动窗口的步长:看下图不同的步长对应的结果不同,从结果讲,步长为1时我们得到的特征较多,比较细腻,但比较慢,步长为2时我们得到的特征较少,比较粗糙,但比较快。

卷积核大小:类似于滑动步长的效果。

边缘填充:从下图右去理解,我们可以看到红色框内是补充前的信息,框中的边界点,如第一个数1,在计算时只能计算1次,那么他只能对对应的结果3产生影响,而红框中间的数,因为参与多次相乘会对多个结果值产生影响,这样就带来一个问题,边界特征提取不充分,有缺失,所以在周围加一层数值0,可以保证边界特征,更有效的被提取。而且添加的数为0,该值不会对结果产生影响。

卷积核个数:取决于想得到多少特征图,注意每一个卷积核的值都不同。

 计算公式如下

2.6参数共享

用下图简述:假设下图左为7×7×3的输入,第一个区域我们会用一组卷积核去得到输出特征图,第二个区域我们依然需要一组卷积核去得到输出特征,如果每一个区域对应的卷积核不同,计算量会非常大,为了便于计算,如下图右所示,对输入input Volum区域,用Filter W0 的3×3×3的卷积核进行卷积,用相同的卷积核和输入的每一个区域想乘,就是权值贡献。

从下图左我们看一下卷积参数和全连接参数的数量区别:对于一个32×32×3的图像,想得到10个特征,全连接层需要32×32×3×10=30720个参数,而卷积只需要5×5×3×10=750再加上10个偏置项,也只需要760个,这计算量差距太大了。

2.7池化层

从下图简述:下图左可以看出经过多层卷积后得到的输出为224×224×64,意思是得到64张特征图,每张特征图上有224×224个特征,可以发现数量太多,不利于计算,所以我们希望在不影响精度的前提下对它瘦身,这就是池化层,下图右就对每张特征图的长和宽进行了一半的瘦身。

最大池化层:如下图右所示,就是从64张特征图,每张大小224×224,按照2×2的方格区域,选一个最大值出来,结果上讲长宽各自除以2,就是瘦身一半。

注意:该池化层只做了选择,没做计算。

2.8整体结构

从下图简述:每一个卷积层由一个卷积核和非线性函数构成,每一大层网络由两个 卷积层和一个池化层构成,注意一下池化层之间的卷积层的输出结果,经过池化层后变化不大。对于FC(全连接层)之前的操作都是进行特征提取,但我们最终需要的是得到分类的概率结果,我们假FC(设全连接层)之前的池化层,这时得到的输出是32×32×10,但全连接层无法与之相乘,所以需要将32×32×10拉长成1×10240,FC(全连接层)为10240×5,5代表5个类别的概率。

2.9VGG

从下图理解VGG:下图A,B,C,D,E等为VGG的不同版本,我们看D版本,总共16层,它的特点是,每经过一个池化层,长宽瘦一半,但失去的特征,会增加特征图的数量弥补回来,如conv3-64(64代表特征图数量)经过池化层之后,再过过一层卷积,变成conv3-128,特征图数量翻倍。其识别精确率远高于现代初代神经网络架构Alexnet。

问题:按理说,神经网络层数越多,效果越好,为什么VGG不往20层以上叠加,因为实验发现16层的效果好于32层。

解决:resnet

2.10残差网络resnet

从下图左简述resnet:在VGG中我们发现,当层数超过一定数量后,越多反而效果越差,分析原因发现,是因为有些层得到的效果不好,导致之后的效果越来越差。那么根据如何解决差的层提出了resnet.

resnet:可以这样简单理解。比方说有A,B,C三层网络,我们发现B层网络不好,希望剔除,但如果直接剔除,C层就没了输出,也就无法进行,所以提出一个概念,拉一条线,直接绕过B层,将好的结果传递给C层,而B层则用权重为0的系数,令其归零。 

从从下图右进一步理解resnet:看解决方案对应的图,假设其是20层以后的网络,这时我们进行了conv1,和conv2两层卷积得到F(x),但我们担心这个结果不好,所以再次引入一条线,将x直接传到最后面的网络,最终结果为F(x)+x,当进行梯度下降时发现F(x)的梯度上升,则往上层反馈将上层卷积参数归零,直接使用x作为输入。

2.11感受野

用下图左简述:inpu为5×5×1,First Conv为3×3×1,Second Conv为1×1×1,First Conv(绿区)的感受野就是对应的input的3×3的绿区,而Second Conv(红区)对应的是上层红区3×3的感受野,上上层全部区域5×5的感受野。 一般来说我们希望感受野越大越好,因为越大看到的东西越多,分辨的就越好。那么问题来了既然越大越好,为什么长用3×3卷积核代替7×7卷积核

理由:从下图右的计算看,3个3×3的卷积核感受野和一个7×7卷积核的感受野相同,但参数却少了很多,所以用3×3的卷积核代替7×7的卷积核。而且非线性函数也会减少很多,特征提取也会更细致。因为核比较小。

参考文献

1.2-卷积的作用_哔哩哔哩_bilibili

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

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

相关文章

C++STL库中的list

文章目录 list的介绍及使用 list的常用接口 list的模拟实现 list与vector的对比 一、list的介绍及使用 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。 2. list的底层是双向带头循环链表结构,双向带头循…

HDFS 分布式存储 spark storm HBase

HDFS 分布式存储 spark storm HBase 分布式结构 master slave name node client 负责文件的拆分 128MB 3份 data node MapReduce 分布式计算 离线计算 2.X之前 速度比较慢 对比spark 编程思想 Map 分 Reduce 合 hadoop streaming Mrjob Yarn 资源管理 cpu 内存 MapReduc…

NoSQL———Redis配置与优化

目录 一、关系数据库与非关系型数据库 1.1 关系型数据库 1.2 非关系型数据库 1.3 关系型数据库和非关系型数据库区别 1.3.1 非关系型数据库产生背景 二、Redis简介 2.1 redis优点: 三、Redis 安装部署 四、Redis 命令工具 4.1 redis-cli 命令行工具 …

vue3代码编辑器组件codemirror-editor-vue3

官方文档&#xff1a;https://github.com/RennCheung/codemirror-editor-vue3 国内镜像&#xff1a;https://renncheung.github.io/codemirror-editor-vue3/zh-CN/guide/getting-started 1.安装 npm install codemirror-editor-vue3 codemirror5.x -S2.代码示例 <templat…

mybatis框架遇到的问题:All elements are null

今天在做一个查询接口&#xff0c;应用场景是统计选择日期范围内的每日数据量&#xff0c;于是便想到了使用count&#xff08;&#xff09;函数来统计总行数来代表数据量&#xff0c;并且以记录时间的字段来作为分组标准&#xff08;group by&#xff09;&#xff0c;大体思路有…

基于ssm+mysql+jsp高校疫情防控出入信息管理系统

基于ssmmysqljsp高校疫情防控出入信息管理系统 一、系统介绍二、功能展示1.登陆2.教师管理3.学生管理4.打卡记录管理5.学生申请通行证6.通行证管理7.留言信息管理8.公告类型管理9.公告管理 四、获取源码 一、系统介绍 学生 : 个人中心、打卡记录管理、学生申请通行证、通行证管…

Delphi XE的原生JSONObject如何判断键值是否存在?

【问题现象】 Delphi XE的原生JSONObject&#xff0c;取出键值的时候如下&#xff1a; //json是传入的参数&#xff0c;里面包括"food_name"等之类的键值&#xff0c;没有food_type键值 procedure XXXXFunciton(json:TJSONObject) var strFoodName,strFoodType:S…

<C++> STL_string

目录 1.string类 2.string类的接口 2.1 成员函数 2.1.1 string构造函数 2.1.2 string赋值运算 2.1.3 string析构函数 2.2 string对象访问以及迭代器 2.2.1 string的遍历方式 2.2.2 迭代器的使用 2.2.3 const_迭代器的使用 2.2.4 at 2.2.5 back和front 2.3 string容…

Docker基础命令(一)

Docker使用1 一、运行终端 打开终端&#xff0c;输入docker images &#xff0c;如果运行正常&#xff0c;表示docker已经可以在本电脑上使用了 二、docker常用命令 指令说明docker images查看已下载的镜像docker rmi 镜像名称:标签名删除已下载的镜像docker search 镜像从官…

ffmpeg 的帮助系统

----------------------------------------------- author: hjjdebug date: 2023年 07月 31日 星期一 14:32:15 CST ffmpeg 的帮助系统 目的: 搞清楚它都打印了什么? 它是怎样实现的. ----------------------------------------------- $ffprobe -h 1996行输出 $ffmpeg -h…

Java如何实现将类文件打包为jar包

目录 将类文件打包为jar包 1.写类文件2.编译3.测试4.打jar包jar包应该怎么打&#xff1f; 1.首先确保你的项目2.选中你的项目,点右键3.选择runnable jar file4.如下图,直接看图5.然后点finish 将类文件打包为jar包 为实际项目写了一个工具类&#xff0c;但是每次使用时都需要…

xcode中如何显示文件后缀

xcode14.3 用不惯mac电脑真恶心&#xff0c;改个显示文件后缀找半天 1、首先双击打开xcode软件 2、此时&#xff0c;电脑左上角出现xcode字样(左上角如果看不到xcode字样&#xff0c;再次点击xcode软件弹出来就有了)&#xff0c;鼠标右键它&#xff0c;点击setting或者Prefere…

阿里云SLB负载均衡ALB、CLB和NLB有什么区别?

阿里云负载均衡SLB分为传统型负载均衡CLB&#xff08;原SLB&#xff09;、应用型负载均衡ALB和网络型负载均衡NLB&#xff0c;三者有什么区别&#xff1f;CLB是之前的传统的SLB&#xff0c;基于物理机架构的4层负载均衡&#xff1b;ALB是应用型负载均衡&#xff0c;7层负载均衡…

安卓音视频多对多级联转发渲染

最近利用自己以前学习和用到的音视频知识和工程技能做了一个android的sdk,实现了本地流媒体ipc rtsp 拉流以及自带mip usb等camera audio节点产生的流媒体通过webrtc sfu的方式进行多对多级联发布共享,网状结构&#xff0c;p2p组网&#xff0c;支持实时渲染以及转推rtmp&#x…

我的第一个前端(VS code ,Node , lite-server简易服务器,npm 运行)

第一种方式&#xff1a;使用Visual Studio Code创建并运行 第一个前端项目的步骤&#xff0c;如下&#xff1a; 1. 下载和安装Visual Studio Code&#xff1a; 访问Visual Studio Code官方网站&#xff08;Visual Studio Code - Code Editing. Redefined&#xff09;并根据你…

Java类的加载过程是什么?

本文重点 本文将学习类的加载过程,java命令将class文件放到类加载器中,那么之后经历了什么?本文将对其进行学习。 类加载方式? 两种加载方式:隐式加载(静态加载)和显式加载(动态加载) 隐式加载指的是在程序使用new等方式创建对象的时候,会隐式地调用类的加载器把…

【Docker】Docker的优势、与虚拟机技术的区别、三个重要概念和架构及工作原理详细讲解

前言 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 作者简介&#xff1a; 辭七七&#xf…

GDAL C++ API 学习之路 OGRGeometry 环类 OGRLinearRing

OGRLinearRing class <ogrsf_frmts.h> OGRLinearRing 是 OGR 库中的一个类&#xff0c;它是一个线性环&#xff08;Linear Ring&#xff09;的几何对象&#xff0c;用于表示封闭的线性路径。线性环是由一系列连续的线段组成&#xff0c;首尾相连形成闭合的环。线…

驶向专业:嵌入式开发在自动驾驶中的学习之道

导语: 自动驾驶技术在汽车行业中的快速发展为嵌入式开发领域带来了巨大的机遇。作为自动驾驶的核心组成部分&#xff0c;嵌入式开发在驱动汽车的智能化和自主性方面发挥着至关重要的作用。本文将探讨嵌入式开发的学习方向、途径以及未来在自动驾驶领域中的展望。 一、学习方向:…

Java 解析Excel单元格的富文本

1. 总体介绍 该方法是解析 xlsx 单元格中的富文本&#xff0c;注意不是 xls&#xff0c;xls 的 api 不一样&#xff0c;试了很久没成功。只实现了解析 斜体字、上下标&#xff0c;其它的实现方式应该类似。 2. 具体实现 2.1 代码 package util;import java.io.FileInputStr…