神经网络(二):卷积神经网络

文章目录


一、图像的本质

1.1单通道图像:灰度图

灰度图就是常见的黑白图像,以下是一个24*16的灰度图:

其中,每一个像素都有对应的像素值表示像素的强度(灰度等级),像素值大小范围为0~255,其中0表黑色,255表白色,因此在计算机中可使用数字矩阵表示该图像:

1.2多通道图像

在表示图像时有多种不同的颜色模型,最常见的是RGB模型。该模型是一种加法颜色模型,由三个数字矩阵表示三种原色(三原色模型中原色分别为红、绿、蓝),将三种原色混合在一起后就可用于表示广泛的颜色范围。例:

图像通道,指的是构成图像的多个单独的成分或层。每个通道代表图像的一种颜色或特定的信息,这些信息可以组合在一起形成完整的图像(通道可以理解为图像的特征)。当RGB图像(三通道)加载到计算机中时,其像素矩阵形状为H×W×3。其中H是整个高度上的像素数量,W是整个宽度上的像素数,3表示通道数。常见图像通道类型:

  • RGB图像通道:含有R、G、B三种图像通道,每个图像通道分别表示对应颜色的像素信息,通过将这三个通道结合在一起,可以生成全彩色图像。
  • 灰度图像通道:只有灰度通道,用于表示从黑到白的不同亮度级别。
  • 遥感图像通道 :在遥感图像中,通常使用多个波段或频谱范围来捕捉地表特征。这些波段通常对应于不同的电磁波长,每个波段都可以看作是图像的一个通道。遥感图像。通道的选择取决于具体的应用需求,不同波段的组合可以帮助研究人员和分析师解释地表特征。常见通道类型:
    • 可见光波段:人眼可见的光谱范围,通常分为红、绿、蓝(RGB)三个波段。
    • 红外波段:包括近红外(NIR)和远红外(FIR)波段。近红外波段特别适合于植被和土地利用研究,因为植被在近红外波段有明显的反射特征。
    • 热红外波段:用于测量地表温度,通常在热成像中使用。
    • 超光谱波段:包含大量窄带波段,提供非常详细的光谱信息,用于物种识别、污染检测等高级应用。

二、卷积神经网络

2.1基本结构

与全连接神经网络相比,卷积神经网络多了卷积层、池化层,输入卷积神经网络中的数据特征图通过卷积运算和池化运算,将其中的有效特征提取出来输入到全连接层,并对数据进行分类或者预测。简而言之,各层的作用为:

  • 输入层:输入图像数据。
  • 卷积层:利用卷积核执行卷积操作来提取对应的图像特征信息。
  • 池化层:减少卷积层提取的特征个数,将数据维度减小,防止过拟合。
  • 全连接层:汇总卷积层和池化层得到的图像特征信息。
  • 输出层:根据全连接层的信息得到概率最大的结果。

上图中利用卷积层、池化层不断改变通道数、图像大小(实际是对图像特征的提取),将从图像提取的特征信息输入到全连接层,相当于输入到全连接神经网络当中,最后将结果通过输出层输出。之所以使用卷积神经网络,而不直接使用全连接神经网络处理图像,是因为直接顺序输入图像像素值(将像素数据拉平为一维)到全连接神经网络时,失去了像素之间的空间信息,如下图中狗耳朵与狗头,直接输入像素值,就会丢失狗耳朵长在狗头上的空间特征:

而事实上,像图像这样的3维形状的数据中应该含有重要的空间信息。比如,空间上相邻的地方像素值应该是相似的值、RGB通道之间分别有着密切的关联性,但是相距比较远的像素之间的关联性比较低。但是全连接层会忽视形状,将全部的信息作为相同的神经元处理,因此无法利用与形状相关的信息。而卷积神经网络中的卷积层可以保持形状不变,当输入的数据是图像的时候,卷积层会以3维的数据形式接受数据,同样以3维的形式输出到下一层,因此相对于全连接神经网络,卷积神经网络可以比较好的理解空间形状的数据。

2.2卷积层

2.2.1卷积操作

用于提取图像中的某一特征信息,这些特征信息通过图像中像素的组合或者其他方式所体现,如图片的纹理特征,颜色特征。比如,下图蓝框框住的地方就是脸部特征,这些特征其实是由一个个像素所组成的,在执行人脸识别任务时,卷积层就是要提取下图蓝框内的脸部特征。

卷积层通过卷积操作来提取特征,在计算机当中,图像以矩阵的方式进行存储(多通道图像即为多个矩阵的叠加),卷积操作实际是通过卷积核对每个通道的矩阵从左到右(卷积核一般是3x3的矩阵)从上至下进行相关运算(先是从左到右,再是从上至下,所以卷积操作也会保留位置信息),最后生成一个/多个新的矩阵,这一新矩阵即为图像的某一特征信息(不同的卷积核能够提取图像不同的特征信息)。卷积操作的过程如下:

在全连接神经网络中有权重参数、偏置参数两种参数,而在卷积神经网络中,卷积核就是卷积神经网络网络的权重参数,当然卷积神经网络中也是存在偏置参数的。如图所示,偏置参数的形状通常是一个1x1的卷积核,这个偏置的参数值会被加到通过卷积运算的所有元素上。具体如图所示:

可注意到,卷积神经网络与全连接神经网络不同,前者实现了权重共享,即卷积核中的参数并不会只针对某一像素值,而是在卷积核移动过程中与所有像素值进行运算。权重共享使得卷积神经网络参数量远少于全连接神经网络,减少过拟合的发生(参数越多,越容易引入噪声特征,越容易发生过拟合)。

2.2.2填充padding

在应用多层卷积时,我们常常丢失边缘像素,即经过卷积运算得到的特征图会比原图像更小。随着我们应用许多连续卷积层,累积丢失的像素数就更多了。为使得卷积后的图像不会变小,且可保留原始图像的边界信息,一般会对图像进行填充(padding),即,在输入图像的边界填充额外的行/列(元素一般为0),使得经过卷积后的图片不会变小,并且可以保留原始图像的边界信息,以便我们设计更深层次的神经网络。

【不使用填充】

  • n h n_h nh:输入图像的高度。
  • n w n_w nw:输入图像的宽度。
  • k h k_h kh:卷积核的高度。
  • k w k_w kw:卷积核的宽度。

【使用填充】

设原图像在行方向上共填充 p h p_h ph行(包括上和下行),在列方向上填充 p w p_w pw列(包括左和右列),则一般取:
p h = k h − 1 , p w = k w − 1 p_h=k_h-1,p_w=k_w-1 ph=kh−1,pw=kw−1

且有:
当 k h 为奇数时:上下两边填充 p h / 2 行 当 k h 为偶数时:上侧填充 ⌈ p h / 2 ⌉ ,下侧填充 ⌊ p h / 2 ⌋ 行 当k_h为奇数时:上下两边填充p_h/2行\\ 当k_h为偶数时:上侧填充⌈p_h/2⌉,下侧填充⌊p_h/2⌋行 当kh为奇数时:上下两边填充ph/2行当kh为偶数时:上侧填充⌈ph/2⌉,下侧填充⌊ph/2⌋行

列方向则同理。事实上,现在使用的卷积核大多是长度为奇数的正方形,此时上下/左右均填充 ( k h − 1 ) / 2 (k_h-1)/2 (kh−1)/2行/列像素。

2.2.3步幅strides

步幅是指行/列的滑动步长,可以通过调大步幅大幅降低图像的宽度和高度。例如,原始的输入分辨率十分冗余,就可使用较大的步幅过滤一些冗余的像素。当步幅为2的时候进行的卷积运算的运算结果如图所示:

如上图所示,输入数据大小为(4,4),卷积核的大小为(2,2),数据填充为0,步幅的大小为2。设置步幅大小可用于高效计算或是缩减采样次数(如高分别率图像中往往存在过多冗余的像素),卷积窗口可以跳过中间位置,每次滑动多个元素。假设输入大小为(H,W),卷积核大小为(FH,FW),输出数据的大小为(OH,OW),填充为P,步幅S,则有如下公式:

上图中案例即为:

2.2.4多通道图像卷积:单卷积核

上文的所有例子都是在单通道图像上的卷积操作,而在多通道图像(如RGB图像)上的卷积操作又有所不同。使用一个卷积核对多通道图像卷积运算时有如下规则:

  • 1.因为要对每一个通道上的像素进行卷积运算,故卷积核的通道数必须与原图像通道数相等。
  • 2.因为是一张图像的不同通道,故卷积核不同通道的核大小必须相等(后续需进行加法运算),但不同通道上内核的参数可以不相等。
  • 3.每一个通道的像素值与对应的卷积核通道的数值(即内核)进行卷积,因此每一个通道会对应一个输出卷积结果,最后需将所有卷积结果按对应位置累加求和,得到最终的卷积结果。
  • 4.由于只使用一个卷积核,故输出的特征图是单通道的(这也对应了"一个卷积核用于提取图像的某一特征"),可以理解为,最终得到的卷积结果是原始图像各个通道上的综合信息结果。实际操作中会添加多个卷积核,因为一个卷积核无法提取训练所满足的特征。

拆分这一过程:

可得到对多通道图像进行单卷积核操作的通用公式:

即:由于只有一个卷积核,因此卷积后只输出单通道的卷积结果(黄色的块状部分表示一个卷积核,黄色块状是由三个通道堆叠在一起表示的,每一个黄色通道与输入卷积通道分别进行卷积,也就是 channel 数量要保持一致)。

2.2.5多通道图像卷积:多卷积核

对多通道图像进行多卷积核操作的公式:

本质上是将每个卷积核对应的输出通道结果(feature map)进行拼接。图中共有m个卷积核(输入卷积核的大小为 ( m , w , h , c ) (m,w,h,c) (m,w,h,c)),则输出特征图大小为 ( m ∗ w ' ∗ h ') (m * w' * h') (m∗w'∗h'),其中 w '、 h ' w'、h' w'、h'表示卷积后的通道尺寸,原始输入大小为 ( n ∗ w ∗ h ) (n * w * h) (n∗w∗h)。

总结,卷积核的通道数应与输入图像的通道数相等,而输出特征图的通道数等于卷积核的个数。

2.2.5卷积层的参数与激活函数

【参数】

卷积核的值就是待学习的参数(上文中使用的卷积核都是已确定值的),在网络训练时,输出的结果会和数据集标签做损失计算,然后把计算得到的损失反向梯度下降去更新卷积核里的每一个参数。所以卷积核里面的参数最终是训练得到的。在Pytorch中提供了实现卷积层的类nn.Conv2d,其包含两种参数:

  • Conv2d.weight(卷积核参数) :每个卷积核都是一个可学习的参数矩阵,用于在输入图像上执行特征提取。nn.Conv2d层会学习这些卷积核的参数,使得它们能够有效地捕捉输入图像中的不同特征。
  • Conv2d.bias(偏置项参数):如果在nn.Conv2d中使用了偏置(bias=True),则在进行卷积操作时,每个输出通道的卷积结果会与相应的偏置项相加,从而得到输出特征图。

其中,偏置项参数用于引入对输入数据的线性偏移,使得模型能够更好地拟合数据。需要注意,一个卷积核仅对应一个偏置值,偏置值会在各卷积核通道运算结果完成累加操作后再进行累加,得到最终特征图。

【激活函数】

卷积操作本身是一种线性运算,故而,卷积操作后往往要加上激活函数,以此为模型引入非线性性。图像一般都选ReLU作为激活函数,因为大于1的时候趋向无穷大,这样反向计算损失的时候不会出现梯度消失的风险。

2.3池化层

池化层是一种降采样操作,其本质是仿照人的视觉系统对视觉输入对象进行降维和抽象,一般配合卷积层进行使用,是对卷积层输出的特征图进行特征选择。事实上,数据在进行卷积操作后,维度会越来越高(模型训练过程中往往使用很多的卷积核,从而生成高纬度特征图)、参数量上涨的很快(卷积层会有自带的参数需要更新),造成模型的训练困难和过拟合现象,所以将池化层置于连续的卷积层之间,以压缩数据量和参数并减少过度拟合(池化层并不带有参数)。

池化层的具体操作是将一个像素点及其周围的像素点进行聚合统计,缩减提取特征图的尺寸,减少最终全连接层中的参数数量,加快模型的计算速度。常见的池化层类型有:最大池化、均值池化、空间金字塔池化等。如图所示,其中,选择某个像素点相邻区域内的最大值是最大池化操作、计算某个像素点相邻区域内的平均值是均值池化操作:

2.4全连接层

卷积神经网络的最后一般使用全连接层,其将多维数据进行扁平化处理(拉伸为一维数组),然后建立普通的全连接神经网络结构,在完成计算后通过激活函数并输出结果。事实上,全连接层的作用主要是对数据进行降维操作,不然数据骤降到输出层,可能会丢失一些图像特征的重要信息。

2.5卷积神经网络与全连接神经网络的对比

【1.参数共享机制】

直接将图像像素作为全连接神经网络的输入,预测类别(共9种)作为输出结果来建立全连接神经网络(假设图像大小为8x8):

则此时全连接层共需要64x9=576个参数(不考虑偏置项)。而当使用卷积核为3x3大小的卷积神经网络时:

一共只有9个参数,即,图像的不同像素区域都共享这9个参数。事实上,图像特征往往具有一定的位置关系,一个特征一般情况下很可能在不止一个地方出现,使用卷积核的这种方式不但大大减少网络的参数数量避免过拟合,也可以获取图像特征的位置信息,使模型性能更优秀、泛化能力更强。

【2.连接的稀疏性】

由卷积的操作可知,输出图像中的任何一个单元,只跟输入图像某一区域的像素有关系:

而全连接神经网络中输出的任何一个单元都要受输入的所有的单元的影响。这样无形中会对图像的识别效果大打折扣。可以理解为,每一个区域都有自己的专属特征,我们不希望它受到其他区域的影响。

相关推荐
Suyuoa8 分钟前
附录2-pytorch yolov5目标检测
python·深度学习·yolo
好看资源平台1 小时前
网络爬虫——综合实战项目:多平台房源信息采集与分析系统
爬虫·python
代码不行的搬运工2 小时前
神经网络12-Time-Series Transformer (TST)模型
人工智能·神经网络·transformer
进击的六角龙2 小时前
深入浅出:使用Python调用API实现智能天气预报
开发语言·python
檀越剑指大厂2 小时前
【Python系列】浅析 Python 中的字典更新与应用场景
开发语言·python
湫ccc2 小时前
Python简介以及解释器安装(保姆级教学)
开发语言·python
孤独且没人爱的纸鹤2 小时前
【深度学习】:从人工神经网络的基础原理到循环神经网络的先进技术,跨越智能算法的关键发展阶段及其未来趋势,探索技术进步与应用挑战
人工智能·python·深度学习·机器学习·ai
阿_旭2 小时前
TensorFlow构建CNN卷积神经网络模型的基本步骤:数据处理、模型构建、模型训练
人工智能·深度学习·cnn·tensorflow
羊小猪~~2 小时前
tensorflow案例7--数据增强与测试集, 训练集, 验证集的构建
人工智能·python·深度学习·机器学习·cnn·tensorflow·neo4j
lzhlizihang2 小时前
python如何使用spark操作hive
hive·python·spark