卷积神经网络是一种用来处理局部和整体相关性的计算网络结构,被应用在图像识别、自然语言处理甚至是语音识别领域,因为图像数据具有显著的局部与整体关系,其在图像识别领域的应用获得了巨大的成功。
5.1 卷积神经网络的组成层
以图像分类任务为例,在表5.1所示卷积神经网络中,一般包含5种类型的网络层次结构:
表5.1 卷积神经网络的组成
CNN层次结构 | 输出尺寸 | 作用 |
输入层 | W1×H1×3 | 卷积网络的原始输入,可以是原始或预处理后的像素矩阵 |
卷积层 | W1×H1×K | 参数共享、局部连接,利用平移不变性从全局特征图提取局部特征 |
激活层 | W1×H1×K | 将卷积层的输出结果进行非线性映射 |
池化层 | W2×H2×K | 进一步筛选特征,可以有效减少后续网络层次所需的参数量 |
全连接层 | (W2⋅H2⋅K)×C | 将多维特征展平为2维特征,通常低维度特征对应任务的学习目标(类别或回归值) |
W1×H1×3对应原始图像或经过预处理的像素值矩阵,3对应RGB图像的通道;K表示卷积层中卷积核(滤波器)的个数;W2×H2为池化后特征图的尺度,在全局池化中尺度对应1×1;(W2⋅H2⋅K)是将多维特征压缩到1维之后的大小,C对应的则是图像类别个数。
5.1.1 输入层
输入层(Input Layer)通常是输入卷积神经网络的原始数据或经过预处理的数据,可以是图像识别领域中原始三维的多彩图像,也可以是音频识别领域中经过傅里叶变换的二维波形数据,甚至是自然语言处理中一维表示的句子向量。以图像分类任务为例,输入层输入的图像一般包含RGB三个通道,是一个由长宽分别为H和W组成的3维像素值矩阵H×W×3,卷积网络会将输入层的数据传递到一系列卷积、池化等操作进行特征提取和转化,最终由全连接层对特征进行汇总和结果输出。根据计算能力、存储大小和模型结构不同,卷积神经网络每次可以批量处理的图像个数不尽相同,若指定输入层接收到的图像个数为N,则输入层的输出数据为N×H×W3。
5.1.2 卷积层
卷积层(Convolution Layer)通常用作对输入数据进行特征提取,通过卷积核矩阵对原始数据中隐含关联性的一种抽象。卷积操作原理上其实是对两张像素矩阵进行点乘求和的数学操作,其中一个矩阵为输入的数据矩阵,另一个矩阵则为卷积核(滤波器或特征矩阵),求得的结果表示为原始图像中提取的特定局部特征。图5.1表示卷积操作过程中的不同填充策略,上半部分采用零填充,下半部分采用有效卷积(舍弃不能完整运算的边缘部分)。
图5.1 卷积操作示意图
5.1.3 激活层
激活层(Activation Layer)负责对卷积层抽取的特征进行激活,由于卷积操作是由输入矩阵与卷积核矩阵进行相差的线性变化关系,需要激活层对其进行非线性映射。激活层主要由激活函数组成,即在卷积层输出结果的基础上嵌套一个非线性函数,让输出的特征图具有非线性关系。卷积网络中通常采用ReLU来充当激活函数(还包括tanh和sigmoid等),ReLU的函数形式如下公式所示,能够限制小于0的值为0,同时大于等于0的值保持不变。
5.1.4 池化层
池化层又被称为降采样层(Downsampling Layer),作用是对感受域内的特征进行筛选,提取区域内最具代表性的特征,能够有效地降低输出特征尺度,进而减少模型所需要的参数量。按操作类型通常分为最大池化(Max Pooling)、平均池化(Average Pooling)和求和池化(Sum Pooling),它们分别提取感受域内最大、平均与总和的特征值作为输出,最常用的是最大池化。
5.1.5 全连接层
全连接层(Full Connected Layer)负责对卷积神经网络学习提取到的特征进行汇总,将多维的特征输入映射为二维的特征输出,高维表示样本批次,低维常常对应任务目标。
5.2 卷积在图像中有什么直观作用
在卷积神经网络中,卷积常用来提取图像的特征,但不同层次的卷积操作提取到的特征类型是不相同的,特征类型粗分如表5.2所示。
表5.2 卷积提取的特征类型
卷积层次 | 特征类型 |
浅层卷积 | 边缘特征 |
中层卷积 | 局部特征 |
深层卷积 | 全局特征 |
图像与不同卷积核的卷积可以用来执行边缘检测、锐化和模糊等操作。表5.3显示了应用不同类型的卷积核(滤波器)后的各种卷积图像。
表5.3 一些常见卷积的作用
卷积作用 | 卷积核 | 卷积后图像 |
输出原图 | [000 010 000] |
边缘检测(突出边缘差异) | [10−1 000 −101] |
边缘检测(突出中间值) | [−1−1−1 −18−1 −1−1−1] |
图像锐化 | [0−10 −15−1 0−10] |
方块模糊 | [111 111 111]×19 |
高斯模糊 | [121 242 121]×116 |
5.3 卷积层有哪些基本参数
卷积层中需要用到卷积核(滤波器或特征检测器)与图像特征矩阵进行点乘运算,利用卷积核与对应的特征感受域进行划窗式运算,需要设定卷积核对应的大小、步长、个数以及填充的方式,如表5.4所示。
表5.4 卷积层的基本参数
参数名 | 作用 | 常见设置 |
卷积核大小(Kernel Size) | 卷积核的大小定义了卷积的感受野 | 在过去常设为5,如LeNet-5;现在多设为3,通过堆叠 3×33×3的卷积核来达到更大的感受域 |
卷积核步长(Stride) | 定义了卷积核在卷积过程中的步长 | 常见设置为1,表示滑窗距离为1,可以覆盖所有相邻位置特征的组合;当设置为更大值时相当于对特征组合降采样 |
填充方式(Padding) | 在卷积核尺寸不能完美匹配输入的图像矩阵时需要进行一定的填充策略 | 设置为'SAME'表示对不足卷积核大小的边界位置进行某种填充(通 |
输入通道数(In Channels) | 指定卷积操作时卷积核的深度 | 默认与输入的特征矩阵通道数(深度)一致;在某些压缩模型中会采用通道分离的卷积方式 |
输出通道数(Out Channels) | 指定卷积核的个数 | 若设置为与通道数一样的大小,可以保持输入输出维度的一致性;若采用比输入通道数更小的值,则可以减少整体网络的参数量 |
卷积操作维度变换公式:
其中,Id为输入维度,Od为输出维度,ksize为卷积核大小,s为步长。
5.4 卷积核有什么类型
常见的卷积主要由连续紧密的卷积核对输入的图像特征进行滑窗式点乘求和操作,除此之外还有其他类型的卷积核在不同的任务中会用到,具体分类如表5.5所示。
表5.5 卷积核分类
卷积类别 | 示意图 | 作用 |
标准卷积 |
|
最常用的卷积核,连续紧密的矩阵形式可以提取图像区域中的相邻像素之间的关联关系 3×3的卷积核可以获得3×3像素范围的感受野 |
扩张卷积(带孔卷积或空洞卷积) |
|
引入一个称作扩张率(Dilation Rate)的参数,使同样尺寸的卷积核可以获得更大的感受野,相应的在相同感受野的前提下比普通卷积采用更少的参数。同样是3×3的卷积核尺寸,扩张卷积可以提取 5×5范围的区域特征,在实时图像分割领域广泛应用 |
转置卷积 |
|
先对原始特征矩阵进行填充使其维度扩大到适配卷积目标输出维度,然后进行普通的卷积操作的一个过程,其输入到输出的维度变换关系恰好与普通卷积的变换关系相反,但这个变换并不是真正的逆变换操 作,通常称为转置卷积(Transpose Convolution)而不是反卷积(Deconvolution)。转置卷积常见于目标检测领域中对小目标的检测核图像分割领域还原输入图像尺度 |
离卷积 | 标准的卷积操作是同时对原始图像H×W×C三个方向的卷积运算,假设有K个相同尺寸的卷积核,这样的卷积操作需要用到的参数为H×W×C×K个;若将长宽与深度方向的卷积操作分离出变为H×W 与C的两步卷积操作,则同样的卷积核个数K,只需要(H×W+C)×K个参数,便可得到同样的输出尺度。可分离卷积(Seperable Convolution)通常应用在模型压缩或一些轻量的卷积神经网络中,如MoblieNet[1]、Xception[2]等 |
5.5 二维卷积与三维卷积有什么区别
- 二维卷积
二维卷积操作如图5.3所示,为了更直观的说明,分别展示在单通道和多通道输入中,对单个通道输出的卷积操作。在单通道输入的情况下,若输入卷积核尺寸为(kh,kw,1),卷积核在输入图像的空间维度上进行滑窗操作,每次滑窗和(kh,kw)窗口内的值进行卷积操作,得到输出图像中的一个值。在多通道输入的情况下,假定输入图像特征通道数为3,卷积核尺寸则为(kh,kw,3),每次滑窗与3个通道上的(kh,kw窗口内的所有值进行卷积操作,得到输出图像中的一个值。
- 三维卷积
D卷积操作如图所示,同样分为单通道和多通道,且假定只使用1个卷积核,即输出图像仅有一个通道。对于单通道输入,与2D卷积不同之处在于,输入图像多了一个深度(depth)维度,卷积核也多了一个kd维度,因此3D卷积核的尺寸为(kh,kw,kd),每次滑窗与(kh,kw,kd)窗口内的值进行相关操作,得到输出3D图像中的一个值。对于多通道输入,则与2D卷积的操作一样,每次滑窗与3个channels上的(kh,kw,kd)窗口内的所有值进行相关操作,得到输出3D图像中的一个值。