一文带你快速入门【卷积神经网络(CNN)】

卷积神经网络(Convolutional Neural Network,CNN)是一种包含卷积运算且具有深度结构的前馈神经网络(Feedforward Neural Network,FNN),被广泛应用于图像识别、自然语言处理和语音识别等领域。本章主要介绍卷积神经网络的基本结构、不同类型卷积、CNN可视化及参数设置等优化问题。


5.1:CNN的结构

以图像分类任务为例,在表5.1所示卷积神经网络中,一般包含5种类型的网络层次结构:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


5.2:输入层

输入层是卷积网络的原始输入,下面将介绍输入层的具体作用机理。

5.2.1:输入层作用

输入层(Input Layer)通常是输入卷积神经网络的原始数据或经过预处理的数据,可以是**图像识别领域中原始三维的多彩图像,也可以是音频识别领域**中经过傅利叶变换的二维波形数据,甚至是自然语言处理中一维表示的句子向量。

以图像分类任务为例,输入层输入的图像一般包含RGB三个通道,是一个由长宽分别为 H 和 W 组成的3维像素值矩阵 H\times W \times 3 ,卷积网络会将输入层的数据传递到一系列卷积、池化等操作进行特征提取和转化,最终由全连接层对特征进行汇总和结果输出。

根据计算能力、存储大小和模型结构的不同,卷积神经网络每次可以批量处理的图像个数不尽相同,若指定输入层接收到的图像个数为 N ,则输入层的输出数据为 N\times H\times W\times 3 。


5.2.2:数据预处理

该层要做的处理主要是对原始图像数据进行预处理。

1、去均值

把输入数据各个维度都中心化为0,下图所示即为去均值与归一化后的效果

进行上述操作的目的是把样本的中心拉回到坐标系原点上。

2、归一化

指将幅度归一化到同样的范围,下图展示了去相关化与白化效果,即减少各维度数据因取值范围的差异而带来的干扰。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

例如,我们有两个维度的特征A和B,A范围是0到10,而B的范围是0到1000,如果直接使用这两个特征是会出现问题的,一个较好的解决方式就是归一化,即将A和B的数据都变为0到1的范围。

3、PCA/白化

PCA(Principal Component Analysis)是指使用主成分分析法降维;白化则是指对数据各个特征轴上的幅度进行归一化。


5.3:卷积层

卷积层(Convolution Layer)通常用作对输入层输入数据进行**特征提取,通过卷积核矩阵**对原始数据中隐含关联性的一种抽象。下面将介绍卷积层的具体作用机理、不同卷积类型的作用及其原理。

5.3.1:卷积原理

卷积操作原理上其实是对两张**像素矩阵进行点乘求和的数学操作,其中一个矩阵为输入的数据矩阵,另一个矩阵则为卷积核(滤波器或特征矩阵),求得的结果表示为原始图像中提取的特定局部特征**。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图5.1 卷积操作示意图

图5.1表示卷积操作过程中的不同填充策略,上半部分采用零填充,下半部分采用有效卷积(舍弃不能完整运算的边缘部分)。


5.3.2:卷积在图像中有什么直观作用

在卷积神经网络中,卷积常用来提取图像的特征,但不同层次的卷积操作提取到的特征类型是不相同的,特征类型粗分如表5.2所示。

卷积层次特征类型
浅层卷积边缘特征
中层卷积局部特征
深层卷积全局特征

图像与不同卷积核的卷积可以用来执行边缘检测、锐化和模糊等操作。下面总结了一些不同类型的卷积核(滤波器)对应的卷积图像。

1、输出原图

卷积核: \begin{bmatrix} 0 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 0 \end{bmatrix} \tag{1}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2、边缘检测(突出边缘差异)

卷积核: \begin{bmatrix} 1 & 0 & -1 \\ 0 & 0 & 0 \\ -1 & 0 & 1 \end{bmatrix} \tag{2}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3、边缘检测(突出中间值)

卷积核: \begin{bmatrix} -1 & -1 & -1 \\ -1 & 8 & -1 \\ -1 & -1 & -1 \end{bmatrix} \tag{3}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4、图像锐化

卷积核: \begin{bmatrix} 0 & -1 & 0 \\ -1 & 5 & -1 \\ 0 & -1 & 0 \end{bmatrix} \tag{4}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

5、方块模糊

卷积核: \begin{bmatrix} 1 & 1 & 1 \\ 1 & 1 & 1 \\ 1 & 1 & 1 \end{bmatrix} \times \frac{1}{9} \tag{5}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

6、高斯模糊

卷积核: \begin{bmatrix} 1 & 2 & 1 \\ 2 & 4 & 2 \\ 1 & 2 & 1 \end{bmatrix} \times \frac{1}{16} \tag{6}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


5.3.3:卷积层的基本参数

卷积层中需要用到卷积核(滤波器或特征检测器)与图像特征矩阵进行点乘运算,利用卷积核与对应的特征感受野进行滑窗式运算时,需要设定卷积核对应的大小、步长、个数以及填充的方式,如表5.4所示。

参数名作用常见设置
【1】卷积核大小 (Kernel Size)定义了卷积的感受野在过去常设为5,如LeNet-5;现在多设为3,通过堆叠3*3的卷积核来达到更大的感受域
【2】卷积核步长 (Stride)定义了卷积核在卷积过程中的步长常见设置为1,表示滑窗距离为1,可以覆盖所有相邻位置特征的组合;当设置为更大值时相当于对特征组合降采样
【3】填充方式 (Padding)在卷积核尺寸不能完美匹配输入的图像矩阵时需要进行一定的填充策略(1)设置为’SAME’表示对不足卷积核大小的边界位置进行某种填充(通常零填充)以保证卷积输出维度与输入维度一致;
(2)当设置为’VALID’时则对不足卷积尺寸的部分进行舍弃,输出维度就无法保证与输入维度一致
【4】输入通道数 (In Channels)指定卷积操作时卷积核的深度(1)默认与输入的特征矩阵通道数(深度)一致;
(2)在某些压缩模型中会采用通道分离的卷积方式
【5】输出通道数 (Out Channels)指定卷积核的个数(1)若设置为与输入通道数一样的大小,可以保持输入输出维度的一致性;
(2)若采用比输入通道数更小的值,则可以减少整体网络的参数量

卷积操作维度变换公式: O_d =\begin{cases} \lceil \frac{(I_d - k_{size})+ 1)}{s}\rceil ,& \text{padding=VALID}\\ \lceil \frac{I_d}{s}\rceil,&\text{padding=SAME} \end{cases}

其中, I_d 为输入维度, O_d 为输出维度, k_{size} 为卷积核大小, s 为步长。


5.3.4:卷积核的类型

常见的卷积主要是由连续紧密的卷积核对输入的图像特征进行滑窗式点乘求和操作,除此之外还有其他类型的卷积核在不同的任务中会用到,总结如下。

1、标准卷积

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最常用的卷积核,连续紧密的矩阵形式可以提取图像区域中的相邻像素之间的关联关系, 3\times3 的卷积核可以获得 3\times3 像素范围的感受视野。

2、扩张卷积(带孔卷积或空洞卷积)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

引入一个称作扩张率(Dilation Rate)的参数,使同样尺寸的卷积核可以获得更大的感受视野,相应的在相同感受视野的前提下比普通卷积采用更少的参数。同样是 3\times3 的卷积核尺寸,扩张卷积可以提取 5\times5 范围的区域特征,在实时图像分割领域广泛应用

3、转置卷积

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

先对原始特征矩阵进行填充使其维度扩大到适配卷积目标输出维度,然后进行普通的卷积操作的一个过程,其输入到输出的维度变换关系恰好与普通卷积的变换关系相反,但这个变换并不是真正的逆变换操作,通常称为转置卷积(Transpose Convolution)而不是反卷积(Deconvolution)。转置卷积常见于目标检测领域中对小目标的检测和图像分割领域还原输入图像尺度

4、可分离卷积

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

标准的卷积操作是同时对原始图像 H\times W\times C 三个方向的卷积运算,假设有 K 个相同尺寸的卷积核,这样的卷积操作需要用到的参数为 H\times W\times C\times K 个;若将长宽与深度方向的卷积操作分离出变为 H\times W 与 C 的两步卷积操作,则同样的卷积核个数 K ,只需要 (H\times W + C)\times K 个参数,便可得到同样的输出尺度。

可分离卷积(Seperable Convolution)通常应用在模型压缩或一些轻量的卷积神经网络中,如 MobileNet 、 Xception 等。


5.3.5: 1\times1 卷积的作用

NIN(Network in Network)是第一篇探索 1\times1 卷积核的论文,这篇论文通过在卷积层中使用多层感知机(Multilayer Perceptron,MLP)替代传统线性的卷积核,使单层卷积层内具有非线性映射的能力,也因其网络结构中嵌套MLP子网络而得名NIN。NIN对不同通道的特征整合到MLP子网络中,让不同通道的特征能够交互整合,使通道之间的信息得以流通,其中的MLP子网络恰恰可以用 1\times1 的卷积进行代替。

GoogLeNet则采用 1\times1 卷积核来减少模型的参数量。在原始版本的Inception模块中,由于每一层网络采用了更多的卷积核,大大增加了模型的参数量。此时在每一个较大卷积核的卷积层前引入 1\times1 卷积,可以通过分离通道与宽高卷积来减少模型参数量。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图5.2 Inception模块

以图5.2为例,在不考虑参数偏置项的情况下,若输入和输出的通道数为 C_1=16 ,则左半边网络模块所需的参数为 (1\times1+3\times3+5\times5+0)\times C_1\times C_1=8960 ;

假定右半边网络模块采用的 1\times1 卷积通道数为 C_2=8 (满足 C_1>C_2 ),则右半部分的网络结构所需参数量为 (1\times1\times (3C_1+C_2)+3\times3\times C_2 +5\times5\times C_2)\times C_1=5248 ,可以在不改变模型表达能力的前提下大大减少所使用的参数量。

综上所述, 1\times1 卷积的作用主要为以下两点:

  • 实现信息的跨通道交互和整合。
  • 对卷积核通道数进行降维和升维,减小参数量。

5.3.6:卷积核是否越大越好?

在早期的卷积神经网络中(如LeNet-5、AlexNet),用到了一些较大的卷积核( 11\times11 和 5\times 5 ),受限于当时的计算能力和模型结构的设计,无法将网络叠加得很深,因此卷积网络中的卷积层需要设置较大的卷积核以获取更大的感受域。但是这种大卷积核反而会导致计算量大幅增加,不利于训练更深层的模型,相应的计算性能也会降低。

后来的卷积神经网络(VGG、GoogLeNet等),发现通过堆叠2个 3\times 3 卷积核可以获得与 5\times 5 卷积核相同的感受视野,同时参数量会更少( 3×3×2+1< 5×5×1+1 ), 3\times 3 卷积核被广泛应用在许多卷积神经网络中。因此可以认为,在大多数情况下通过堆叠较小的卷积核比直接采用单个更大的卷积核会更加有效

但是,这并不是表示更大的卷积核就没有作用,在某些领域应用卷积神经网络时仍然可以采用较大的卷积核。譬如在自然语言处理领域,由于文本内容不像图像数据可以对特征进行很深层的抽象,往往在该领域的特征提取只需要较浅层的神经网络即可。在将卷积神经网络应用在自然语言处理领域时,通常都是较为浅层的卷积层组成,但是文本特征有时又需要有较广的感受域让模型能够组合更多的特征(如词组和字符),此时直接采用较大的卷积核将是更好的选择。

综上所述,卷积核的大小并没有绝对的优劣,需要视具体的应用场景而定,但是极大和极小的卷积核都是不合适的,单独的 1\times 1 极小卷积核只能用作分离卷积而不能对输入的原始特征进行有效的组合,极大的卷积核通常会组合过多的无意义特征从而浪费了大量的计算资源。


5.3.7:每层卷积是否只能用一种尺寸的卷积核

经典的神经网络一般都属于层叠式网络,每层仅用一个尺寸的卷积核,如VGG结构中使用了大量的 3×3 卷积层。事实上,同一层特征图可以分别使用多个不同尺寸的卷积核,以获得不同尺度的特征,再把这些特征结合起来,得到的特征往往比使用单一卷积核的要好,如GoogLeNet、Inception系列的网络,均是每层使用了多个卷积核结构。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图5.3 同层多卷积核结构示意图

如图5.3所示,输入的特征在同一层分别经 1×1、3×3 和 5×5 三种不同尺寸的卷积核,再将分别得到的特征进行整合,得到的新特征可以看作不同感受域提取的特征组合,相比于单一卷积核会有更强的表达能力。


5.3.8:如何减少卷积层参数量

减少卷积层参数量的方法可以简要地归为以下几点:

(1)使用堆叠小卷积核代替大卷积核:VGG网络中2个 3\times 3 的卷积核可以代替1个 5\times 5 的卷积核

(2)使用分离卷积操作:将原本 K\times K\times C 的卷积操作分离为 K\times K\times 1 和 1\times1\times C 的两部分操作

(3)添加 1\times 1 的卷积操作:与分离卷积类似,但是通道数可变,在 K\times K\times C_1 卷积前添加 1\times1\times C_2 的卷积核(满足 C_2 <C_1 )

(4)在卷积层前使用池化操作:池化可以降低卷积层的输入特征维度


5.3.9:在标准卷积中同时考虑通道和区域的优缺点

标准卷积中,采用区域与通道同时处理的操作,如下图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这样做可以简化卷积层内部的结构,每一个输出的特征像素都由所有通道的同一个区域提取而来。但是这种方式缺乏灵活性,并且在深层的网络结构中使得运算变得相对低效,更为灵活的方式是使区域和通道的卷积分离开来,通道分离(深度分离)卷积网络由此诞生。如下图所示,Xception网络可解决上述问题。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Xception网络的结构基于ResNet,但是将其中的卷积层换成了深度可分离卷积。首先对每一个通道进行各自的卷积操作,有多少个通道就有多少个过滤器。得到新的通道特征矩阵之后,再对这批新通道特征进行标准的 1×1 跨通道卷积操作。这种操作是相当有效的,可以提升模型分类效果,同时也减少了大量的参数。


5.3.10:采用宽卷积的好处

与宽卷积对应的是窄卷积,实际上它们并不是卷积操作的类型,而是指卷积过程中的填充方法,对应的是’SAME’填充和’VALID’填充。

**'SAME’填充通常采用零填充的方式对卷积核不满足整除条件的输入特征进行补全,以使卷积层的输出维度保持与输入特征维度一致;‘VALID’**填充的方式则相反,实际并不进行任何填充,在输入特征边缘位置若不足以进行卷积操作,则对边缘信息进行舍弃,因此在步长为1的情况下该填充方式的卷积层输出特征维度可能会略小于输入特征的维度。

此外,由于前一种方式通过补零来进行完整的卷积操作,可以有效地保留原始的输入特征信息。比如下图左部分为窄卷积。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

注意到越在边缘的位置被卷积的次数越少。宽卷积可以看作在卷积之前在边缘用0补充,常见有两种情况,一个是全补充,如上图右部分,这样输出大于输入的维度。另一种常用的方法是补充一一部分0值,使得输出和输入的维度一致。


5.4:激活层

下面介绍激活层的作用及搭建网络时最优位置选择技巧。

5.4.1:激活层的作用

激活层(Activation Layer)负责对卷积层抽取的特征进行激活,由于卷积操作是由输入矩阵与卷积核矩阵进行相乘的过程,是线性变化关系,需要激活层对其进行非线性的映射

激活层主要由激活函数组成,即在卷积层输出结果的基础上嵌套一个非线性函数,让输出的特征图具有非线性关系。卷积网络中通常采用ReLU来充当激活函数(还包括tanh和sigmoid等)ReLU的函数形式如下所示,能够限制小于0的值为0,同时大于等于0的值保持不变。

f(x)=\begin{cases} 0 &\text{if } x<0 \\ x &\text{if } x\ge 0 \end{cases} \tag{5-1}

更多激活函数的内容详见3.3节。


5.4.2:BN层和激活层的位置顺序选择

BN层放在非线性函数的前面还是后面,取决于需要正则化的对象和使用的激活函数。如果我们想对输入的数据进行正则化,就放在激活函数前面,将传入输入层的数据正则化。

有一种情况是,假如我们把网络中的某一个隐含层前面的网络层全部砍掉,那么这个隐含层就变成了输入层,传给它的输入需要正则化,从这方面来说,BN层放在非线性函数之后。

BN层的作用机制也许是通过平滑隐含层输入的分布,帮助随机梯度下降的进行,缓解随机梯度下降权重更新对后续层的负面影响。因此放在非线性激活函数之前或之后,也许都能发挥这个作用。如果在 tanh或sigmoid 函数之前进行正则化处理,就可以防止某一层的激活值全部被抑制,以缓解梯度衰减的问题。而对于Relu而言,BN层的平滑作用经Rch函数“扭曲”之后也许有所衰弱。

把 BN层放到激活函数前面可以把卷积的权重和BN的参数进行合并,有利于网络在做前向推理的时候进行加速。

所以 BN层放到 Relu 函数之前的好处可以这样理解:BN层可以防止某一层的激活值全部被抑制,从而防止从这一层往前传的梯度全都变成0,也就是防止梯度消失。


5.5:池化层

下面介绍池化层(Pooling Layer)的作用及不同的池化类型方法。

5.5.1:池化层作用

池化层又称为降采样层(Downsampling Layer),作用是对感受域内的特征进行筛选,提取区域内最具代表性的特征,能够有效地降低输出特征尺度,进而减少模型所需要的参数量。

池化操作可以降低图像的维度,本质上是因为图像具有一种“静态性”的属性,这个意思是说**在一个图像区域内有用的特征极有可能在另一个区域内同样有用**。因此,为了描述一个大的图像,很直观的想法就是对不同位置的特征进行聚合统计。例如,可以计算图像在固定区域上特征的平均值(或最大值)来代表这个区域的特征。

按操作类型通常分为最大池化(Max Pooling)、平均池化(Average Pooling)和求和池化(Sum Pooling),它们分别提取感受域内最大、平均与总和的特征值作为输出,最常用的是最大池化


5.5.2:池化方法

池化操作通常也叫做子采样(Subsampling)降采样(Downsampling),在构建卷积神经网络时,往往会用在卷积层之后,通过池化来降低卷积层输出的特征维度,有效减少网络参数的同时还可以防止过拟合现象。常见的池化方法总结如下:

1、一般池化(General Pooling)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

通常包括最大池化(Max Pooling)和平均池化(Mean Pooling)。以最大池化为例,池化范围 (2\times2) 和滑窗步长(stride=2) 相同,仅提取一次相同区域的范化特征。

2、重叠池化(Overlapping Pooling)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

与一般池化操作相同,但是池化范围 P_{size} 与滑窗步长 stride 关系为 P_{size}>stride ,同一区域内的像素特征可以参与多次滑窗提取,得到的特征表达能力更强,但计算量更大。

3、空间金字塔池化(Spatial Pyramid Pooling)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在进行多尺度目标的训练时,卷积层允许输入的图像特征尺度是可变的,紧接的池化层若采用一般的池化方法会使得不同的输入特征输出相应变化尺度的特征,而卷积神经网络中最后的全连接层则无法对可变尺度进行运算,因此需要对不同尺度的输出特征采样得到相同输出尺度。

注意
SPPNet就引入了空间池化的组合,对不同输出尺度采用不同的滑窗大小和步长以确保输出尺度相同,同时用如金字塔式叠加的多种池化尺度组合,以提取更加丰富的图像特征。常用于多尺度训练和目标检测中的区域提议网络(Region Proposal Network)的兴趣区域(Region of Interest)提取。


5.5.3:卷积层和池化层有什么区别?

卷积层和池化层在结构上具有一定的相似性,都是对感受域内的特征进行提取,并且根据步长设置获取到不同维度的输出,但是其内在操作是有本质区别的,如表所示。

卷积层池化层
结构零填充时输出维度不变,而通道数改变通常特征维度会降低,通道数不变
稳定性输入特征发生细微改变时,输出结果会改变感受域内的细微变化不影响输出结果
作用感受域内提取局部关联特征感受域内提取泛化特征,降低维度
参数量与卷积核尺寸、卷积核个数相关不引入额外参数

5.5.4:NetVLAD池化


【5.6】:全连接层

全连接层(Full Connected Layer)负责对卷积神经网络学习**提取到的特征进行汇总**,将多维的特征输入映射为二维的特征输出,高维表示样本批次,低维常常对应任务目标。


5.7:二维卷积与三维卷积

在多通道卷积中,不同通道上的卷积核参数是不同的,根据输出是否需要二维或三维的特征向量,可以选择二维卷积或三位卷积。

5.7.1:二维卷积与三位卷积的区别

1、二维卷积

二维卷积操作如下图所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

该图分别展示了在单通道和多通道输入的情况下,单通道输出的卷积操作。

在**单通道输入**的情况下,若输入卷积核尺寸为 (k_h, k_w, 1),卷积核在输入图像的空间维度上进行滑窗操作,每次滑窗和 (k_h, k_w)窗口内的值进行卷积操作,得到输出图像中的一个值。

在**多通道输入**的情况下,假定输入图像特征通道数为3,卷积核尺寸则为 (k_h, k_w, 3) ,每次滑窗与3个通道上的 (k_h, k_w) 窗口内的所有值进行卷积操作,得到输出图像中的一个值。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2、三维卷积

3D卷积操作如图所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

同样分为单通道和多通道,且假定只使用1个卷积核,即**输出图像仅有一个通道**。

对于**单通道输入,与2D卷积不同之处在于,输入图像多了一个深度(depth)维度**,卷积核也多了一个 k_d 维度,因此3D卷积核的尺寸为 (k_h, k_w, k_d) ,每次滑窗与 (k_h, k_w, k_d) 窗口内的值进行相关操作,得到输出3D图像中的一个值。

对于**多通道输入**,则与2D卷积的操作一样,每次滑窗与3个channels上的 (k_h, k_w, k_d) 窗口内的所有值进行相关操作,得到输出3D图像中的一个值。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

注意,三维卷积和多通道卷积是有区别的——多通道卷积在不同通道上的卷积核参数是不同的,而3D卷积则由于卷积核本身是3D的,所以这个由于“深度”造成的看似在不同通道上进行卷积,实际用的是同一个卷积,即权重共享。多出的这个深度通道,可能是视频上的连续帧,也可能是立体图像中的不同切片


5.7.2:RGB图不使用三维卷积的原因

首先需要明确一点,二维卷积和三维卷积指的是输出维度,不是指卷积核的维度。

二维卷积是在RGB的三个通道上做点乘然后相加,类似于全连接,而不在第三个维度做类似于前两个维度的卷积运算。RGB图像之所以不用三位卷积,是因为R、G、B三个通道没有相关性,即对于RGB图像来说,在深度维度上做卷积没有意义。

所以判断是否使用二维卷积或三维卷积,只需要判断输出是否为二维或者三维的特征向量。


5.8:理解转置卷积与棋盘效应

转置卷积(Transposed Convolution)又称为反卷积(Deconvolution),常常在CNN中用于对特征图进行**上采样**,比如语义分割和超分辨任务。之所以叫转置卷积,是因为它把我们平时所用的普通卷积操作中的卷积核做了一个转置,把普通卷积的输出作为转置卷积的输入,而转置卷积的输出,就是普通卷积的输入。

在理解转置卷积之前,需要先理解标准卷积的运算方式。

5.8.1:标准卷积

首先给出一个输入输出结果,下图所示为标准卷积的输出计算:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

那是怎样计算的呢?卷积的时候需要对卷积核进行180°的旋转,同时卷积核中心与需计算的图像像素对齐,输出结构为中心对齐像素的一个新的像素值,计算例子如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这样计算出左上角(即第一行第一列)像素的卷积后像素值。给出一个更直观的例子,如下图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从左到右看,原像素经过卷积由1变成-8。通过滑动卷积核,就可以得到整张图片的卷积结果。


5.8.2:转置卷积

首先来看图像的转置卷积过程:

输入:2x2, 卷积核:4x4, 滑动步长:3, 输出:7x7;其计算过程如下:

(1)输入图片每个像素进行一次全卷积,每个像素的卷积后大小为 1+4-1=4, 即4x4大小的特征图,输入有4个像素所以4个4x4的特征图;

(2)将4个特征图进行步长为3的相加; 输出的位置和输入的位置相同。步长为3是指每隔3个像素进行相加,重叠部分进行相加,即输出的第1行第4列是由C图的第一行第四列与D图的第一行第一列相加得到,其他如此类推。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

注意:输出图像有部分重叠

可以看出转置卷积的大小由卷积核大小与滑动步长决定,总结公式如下:

假设 in是输入大小, k是卷积核大小, s 是滑动步长, out 是输出大小 得到 out = (in - 1) * s + k 上图过程就是, (2 - 1) * 3 + 4 = 7。


【5.8.3】:棋盘效应


5.9:卷积神经网络凸显共性的方法

下面介绍三种卷积神经网络凸显共性的方法:局部连接、权重共享和池化操作。

5.9.1:局部连接

我们首先了解一个概念,感受野,即每个神经元仅与输入神经元相连接的一块区域

在**图像卷积操作中,神经元在空间维度上是局部连接,但在深度上是全连接**。局部连接的思想,是受启发于生物学里的视觉系统结构,视觉皮层的神经元就是仅用局部接受信息。对于二维图像,局部像素关联性较强。这种局部连接保证了训练后的滤波器能够对局部特征有最强的响应,使神经网络可以提取数据的局部特征;

下图是一个很经典的图示,左边是全连接,右边是局部连接。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对于一个1000 × 1000的输入图像而言,如果下一个隐藏层的神经元数目为 10^6 个,采用全连接则有 1000 × 1000 × 10^6 = 10^{12} 个权值参数,如此巨大的参数量几乎难以训练;而采用局部连接,隐藏层的每个神经元仅与图像中10 × 10的局部图像相连接,那么此时的权值参数数量为 10 × 10 × 10^6 = 10^8 ,将直接减少4个数量级。


5.9.2:权值共享

权值共享,即**计算同一深度的神经元时采用的卷积核参数是共享的**。权值共享在一定程度上讲是有意义的,是由于在神经网络中,提取的底层边缘特征与其在图中的位置无关。但是在另一些场景中是无意义的,如在人脸识别任务中,我们期望在不同的位置学到不同的特征。

需要注意的是,权重只是对于同一深度切片的神经元是共享的。在卷积层中,通常采用多组卷积核提取不同的特征,即对应的是不同深度切片的特征,而不同深度切片的神经元权重是不共享。相反,偏置这一权值对于同一深度切片的所有神经元都是共享的

权值共享带来的好处是**大大降低了网络的训练难度**。如下图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

假设在局部连接中隐藏层的每一个神经元连接的是一个10 × 10的局部图像,因此有10 × 10个权值参数,将这10 × 10个权值参数共享给剩下的神经元,也就是说隐藏层中 10^6 个神经元的权值参数相同,那么此时不管隐藏层神经元的数目是多少,需要训练的参数就是这 10 × 10个权值参数(也就是卷积核的大小)。

这里就体现了卷积神经网络的奇妙之处,使用少量的参数,却依然能有非常出色的性能。上述仅仅是提取图像一种特征的过程。如果要多提取出一些特征,可以增加多个卷积核,不同的卷积核能够得到图像不同尺度下的特征,称之为特征图(feature map)


5.9.3:池化操作

池化操作与多层次结构一起,实现了数据的降维,将低层次的局部特征组合成为较高层次的特征,从而对整个图片进行表示。如下图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在上图中,若每一个点的处理使用相同的滤波器,则为全卷积;若使用不同的滤波器,则为局部卷积。


5.10:局部卷积

大多数神经网络中高层网络通常会采用全连接层(Global Connected Layer),通过多对多的连接方式对特征进行全局汇总,可以有效地提取全局信息。但是**全连接的方式需要大量的参数,是神经网络中最占资源的部分之一**,因此就需要由局部连接(Local Connected Layer),仅在局部区域范围内产生神经元连接,能够有效地减少参数量。

下面介绍全连接、局部连接、全卷积和局部卷积四种不同的连接方式。


5.10.1:全连接、局部连接、全卷积与局部卷积

根据卷积操作的作用范围可以分为全卷积(Global Convolution)和局部卷积(Local Convolution)。实际上这里所说的全卷积就是标准卷积,即在整个输入特征维度范围内采用相同的卷积核参数进行运算,全局共享参数的连接方式可以使神经元之间的连接参数大大减少;局部卷积又叫平铺卷积(Tiled Convolution)或非共享卷积(Unshared Convolution),是局部连接与全卷积的折中。四者的比较如下所示。

1、全连接

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

注意:x为输入层,s为输出层

层间神经元完全连接,每个输出神经元可以获取到所有输入神经元的信息,有利于信息汇总,常置于网络末层;连接与连接之间独立参数,大量的连接大大增加模型的参数规模。

2、局部连接

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

层间神经元只有局部范围内的连接,在这个范围内采用全连接的方式,超过这个范围的神经元则没有连接;连接与连接之间独立参数,相比于全连接减少了感受域外的连接,有效减少参数规模。

3、全卷积

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

层间神经元只有局部范围内的连接,在这个范围内采用全连接的方式,连接所采用的参数在不同感受域之间共享,有利于提取特定模式的特征;相比于局部连接,共用感受域之间的参数可以进一步减少参数量

4、局部卷积

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

层间神经元只有局部范围内的连接,感受域内采用全连接的方式,而感受域之间间隔采用局部连接与全卷积的连接方式;相比与全卷积成倍引入额外参数,但有更强的灵活性和表达能力;相比于局部连接,可以有效控制参数量。


5.10.2:局部卷积的应用

并不是所有的卷积都会进行权重共享,在某些特定任务中,会使用非权重共享的卷积。下面通过人脸这一任务来进行讲解。在读人脸方向的一些paper时,会发现很多都会在最后加入一个局部卷积(Local Connected Conv),也就是不进行权重共享的卷积层。总的来说,这一步的作用就是**使用3D模型来将人脸对齐**,从而使CNN发挥最大的效果。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

经过3D对齐以后,形成的图像均是152×152,输入到上述的网络结构中。该结构的参数如下:

【1】C1:Conv32个11×11×3的卷积核
【2】M2:Max-pooling最大池化3×3,stride=2
【3】C3:Conv16个9×9的卷积核
【4】L4:Local-Conv16个9×9的卷积核
【5】L5:Local-Conv16个7×7的卷积核
【6】L6:Local-Conv16个5×5的卷积核
【7】F7:Fully-connected4096维
【8】Softmax4030维

前三层的目的在于提取低层次的特征,比如简单的边和纹理。其中Max-pooling层使得卷积的输出对微小的偏移情况更加鲁棒。但不能使用更多的Max-pooling层,因为**太多的Max-pooling层会使得网络损失图像信息。全连接层将上一层的每个单元和本层的所有单元相连,用来捕捉人脸图像不同位置特征之间的相关性。最后使用softmax层用于人脸分类**。

中间三层都是使用参数不共享的卷积核,即局部卷积。具体原因如下:

(1)对齐的人脸图片中,不同的区域会有不同的统计特征,因此并不存在特征的局部稳定性,所以使用相同的卷积核会导致信息的丢失。

(2)不共享的卷积核并不增加推理时特征的计算量,仅会增加训练时的计算量。使用不共享的卷积核,由于需要训练的参数量大大增加,因此往往需要增加数据集的样本量以达到较好的效果。


【5.11】:CNN可视化

这一部分内容我会单独写一篇文章,后续更新。


5.12:卷积神经网络的优化及应用

卷积神经网络广泛应用于图像识别分类,文本识别分类,以及视频类数据识别等场景中,下面介绍几种在实际使用过程中卷积神经网络参数设置的技巧和提高模型泛化能力的方法。

5.12.1:卷积神经网络的参数设置

卷积神经网络中常见的参数在其他类型的神经网络中也是类似的,但是参数的设置还得结合具体的任务才能设置在合理的范围,CNN具体的参数列表如下所示。

参数名常见设置参数说明
【1】学习率(Learning Rate)0~11、反向传播网络中更新权值矩阵的步长,在一些常见的网络中会在固定迭代次数或模型不再收敛后对学习率进行指数下降。
2、学习率越大,计算误差对权值矩阵的影响越大,容易在某个局部最优解附近震荡;越小的学习率对网络权值的更新越精细,但是需要花费更多的时间去迭代
【2】批次大小(Batch Size)1~N1、批次大小指定一次性流入模型的数据样本个数,根据任务和计算性能限制判断实际取值,在一些图像任务中往往由于计算性能和存储容量限制只能选取较小的值。
2、在相同迭代次数的前提下,数值越大模型越稳定,泛化能力越强,损失值曲线越平滑,模型也更快地收敛,但是每次迭代需要花费更多的时间
【3】数据轮次(Epoch)1~N1、数据轮次指定所有训练数据在模型中训练的次数,根据数据集规模和分布情况会设置为不同的值。
2、当模型较为简单或训练数据规模较小时,通常轮次不宜过高,否则模型容易过拟合;
3、模型较为复杂或训练数据规模足够大时,可适当提高数据的训练轮次。
【4】权重衰减系数(Weight Decay)0~0.001模型训练过程中反向传播权值更新的权重衰减值

5.12.2:提高卷积神经网络的泛化能力

卷积神经网络与其他类型的神经网络类似,在采用反向传播进行训练的过程中比较依赖输入的数据分布,当数据分布较为极端的情况下容易导致模型欠拟合或过拟合,常见的提高卷积网络泛化能力的方法总结如下:

方法说明
【1】使用更多数据在有条件的前提下,尽可能多地获取训练数据是最理想的方法,更多的数据可以让模型得到充分的学习,也更容易提高泛化能力
【2】使用更大批次在相同迭代次数和学习率的条件下,每批次采用更多的数据将有助于模型更好的学习到正确的模式,模型输出结果也会更加稳定
【3】调整数据分布大多数场景下的数据分布是不均匀的,模型过多地学习某类数据容易导致其输出结果偏向于该类型的数据,此时通过调整输入的数据分布可以一定程度提高泛化能力
【4】调整目标函数在某些情况下,目标函数的选择会影响模型的泛化能力,如目标函数f(y,y’)=
【5】调整网络结构1、在浅层卷积神经网络中,参数量较少往往使模型的泛化能力不足而导致欠拟合,此时通过叠加卷积层可以有效地增加网络参数,提高模型表达能力;
2、在深层卷积网络中,若没有充足的训练数据则容易导致模型过拟合,此时通过简化网络结构减少卷积层数可以起到提高模型泛化能力的作用
【6】数据增强数据增强又叫数据增广,在有限数据的前提下通过平移、旋转、加噪声等一些列变换来增加训练数据,同类数据的表现形式也变得更多样,有助于模型提高泛化能力,需要注意的是数据变化应尽可能不破坏原始数据的主体特征(如在图像分类任务中对图像进行裁剪时不能将分类主体目标裁出边界)。
【7】权值正则化权值正则化就是通常意义上的正则化,一般是在损失函数中添加一项权重矩阵的正则项作为惩罚项,用来惩罚损失值较小时网络权重过大的情况,此时往往是网络权值过拟合了数据样本。
【8】屏蔽网络节点该方法可以认为是网络结构上的正则化,通过随机性地屏蔽某些神经元的输出让剩余激活的神经元作用,可以使模型的容错性更强。

5.12.3:卷积神经网络的区域不变性和组合性

CNN有两个主要特点,区域不变性(location invariance)和组合性(Compositionality)。

1、区域不变性

滤波器在每层的输入向量(图像)上滑动,检测的是局部信息,然后通过pooling取最大值或均值。pooling这步综合了局部特征,但是失去了每个特征的位置信息。这很适合基于图像的任务,比如要判断一幅图里有没有猫这种生物,你可能不会去关心这只猫出现在图像的哪个区域。但是在NLP里,词语在句子或是段落里出现的位置,顺序,都是很重要的信息。

2、局部组合性

CNN中,每个滤波器都把较低层的局部特征组合生成较高层的更全局化的特征。这在CV里很好理解,就是像素组合成边缘,边缘生成形状,最后把各种形状组合起来得到复杂的物体表达。在语言里,当然也有类似的组合关系,但是远不如图像来的直接。而且**在图像里,相邻像素必须是相关的**,相邻的词语却未必相关。


5.12.4:卷积神经网络在不同领域的应用

卷积神经网络中的卷积操作是其关键组成,而卷积操作只是一种数学运算方式,实际上对不同类型的数值表示数据都是通用的,尽管这些数值可能表示的是图像像素值、文本序列中单个字符或是语音片段中单字的音频。只要使原始数据能够得到有效地数值化表示,卷积神经网络能够在不同的领域中得到应用,要关注的是如何将卷积的特性更好地在不同领域中应用。卷积神经网络在不同领域的应用总结如下:

1、图像处理

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

卷积神经网络在图像处理领域有非常广泛的应用,这是因为图像数据本身具有的局部完整性非常

2、自然语言处理

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在图像中,卷积核通常对图像的一小块区域进行计算,而在文本中,以一句话所构成的词向量作为输入,每一行代表一个词的词向量。

3、语音处理

将整个语音信号分析得到的时频谱当作一张图像来处理,采用图像中广泛应用的深层卷积网络对其进行识别。

  • 13
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
神经网络CNN)是一类包含卷计算的前馈神经网络,专门用于图像处理等任务。CNN的设计基于图像任务中的平移不变性,也就是说图像中的对象在不同位置具有相同的含义。 CNN在图像处理领域得到了广泛应用,它能够有效处理高维的图像数据(如RGB矩阵表示),避免了传统的前馈网络需要大量输入神经元的问题。 使用CNN进行图像识别基本流程如下: 1. 数据准备:收集并标注大量的图像数据集,将其划分为训练集和测试集。 2. 网络构建:使用CNN的核心概念,如卷层(Conv2D)、池化层(MaxPool2D)、展平层(Flatten)和全连接层(Dense),构建一个适合图像识别任务的网络结构。 3. 训练模型:使用训练集的图像数据作为输入,通过反向传播算法和优化器(如Adam)对网络进行训练,使其能够学习图像中的特征和模式。 4. 评估与调优:使用测试集的图像数据对训练好的模型进行评估,并根据评估结果进行调优,如调整网络参数、增加数据量等。 5. 应用模型:在实际应用中,使用训练好的模型对新的图像数据进行识别,实现图像分类、目标检测等任务。 综上所述,CNN(卷神经网络)是一种用于图像识别的神经网络模型,通过对图像进行卷计算和特征提取,能够有效地进行图像分类和目标检测等任务。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [基于CNN的图像识别(Tensorflow)](https://blog.csdn.net/first_bug/article/details/124938432)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [一弄懂CNN及图像识别](https://blog.csdn.net/m0_61899108/article/details/122401122)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值