关于CNN卷积神经网络与Conv2D标准卷积的重要概念

温故而知新,可以为师矣!

一、参考资料

深入解读卷积网络的工作原理(附实现代码)
深入解读反卷积网络(附实现代码)
Wavelet U-net进行微光图像处理
卷积知识点
CNN网络的设计论:NAS vs Handcraft

二、卷积神经网络(CNN)相关介绍

1. CNN网络简介

1.1 CNN特征提取

学习输入到输出的映射,并对映射关系加以训练,训练好的模型也具备了这种映射能力。浅层网络一般学习的是边缘、颜色、亮度等,较深层网络学习的是纹理,而更深层的网络学习的是具有一些辨识度的特征,所以卷积神经网络学习的特征逐渐抽象到更高级别。

1.2 CNN网络优点

  1. 参数共享。对输入图像进行卷积操作时,对不同的区域都会共享同一个卷积核,即共享同一组参数,使得网络的参数量才会大大减少;

  2. 稀疏性连接。进行卷积操作之后,输出图像的任何一个区域只跟输入图像的一部分有关。

2. CNN网络结构

CNN网络一般由输入层、卷积层(convolution layer)、激活层、 池化层(pooling layer)和全连接层(fully-connected layer,FC layer)五部分组成。其中,最核心的层包括:

  • convolution layer:提取spacial information
  • pooling layer:降低图像或特征图分辨率,减少运算量并获得semantic information
  • FC layer:回归目标。

注意:随着时代的改变,虽然pooling layer时常被较大stride的convolution取代,global average pooling 与1x1 convolution也时不时代替了 FC layer,这个大思路依然是大致没变的。

3. 卷积层

如果没有特殊说明,卷积指的是标准卷积(Conv2D),卷积操作指的是标准卷积的正向卷积过程

卷积层功能:一张图像在计算机中自动识别为一个二维矩阵。卷积层对输入图像进行特征提取,其内部是由多个卷积核组成的,多个卷积核构成滤波器。

卷积层参数:卷积核大小、步长和填充方式。

卷积层重要特性:权值共享。对于任意一张图像,用一个滤波器按照先横后竖的顺序去覆盖这张图,因为这张图像的每个区域都是被同一个滤波器覆盖,所以各个 区域的权重一样。

多卷积层:一层卷积学到的特征往往是局部的,而卷积层数越多,学到的特征就越全局化。实际应用中,往往使用多层卷积,然后再使用全连接层进行训练。

3.1 卷积核(kernel/filters)

kernel称为卷积核,filters称为滤波器,多个kernel构成filters。卷积核的数量,也就是卷积核通道数。例如,卷积核的尺寸为: K ∗ K ∗ 3 ∗ M K*K*3*M KK3M,单个卷积核尺寸为: K ∗ K ∗ 3 K*K*3 KK3,卷积核的数量为: M M M,即表示通道数。

在TensorFlow中叫filters,在keras中叫kernel,不同文献有不同的叫法,在这里统一叫做卷积核kernel,一般kernel的大小(height*width)为1X1,3X3,5X5,7X7。

卷积核与特征(特征图)的关系:不同的卷积核可以提取不同的特征,一个卷积核只能提取一种特征,32个卷积核就可以提取32种特征。通过卷积操作,一个卷积核对应输出一维特征图,多个卷积核对应输出多维特征图,维度也称为特征图的深度,即对应特征图通道数
在这里插入图片描述

3.2 卷积操作

卷积操作是基于卷积的数学运算,可以将卷积核看成 一个二维数字矩阵,输入图像与卷积核进行卷积后就得到了特征图。先在输入图 像的某一个区域覆盖卷积核,然后将卷积核中的每一个数值与输入图像相应位置像素的数值相乘,把乘积累加起来,得到的和便是输出图像对应位置中目标像素 的数值,多次重复此操作直到输入图像中所有区域被卷积核覆盖完整。
在这里插入图片描述

3.3 卷积操作的数学原理

定义一个尺寸为 4×4 的输入矩阵 input
i n p u t = [ x 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 x 11 x 12 x 13 x 14 x 15 x 16 ] \left.input=\left[\begin{array}{cccc}x_1&x_2&x_3&x_4\\x_5&x_6&x_7&x_8\\x_9&x_{10}&x_{11}&x_{12}\\x_{13}&x_{14}&x_{15}&x_{16}\end{array}\right.\right] input= x1x5x9x13x2x6x10x14x3x7x11x15x4x8x12x16
一个尺寸为3×3 的标准卷积核 kernel
k e r n e l = [ w 0 , 0 w 0 , 1 w 0 , 2 w 1 , 0 w 1 , 1 w 1 , 2 w 2 , 0 w 2 , 1 w 2 , 2 ] kernel=\begin{bmatrix}w_{0,0}&w_{0,1}&w_{0,2}\\w_{1,0}&w_{1,1}&w_{1,2}\\w_{2,0}&w_{2,1}&w_{2,2}\end{bmatrix} kernel= w0,0w1,0w2,0w0,1w1,1w2,1w0,2w1,2w2,2
令步长 s t r i d e s = 1 strides=1 strides=1,填充 p a d d i n g = 0 padding=0 padding=0 ,即 i = 4 , k = 3 , s = 1 , p = 0 i=4,k=3,s=1,p=0 i=4,k=3,s=1,p=0 ,则按照 公式 ( 1 ) 公式(1) 公式(1) 计算可得尺寸为 2×2的输出矩阵 o u t p u t output output
o u t p u t = [ y 0 y 1 y 2 y 3 ] output=\begin{bmatrix}y_0&y_1\\y_2&y_3\end{bmatrix} output=[y0y2y1y3]
这里,我们换一个表达方式,我们将输入矩阵 input 和输出矩阵 output 展开成列向量 X 和列向量 Y ,那么向量 X 和向量 Y 的尺寸就分别是 16×14×1,可以分别用如下公式表示:

把输入矩阵 input 展开成一个16×1列向量 X X X
X = [ x 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 x 11 x 12 x 13 x 14 x 15 x 16 ] T \begin{array}{llllllllllll}X=[x_{1}&x_{2}&x_{3}&x_{4}&x_{5}&x_{6}&x_{7}&x_{8}&x_{9}&x_{10}&x_{11}&x_{12}&x_{13}&x_{14}&x_{15}&x_{16}]^T\end{array} X=[x1x2x3x4x5x6x7x8x9x10x11x12x13x14x15x16]T
把输出矩阵 o u t p u t output output 展开成一个 4×1列向量 Y Y Y
Y = [ y 1 y 2 y 3 y 4 ] T Y=\begin{bmatrix}y_1&y_2&y_3&y_4\end{bmatrix}^T Y=[y1y2y3y4]T
再用矩阵运算来描述标准卷积运算,这里使用矩阵 C 来表示标准卷积核矩阵:
Y = C X Y=CX Y=CX
经过推导,我们可以得到这个稀疏矩阵 C 的尺寸为 4×16
C = [ u 0 , 0 w 0 , 1 w 0 , 2 0 w 1 , 0 w 1 , 1 w 1 , 2 0 w 2 , 0 w 2 , 1 w 2 , 3 0 0 0 0 0 0 w 0 , 0 w 0 , 1 w 0 , 2 0 w 1 , 0 w 1 , 1 w 1 , 2 0 w 2 , 0 w 2 , 1 w 2 , 2 0 0 0 0 0 0 0 0 w 0 , 0 w 0 , 1 w 0 , 2 0 w 1 , 0 w 1 , 1 w 1 , 2 0 w 2 , 0 w 2 , 1 w 2 , 2 0 0 0 0 0 0 w 0 , 0 w 0 , 1 w 0 , 2 0 w 1 , 0 w 1 , 1 w 1 , 2 0 w 2 , 0 w 2 , 1 w 2 , 2 ] C=\begin{bmatrix}u_{0,0}&w_{0,1}&w_{0,2}&0&w_{1,0}&w_{1,1}&w_{1,2}&0&w_{2,0}&w_{2,1}&w_{2,3}&0&0&0&0&0\\0&w_{0,0}&w_{0,1}&w_{0,2}&0&w_{1,0}&w_{1,1}&w_{1,2}&0&w_{2,0}&w_{2,1}&w_{2,2}&0&0&0&0\\0&0&0&0&w_{0,0}&w_{0,1}&w_{0,2}&0&w_{1,0}&w_{1,1}&w_{1,2}&0&w_{2,0}&w_{2,1}&w_{2,2}&0\\0&0&0&0&0&w_{0,0}&w_{0,1}&w_{0,2}&0&w_{1,0}&w_{1,1}&w_{1,2}&0&w_{2,0}&w_{2,1}&w_{2,2}\end{bmatrix} C= u0,0000w0,1w0,000w0,2w0,1000w0,200w1,00w0,00w1,1w1,0w0,1w0,0w1,2w1,1w0,2w0,10w1,20w0,2w2,00w1,00w2,1w2,0w1,1w1,0w2,3w2,1w1,2w1,10w2,20w1,200w2,0000w2,1w2,000w2,2w2,1000w2,2
上述矩阵运算如下图所示:
在这里插入图片描述

3.4 卷积计算公式

卷积计算的输入输出特征图尺寸的对应关系如下:
o = ⌊ i + 2 p − k s ⌋ + 1 i = size   of   input o = size   of   output p = p a d d i n g k = size   of   kernel s = s t r i d e s ( 1 ) o=\left\lfloor\frac{i+2p-k}{s}\right\rfloor+1 \quad \begin{array}{l} \\i=\textit{size of input}\\o=\textit{size of output}\\p=padding\\k=\textit{size of kernel}\\s=strides\end{array}\quad (1) o=si+2pk+1i=size of inputo=size of outputp=paddingk=size of kernels=strides(1)

其中, ⌊ ⋅ ⌋ \left\lfloor\cdot\right\rfloor 表示向下取整符号。

3.5 卷积参数量和计算量

卷积的三种模式:full, same, valid
卷积中参数量和计算量
卷积神经网络中的参数计算
理解分组卷积和深度可分离卷积如何降低参数量
网络解析(一):LeNet-5详解
图像识别-AlexNet网络结构详解
抽丝剥茧,带你理解转置卷积(反卷积)
深度学习中不同类型卷积的综合介绍:2D卷积、3D卷积、转置卷积、扩张卷积、可分离卷积、扁平卷积、分组卷积、随机分组卷积、逐点分组卷积等pytorch代码实现和解析。

//TODO

参数量(神经元数量)的概念:参与计算的参数个数,占用内存空间。
计算量,运算量(连接数):包括乘法和加法计算。

3.6 1x1卷积

一般来说,1x1的卷积对神经网络特征的学习作用不大,通常用来做shape的调整,即升维和降维。

3.7 1x1特征图

当输入特征图的widthheigth为1时,此时输出将由卷积核大小唯一决定,即卷积核若为nxn,则输出特征图大小也为nxn,后续计算可在此基础上继续套用卷积计算公式。

4. 池化层

4.1 引言

一个96x96的图像,如果用一个8x8大小的卷积核,每个特征的维度为(96-8+1)x(96-8+1)(假设padding使用VALID,步长strides为1)。定义400个特征(通道),最后的维度即为7921x400=3168400 大小的向量。最后再使用全连接进行分类的话,最后是三百万的卷积特征输入,由于维度太高十分容易出现过拟合。这时就需要用到池化。

4.2 池化层作用

池化又称作下采样,池化层通常在卷积层和激活层之后。池化层没有相应的参数,它往往存在于连续的卷积层之间。通过卷积和池化分别进行特征提取以及降维的目的。池化在图像识别中应用较多,但在一些网络模型的应用比如图像重建等并没有采用池化。

池化层是对不同位置的特征进行聚合统计。例如可以计算一个区域上某个特定特征的平均值(average_pooling),或者最大值(max_pooling)。最大值池化是最经常使用的池化方式,选取区域的最大值能够很好地保持原图的特征。在这一步操作过后不仅能够得到低得多的维度,还会增强泛化性能。

池化层是对卷积层提取到的特征再一次压缩。一方面,卷积输出中包含的大部分信息是冗余的,通过池化操作获得更主要的特征,防止出现过拟合现象;另一方面,通过池化操作减小输入的大小,减少输出中相似值的数量,从而减少参数的数量来简化网络计算的复杂性,提高网络模型的鲁棒性、容错性和运行效率。

4.3 池化层分类

  1. 最大池化(Max Pooling)。选择图像某一区域像素的最大值作为该区域池化操作后的数值。

  2. 平均池化(Average Pooling)。选择图像某一区域像素的平均值作为该区域池化操作后的数值。

4.4 池化计算公式

池化的计算与卷积计算类似,只是将stride步长设置为2,使得输出大小减半。
o = ⌊ i + 2 p − k 2 ⌋ + 1 i = size   of   input o = size   of   output p = p a d d i n g k = size   of   kernel s = s t r i d e s ( 2 ) o=\left\lfloor\frac{i+2p-k}{2}\right\rfloor+1 \quad \begin{array}{l} \\i=\textit{size of input}\\o=\textit{size of output}\\p=padding\\k=\textit{size of kernel}\\s=strides\end{array}\quad (2) o=2i+2pk+1i=size of inputo=size of outputp=paddingk=size of kernels=strides(2)

其中, ⌊ ⋅ ⌋ \left\lfloor\cdot\right\rfloor 表示向下取整符号。

5. 全连接层

全连接层常常出现在整个卷积神经网络的末尾处,将所有的局部特征连接起来。如果说卷积层是用来提取局部特征,那么全连接层就是把所有的局部特征通过权值矩阵进行整合,并进行归一化操作,最后对各种分类情况都输出一个概率值。全连接层的输出是一个一维向量,一方面可以起到维度变换的作用,特别是可以将高维度转变为低维度,同时把有用的信息保留下来;另一方面可以起到“分类器”的作用,根据全连接得到的概率完成对特征的分类。

6. 常用CNN网络架构

常见的CNN网络架构可以被切成三个部分:

Stem: 将输入图像用少量的 convolution 扫过,并调整分辨率度。

Body: 网络的主要部分,又可分为多个stage,通常每个stage执行一次下采样(降低分辨率)的操作,其内部则为一个或多个building block (如residual bottleneck)的重复组合。

Head: 使用stem与body提取的feature,执行目标任务的预测。
在这里插入图片描述

除此之外,Building block也是一个很常被使用的术语,指的是那些被不断重复使用的小网络组合,比如说ResNet中的 residual blockresidual bottleneck block,又或是MobileNet中的depthwise convolution blockreverted bottleneck block

7. 关于CNN网络的深度/宽度/分辨率

在不大幅改动主架构的情况下,一般调整的参数有以下三种:

7.1 深度D(depth)

深度是指从输入到输出,堆叠的 building blockconvolution layer 的数量。在深度方面,越深的网络可以捕捉越复杂的特征,并且带来更好的泛化 (generalization) 能力。然而,过深的网络即使使用 skip connectionbatch normalization,仍然容易因梯度消失 (gradient vanishing) 导致不易训练。

7.2 宽度W (width)

宽度是指 building blockconvolution layer 输出 feature map的宽度 (channels或filters数)。在宽度方面,一般来说越宽的网络可以捕捉到更细节 (fine-grained) 的信息,并且容易训练。然而,宽而浅的网络却是难以捕捉复杂的特征。

7.3 分辨率R(resolution)

分辨率是指 building blockconvolution layer输出 feature map 张量的长与宽。在分辨率方面,高分辨率无庸置疑的可以得到更多细节信息,在大多的论文中基本上都是提升performance的好法宝。显而易见的缺点就是运算量,然后在localization问题需要调整、匹配的receptive field

7.4 总结

以下是EfficentNet论文提供单独增加深度、宽度与分辨率上的实验。从实验上可以看出,单独增强其中一项对效能的提升都是有效的,但是很快这个效果就会饱和
在这里插入图片描述

基于单一强化的实验,EfficientNet的作者认为应该要一起考虑强化深度、宽度与分辨率三项。然而,在一定的运算量设定下,如何决定调整这三项之间的调整比例则是一个开放的问题。

同时提高深度、宽度与分辨率,其运算量翻倍增加 (例如,增加两倍深度,会增加两倍运算量;增加宽度或分辨率度两倍,则会增加运算量四倍)。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【数据库】视图索引执行计划多表查询面试题

文章目录 一、视图1.1 概念1.2 视图与数据表的区别1.3 优点1.4 语法1.5 实例 二、索引2.1 什么是索引2.2.为什么要使用索引2.3 优缺点2.4 何时不使用索引2.5 索引何时失效2.6 索引分类2.6.1.普通索引2.6.2.唯一索引2.6.3.主键索引2.6.4.组合索引2.6.5.全文索引 三、执行计划3.1…

【leetcode】字符串中的第一个唯一字符

题目描述 给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。 用例 示例 1: 输入: s “leetcode” 输出: 0 示例 2: 输入: s “loveleetcode” 输出: 2 示例 3: 输入: s “aabb”…

【大数据进阶第三阶段之Datax学习笔记】阿里云开源离线同步工具Datax类图

【大数据进阶第三阶段之Datax学习笔记】阿里云开源离线同步工具Datax概述 【大数据进阶第三阶段之Datax学习笔记】阿里云开源离线同步工具Datax快速入门 【大数据进阶第三阶段之Datax学习笔记】阿里云开源离线同步工具Datax类图 【大数据进阶第三阶段之Datax学习笔记】使用…

FineBI:简介

1 介绍 FineBI 是帆软软件有限公司推出的一款商业智能(Business Intelligence)产品。 FineBI 是定位于自助大数据分析的 BI 工具,能够帮助企业的业务人员和数据分析师,开展以问题导向的探索式分析。 2 现阶段数据分析弊端 现阶…

系列七、Typora安装 配置

一、安装 1.1、下载安装包 我分享的链接: 链接:https://pan.baidu.com/s/1K5DjV_xhCH5WGiiEHlNQVQ?pwdyyds 提取码:yyds 1.2、安装 无脑下一步,下一步即可。 二、Typora中设置插入的图片左对齐 2.1、背景 往Typora中插入图…

开启Android学习之旅-4-Android集成FontAwesome

FontAwesome 是一个非常标准、统一风格的图标库。产品经理在原型中应用了很多图标都是FontAwesome。正常流程是 UI 需要再手工绘制或在 iconfont 或 iconpark 网站挨个找,如果在 Android 直接使用不是省了一步(注意版权问题,使用免费版&#…

echart图表

首先我们要知道ECharts是什么,它是怎么用的? ECharts是一个使用JavaScript实现的开源可视化库,它涵盖各行业图表,满足各种需求。它提供了丰富的图表类型和交互能力,使用户能够通过国简单的配置生成各种各样的图表,包括…

解决“SQLServer 添加数据库,报Error 5118“错误

当将把一个SQLServer的数据库文件*.MDF和日志文件*.LDF,从电脑A拷贝到电脑B,然后在电脑B上,使用Microsoft SQL Server Management Studio添加该*.MDF文件,有时报"Error 5118"错误,如图(1)所示: 图…

Kettle Local引擎使用记录(基于Kettle web版数据集成开源工具data-integration源码)

Kettle Web 📚第一章 前言📚第二章 demo源码📗pom.xml引入Kettle引擎核心文件📗java源码📕 controller📕 service📕 其它📕 maven settings.xml 📗测试📕 测试…

Vercel自动部署实战:零基础实操指南

🌟🌌 欢迎来到知识与创意的殿堂 — 远见阁小民的世界!🚀 🌟🧭 在这里,我们一起探索技术的奥秘,一起在知识的海洋中遨游。 🌟🧭 在这里,每个错误都…

Spring Boot实现数据加密脱敏:注解 + 反射 + AOP

文章目录 1. 引言2. 数据加密和脱敏的需求3. Spring Boot项目初始化4. 敏感数据加密注解设计5. 实现加密和脱敏的工具类6. 实体类和加密脱敏注解的使用7. 利用AOP实现加密和脱敏8. 完善AOP切面9. 测试10. 拓展功能与未来展望10.1 加密算法的选择10.2 动态注解配置 11. 总结 &am…

数据结构:树详解

创建二叉树 给出了完整的先序遍历序列,子树为空用’#’表示,所以这样我们在通过先序遍历序列创建二叉树时我们直到先序遍历序列是先进行根结点,然后左子树最后右子树的顺序进行遍历的,所以对于完整的先序遍历序列我们可以直到先序…

SCADE—产品级安全关键系统的MBD开发套件

产品概述 随着新能源三电、智能驾驶等新技术的应用,汽车中衍生出很多安全关键零部件,如BMS、VCU、MCU、ADAS等,相应的软件在汽车中的比重越来越大,并且安全性、可靠性要求也越来越高。ANSYS主要针对安全关键零部件的嵌入式产品级软…

【Redis】非关系型数据库之Redis的介绍及安装配置

目录 前言 一、关系型数据库与非关系型数据库 1.1关系型数据库 1.2非关系型数据库 1.3两者的区别 1.4非关系型数据库产生的背景 1.5总结 二、Redis介绍 2.1Redis是什么 2.2Redis的优点 2.3Redis的使用场景 2.4那些数据适合放在缓存中 2.5Redis为什么那么快&#xf…

文章解读与仿真程序复现思路——中国电机工程学报EI\CSCD\北大核心《考虑系统调峰需求与光热电站收益平衡的储热容量优化配置》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主的专栏栏目《论文与完整程序》 这个标题表明研究的主题涉及到光热电站系统中的储热容量优化配置,而优化的目标是在系统中实现调峰需求并平衡光热电站的收益。让我们逐步解读这…

用js玩一玩猜数字游戏

需求&#xff1a; 1. 生成随机的数字 0 到 20 2. 只能猜 5 次&#xff0c; 5 次机会用完提示 这都猜不到 3. 猜对了&#xff0c; 就提示 恭喜猜对拉 4. 猜小了&#xff0c; 您猜的数字小了 5. 猜大了&#xff0c; 就提示用户 您猜的数字大了 <script>// 1. 生成随机…

[C#]使用PaddleInference图片旋转四种角度检测

官方框架地址】 https://github.com/PaddlePaddle/PaddleDetection.git 【算法介绍】 PaddleDetection 是一个基于 PaddlePaddle&#xff08;飞桨&#xff09;深度学习框架的开源目标检测工具库。它提供了一系列先进的目标检测算法&#xff0c;包括但不限于 Faster R-CNN, Ma…

Python 教程 01:Python 简介及发展历史

ℹ️说明&#xff1a;关于本教程的一些约定 ① 教程后有&#xff08;选读&#xff09;的表示此教程为扩展内容&#xff0c;选读&#xff1b; ② 教程中涉及到的代码片段有时候并非代码块&#xff0c;而是图片&#xff0c;这是防止初学者直接复制代码粘贴的行为&#xff0c;想必…

【MATLAB源码-第104期】基于matlab的MPSK和MQAM调制解调方式仿真,输出误码率曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 MPSK&#xff08;多相位键控&#xff09; MPSK是一种基于载波相位变化的数字调制技术。它的核心原理是通过改变载波的相位来表示不同的数字信息。这种技术可以分为几个不同的级别&#xff0c;其中最常见的包括&#xff1a; 1…

Open CASCADE学习|入门Hello world

目录 1、新建项目 2、写代码 3、配置 3.1配置头文件 3.2配置静态库文件 3.3配置动态库文件 4、编译运行 1、新建项目 新建一个Win32控制台应用程序&#xff0c;取名为HelloWorld&#xff0c;如下图所示&#xff1a; 2、写代码 测试所用的代码如下&#xff1a; // Use T…