传统的全连接神经网络,缺乏特征组合能力,尤其是面对图像处理,全连接神经网络是对单个像素进行处理,并没有考虑周围像素点与其之间的关系,所以无法利用与形状相关的信息。图像作为三维形状含有重要的空间信息。比如,空间上邻近的像素值相似,RGB的颜色通道间的关联性。使用卷积层的目的就是组合一个区域内的多个像素点,进一步提取空间信息特征。卷积神经网络中出现了一些特有的术语,比如卷积、填充、步长、通道等。下面详细介绍CNN中使用的卷积层的结构。
(1)卷积操作。卷积是一个数学运算概念,它定义一个卷积核(convolutional kernel,有时也称滤波器filter)在输入信号上序列化的积分操作。卷积层对图像进行的处理就是应用卷积核对图像进行卷积操作,该处理过程相当于图像处理中的“滤波器运算”。具体实现可看图5-2中所示的卷积运算的例子。首先把待处理的图像和卷积核都数值化成矩阵的形式,卷积核中的每个元素实际上可看作神经网络的连接权值。
图5-2 输入图像矩阵和卷积核矩阵
卷积操作的第一步是卷积核与输入图像左上角的第一块3×3的区域(该矩形区域在图像处理中也被称为感受野)内积,即把对应位置数字相乘,然后把数字相加,这个计算称为乘积累加运算。把结果输出到新图像左上角的第一个像素位置,从而完成一次卷积运算,该新图像也被称为特征图(图5-3)。图中的符号☉代表卷积操作。
图5-3 卷积运算示意图(第一步)
第二步,卷积核与输入图像右上角的另一块3×3的区域进行内积运算,同样是让卷积核内的数字与相应位置的图像像素值相乘累加,可以得到特征图中第二个像素的数值(图5-4)。
图5-4 卷积运算示意图(第二步)
第三步,利用卷积核与输入图像左下角的第三块3×3的区域进行内积运算,同样将累加和输出到特征图的左下角(图5-5)。
图5-5 卷积运算示意图(第三步)
最后一步,利用卷积核与输入图像右下角的第四块3×3的区域进行内积运算,同样将累加和输出到特征图最后一个元素位置(图5-6)。
图5-6 卷积运算示意图(第四步)
在卷积层中的卷积运算可以看作从左到右、从上到下以一定间隔滑动卷积核,与原始图像对应位置进行线性加权的运算,这里的权值为卷积核里的元素值,图像中的像素值为输入,输出值为特征图中的像素值。(www.xing528.com)
同全连接的神经网络类似,除了权重参数,卷积神经网络也存在偏置。卷积神经网络中,卷积核的参数就对应之前的权重。包含偏置的卷积运算的处理过程如图5-7所示。
图5-7 加入偏置的卷积运算
(2)填充。从上面的卷积操作可以看出,卷积操作会减少原始图像的尺寸,那么如果重复多次卷积操作后,特征图输出大小就有可能变为1,导致卷积操作不再有效。为了避免出现这样的情况,就要使用填充(padding)处理。填充是指在进行卷积运算之前,向输入图像的四周填入固定的数据(比如0等),是卷积层中经常会用到的处理步骤。比如在刚才的例子中,将填充的幅度设为1,即将图像周围增加一圈数据0,那么相对于尺寸大小(4,4)的输入图像,通过填充,大小为(4,4)的原始输入数据增大为(6,6)的形状。然后,应用大小为(3,3)的卷积核,输出大小也会保持为原来的(4,4)。因此,经过填充后的卷积运算就可以保持图像大小不变后传给下一层。填充的幅度也可以设置成2、3等任意的整数。在图5-8的例子中,如果将填充参数设为2,则输入数据的大小变为(8,8)。
图5-8 填充操作
(3)步长。步长(stride)是指卷积在输入图像上滑动时移动的像素数量。之前的例子中步长都是1,代表卷积每次只移动一个像素,如果将步长设为2,代表应用卷积核的窗口的间隔变为2个像素,每次卷积的窗口区域移动2个像素。在图5-9的例子中,对输入大小为(5,5)的图像,以步长2应用卷积核,输出大小变为(2,2)。
图5-9 步长为2时的卷积运算
(4)通道。之前的示例都是以有宽度、高度的二维图像进行卷积操作,可以看作灰度图像这类单通道图像的运算处理过程。但是,对于彩色图像而言,除了宽度、高度之外,需要考虑RGB三种色彩通道分别处理,此时可以看作三维数据的卷积操作。图5-10以三通道的数据为例(如彩色图像),展示了卷积运算的结果。和二维数据时相比,可以发现卷积核的通道数变成了与输入图像的通道数保持一致,均为三,此时会按通道进行输入图像和卷积核的卷积运算,并将结果相加得到输出图像。
图5-10 三通道卷积运算
在三维数据的卷积运算中,往往需要设定多个卷积核用以更多特征的提取,每个卷积核的通道数要与输入图像的通道数设为相同的值。上图可以看作与彩色输入图像进行第一步卷积时的处理过程,图像和卷积核的通道数均为三,此时的通道数和RGB代表的色彩数量相关。但需要注意的是,卷积核数量可以设为其他值,而每个卷积层输出的图像通道数等于该卷积层中卷积核的数量,如在LeNet中的C1和C3层卷积核的数量分别为6和16,则C1和C3层输出图像的通道数分别为6和16,此时的通道数量已与RGB颜色没有任何关系。
综上来看,增大步长后会使输出图像变小。而增大填充后,输出图像会变大。这样的关系有没有算式呢?接下来,看一下对于填充和步长,如何计算输出大小。这里,假设输入图像为H×W×D1,卷积核大小为F×F,卷积核的数量为K,输出特征图大小为(OH, OW),填充幅度为P,步长为S。此时,输出特征图图像的宽度、高度和通道数分别为:
在上面的公式中,虽然只要代入值就可以计算输出大小,但当输出大小结果是小数时,需要采取报错等对策。而根据深度学习的框架的不同,当值无法除尽时,有时会向最接近的整数四舍五入,不进行报错而继续运行。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。