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

news2025/2/26 4:36:34

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

一、参考资料

深入解读卷积网络的工作原理(附实现代码)
深入解读反卷积网络(附实现代码)
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的作者认为应该要一起考虑强化深度、宽度与分辨率三项。然而,在一定的运算量设定下,如何决定调整这三项之间的调整比例则是一个开放的问题。

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

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

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

相关文章

基于web3+solidity的众筹项目

基本配置:node、npm、yarn,安装ganache,chrome,chrome安装插件MetaMask, 主要功能:目的是实现一个简单的众筹平台,允许用户发起筹款项目、捐款、提出使用资金请求以及证明人证明。 部分合约&…

mysql之视图执行计划

一.视图 1.1视图简介 1.2 创建视图 1.3视图的修改 1.4视图的删除 1.5查看视图 二.连接查询案例 三.思维导图 一.视图 1.1视图简介 虚拟表,和普通表一样使用 MySQL中的视图(View)是一个虚拟表,其内容由查询定义。与实际表不…

谈谈AI产品经理的产品开发流程

本文以智能文档审阅系统(IDP)和工业互联网数字孪生—故障预测为例,介绍AI产品经理在产品开发全流程过程中,每一阶段的工作内容、工作流程及注意事项,并结合具体案例方便对AI产品经理感兴趣的同学予以了解。文中尽量避免…

C++中神奇的tuple:详解使用技巧和实例解析

C中神奇的tuple:详解使用技巧和实例解析 一、tuple的基本概念二、tuple基础知识2.1、tuple的创建和初始化2.2、tuple的成员访问2.3、效果展示2.4、tupe的成员函数、非成员函数 及 辅助类 三、tuple高级应用技巧3.1、tuple的结构化绑定3.2、tuple的运算符重载3.3、tu…

数字人克隆:人类科技进步的里程碑

数字人克隆,作为一项引起广泛争议和关注的科技创新,正在逐渐走向我们的生活。它是将人的意识和思想复制到数字化的实体中,从而使之与真正的人类无异。数字人克隆的出现不仅引发了人们对道德伦理问题的讨论,也给人类社会带来了巨大…

三叠云流程制造ERP:构建智慧工厂,实现高效生产管理

在数字化经济的浪潮下,新一代信息技术快速发展,深度整合,引领了工业的创新和变革,推动了企业向智能化发展。解决生产管理、销售管理和技术管理等难题的关键,在于管理者能否及时准确地掌握企业运营信息。三叠云流程制造…

HTML中的主根元素、文档元数据、分区根元素、内容分区、文本内容 和 内联文本语义

本文主要介绍了HTML中主根元素<html>、文档元数据<base>、<head>、<link>、<meta>、<style>、<title>、分区根元素<body>、内容分区<address>、<article>、<aside>、<footer>、<h1> (en-US), &…

PyTorch|构建自己的卷积神经网络

如何搭建网络&#xff0c;这在深度学习中非常重要。简单来讲&#xff0c;我们是要实现一个类&#xff0c;这个类中有属性和方法&#xff0c;能够进行计算。 一般来讲&#xff0c;使用PyTorch创建神经网络需要三步&#xff1a; 继承基类&#xff1a;nn.Module 定义层属性 实现…

el-form点击提交后把验证失败的数据传给了后端

问题&#xff1a;版本号需要根据后端返回的结果查看是否可用&#xff0c;在这里1.0.0是不可用的&#xff0c;如果点击其他地方则会报红&#xff0c;可是直接点击提交&#xff0c;则会把1.0.0这个错误的数据也提交给后端。 解决方案&#xff1a; html代码&#xff1a; <el…

算法第十二天-最大整除子集

最大整除子集 题目要求 解题思路 来自[宫水三叶] 根据题意&#xff1a;对于符合要求的[整除子集]中的任意两个值&#xff0c;必然满足[较大数]是[较小数]的倍数 数据范围是 1 0 3 10^3 103&#xff0c;我们不可能采取获取所有子集&#xff0c;再检查子集是否合法的暴力搜解法…

C++ 给父类带参构造函数的赋值

在类的使用中&#xff0c;默认的构造函数不带任何参数&#xff0c;但是也会因为需要而使用带参数的构造函数。 在带参的构造函数中&#xff0c;是如何继承的呢&#xff0c;这里我们通过使用基类&#xff0c;子类&#xff0c;孙类的两重继承来观察&#xff0c;如何给带参构造函数…

C++: 求1+2+3+...+n

int i 1; int sum 0; class Sum { public:Sum(){sum i;i;} };class Solution { public:int Sum_Solution(int n) {Sum a[n]; //调用n次sum的构造函数return sum;} };

2024年汉字小达人区级选拔备考——真题做一做:诗词连线

前面&#xff0c;六分成长介绍了汉字小达人区级选拔样题的第一大题看拼音写汉字&#xff0c;以及第二大题补充成语。这两道题都是填空题&#xff0c;通常在学校进行线下选拔的时候使用。这篇文章介绍第三大题&#xff1a;诗词连线。 诗词连线是2022年&#xff08;第九届&#x…

计算机毕业设计 SpringBoot的一站式家装服务管理系统 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

【Kubernetes】认证授权RBAC (一)

认证授权RBAC 一、k8s安全管理&#xff1a;认证、授权、准入控制概述1.1、简介【1】认证基本介绍【2】授权基本介绍【3】准入控制基本介绍 1.2、认证【1】客户端认证【2】Bearertoken【3】Serviceaccount【4】拓展&#xff1a;kubeconfig文件 1.3、授权【1】什么是RBAC&#xf…

8、VS中Git使用

VS中Git使用 1.基础操作1.1 VS配置Git1.2 操作界面 2.本地库版本管理2.1 创建管理本地库2.2 暂存、存储2.3 提交2.4 版本切换 3.分支操作3.1 分支应用3.2 新建分支3.3 合并分支、解决冲突3.4 删除分支 4.远程库版本管理4.1 新建、克隆4.2 提取、拉取、推送与同步4.3 团队开发 最…

每日一题——LeetCode1051.高度检查器

方法一 sort排序&#xff1a; 创建一个元素和heights一模一样的expect数组 &#xff0c;将expect数组从小到大进行排序&#xff0c;比较heights和expect相同位置不同的元素个数 var heightChecker function(heights) {var expect [],count0for(const n of heights){expect.…

Ubuntu 安装Nginx服务

文章目录 前言一、Nginx安装1. Nginx默认安装2. Nginx指定版本安装3. Nginx验证4. Nginx服务控制4.1 查看服务状态4.2 停止服务4.3 启动服务4.4 重启服务 5. Nginx文件存放目录 二、自己编译Nginx1. 下载源码2. 依赖配置3. 编译 三、Nginx卸载总结 前言 Nginx&#xff08;发音为…

时序分解 | Matlab实现CPO-VMD基于冠豪猪优化算法(CPO)优化VMD变分模态分解时间序列信号分解

时序分解 | Matlab实现CPO-VMD基于冠豪猪优化算法(CPO)优化VMD变分模态分解时间序列信号分解 目录 时序分解 | Matlab实现CPO-VMD基于冠豪猪优化算法(CPO)优化VMD变分模态分解时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 【原创】CPO-VMD【24年新算法…

LeetCode做题总结 15. 三数之和、18. 四数之和 (Java)

不会做&#xff0c;参考了代码随想录和力扣官方题解&#xff0c;对此题进行整理。 X数之和 15. 三数之和代码思路20240103重写错误1错误2Java语言点总结 18. 四数之和代码思路20240104&#xff08;伪&#xff09;错误1 第一次剪枝错误2 第二次剪枝错误3 溢出 15. 三数之和 代码…