下面介绍CNN的基本概念,包括图像卷积、步长、填充、特征图、多通道卷积、权重共享、感受野和池化等。
假设原始图像大小是5×5,卷积核大小是3×3。首先将卷积核与原始图像左上角3×3对应位置的元素相乘求和,将得到的数值作为结果矩阵第1行第1列的元素值,然后将卷积核向右移动一个单位(步长为1),并与原始图像前三行第2、3、4列对应位置的元素分别相乘求和,将得到的数值作为结果矩阵第1行第2列的元素值,以此类推。
图像卷积就是卷积核矩阵在一个原始图像矩阵上从上往下、从左往右滑动窗口进行卷积计算,然后将所有结果组合到一起得到一个新矩阵的过程。二维卷积示意如图1.9所示。
图1.9 二维卷积示意
严格来说,这里的卷积应该是互相关操作,其与内积操作的区别只在于权重算子互为180°翻转,由于不影响模型的学习,因此在这里我们不做区分。
用一个相同的卷积核对整幅图像进行卷积操作,相当于对图像做一次全图滤波,符合卷积核特征的部分得到的结果比较大,不符合卷积核特征的部分得到的结果比较小,因此,卷积操作后的结果可以较好地表征该区域符合卷积核所描述特征的程度,一次完整的卷积会选出图片上所有符合这个卷积核特征的部分。如果将大量图片作为训练集,则卷积核最终会被训练成有意义的特征,如当识别飞机时,卷积核可以是机身或飞机机翼的形状等。
步长,指的是卷积核在图像上移动的步子,不同的步长会影响输出图的尺寸。
如图1.10所示,输入图大小都是5×5,卷积核大小都是3×3。当步长为1时,卷积后的输出图大小为3×3;当步长为2时,卷积后的输出图大小为2×2。更大的步长意味着空间分辨率的快速下降。
图1.10 步长为1和2的输入图与输出图示意
为了更好地控制输入图和输出图的大小,一般会对输入进行填充(Padding)操作。
填充操作就是在原来输入图的边界外进行扩充,使其变得更大,卷积后的结果也会更大。
图1.11展示了无填充卷积和填充为1的卷积对比。当没有填充时,输入图大小为3×3,输出图大小为2×2,分辨率降低。当给输入图的四个边界各填充1行或者1列0元素时,卷积后输出图大小为4×4,分辨率没有降低。通常会在设计卷积网络层时小心地填充,从而精确控制输入图和输出图的大小关系。
图1.11 无填充卷积与填充为1的卷积对比
图1.9展示的是单个图像的卷积,而对于一个CNN来说,其每一层都由多个图组成,我们称之为特征图或者特征平面,如图1.12所示。
图1.12 特征图
特征图(Feature Map)包含了高度、宽度、通道三个维度,大小为 C × H × W 。
在CNN中,要实现的是多通道卷积,假设输入特征图大小是 C i × H i × W i ,输出特征图大小是 C o × H o × W o ,则多通道卷积如图1.13所示。其中,每一个输出特征图都由 C i 个卷积核与通道数为 C i 的输入特征图进行逐通道卷积,然后将结果相加,一共需要 C i × C o 个卷积核,每 C i 个为一组,共 C o 组。
图1.13 多通道卷积
当对每组进行卷积时,不同的通道使用不同的卷积核。但是,当卷积核在同一幅图的不同空间位置进行卷积时,采取的是权重共享的模式,这是CNN中非常重要的概念。
局部连接的思想来自生理学的感受野机制和图像的局部统计特性,而权重共享则使图像一个局部区域学习的信息可以应用到其他区域,使同样的目标在不同的位置能提取同样的特征。局部连接和权重共享结构大大减少了参数量,将局部连接与全连接网络进行比较可知,局部连接相比全连接网络有明显的计算优势,具体如下。
全连接网络计算量巨大,假设图像尺寸是1000×1000,隐藏层有1000×1000个神经元,参数量为1000×1000×1000×1000=10 12 。而对于局部连接,假如每个神经元只和10×10的输入图像区域相连接,并且卷积核移动步长为10,则参数量为1000×1000×100,相比全连接网络降低了4个数量级。
通常来说,CNN中某一层的参数量由输入通道数 N 、输出通道数 M 和卷积核的大小 r 决定,一层连接的参数量等于 N × M × r × r 。
感受野(Receptive Field)是CNN中的重要概念之一,可以将感受野理解为视觉感受区域的大小。在CNN中,感受野是特征图上的一个点(神经元)在输入图上所对应的区域,如图1.14所示。如果一个神经元的大小受输入层 N × N 大小的神经元区域的影响,那么就可以说该神经元的感受野是 N × N ,因为它反映了 N × N 区域的信息。
图1.14 感受野示例
在图1.14中,Conv2中的像素点为5,是由Conv1的2×2区域计算得来的,而该2×2的区域又由原图像中5×5的区域计算而来,因此该像素的感受野是5×5。可以看出,感受野越大,得到的全局信息越多。
有了感受野再来解释池化(Pooling)就很简单了,在图1.14中,从原图像到Conv1再到Conv2,图像越来越小,每过一级就相当于一次降采样,这就是池化。池化可以通过步长不为1的卷积实现,也可以通过插值采样实现,本质上没有区别,只是权重不同。
最常见的池化操作为平均池化(Mean Pooling)和最大池化(Max Pooling)。平均池化是计算池化区域内所有元素的平均值作为该区域池化后的值;最大池化则选池化区域内元素的最大值作为该区域池化后的值,如图1.15所示。
图1.15 最大池化与平均池化操作示意
在池化操作提取信息的过程中,如果选取区域均值,往往能保留整体数据的特征,较好地突出背景信息;如果选取区域最大值,则能更好地保留纹理特征。池化操作会使特征图缩小,有可能影响网络的准确度,对此可以通过增加特征图的深度来弥补精度的缺失。
通过卷积获得特征之后,下一步则是对这些特征分类。从理论上讲,人们可以把所有解析出来的特征关联到一个分类器上,如Softmax分类器,但计算量非常大,并且极易出现过拟合(Over-fitting)。而池化层则可以对输入的特征图进行压缩,一方面使特征图变小,简化网络计算的复杂度;另一方面进行特征压缩与抽象,提取主要特征,有利于降低过拟合的风险。
池化层可以在一定程度上保持尺度不变性。例如,一辆车的图像被缩小了50%后,我们仍能认出这是一辆车,这说明处理后的图像仍包含原始图片里最重要的特征。图像压缩时去掉的只是一些冗余信息,留下的信息则是具有尺度不变性的特征,其最能表达图像的特征。
假设卷积层输入尺寸即分辨率大小为 F in ,填充大小为 p ,卷积核大小为 k ,步长为 s ,则卷积层输出尺寸的计算公式为
式中,[]表示向下取整。例如,常见的卷积核大小为3×3,填充为1,步长为2,通过式(1.4)可以实现将卷积层输出分辨率变为输入的1/2。