![深度学习经典案例解析:基于MATLAB](https://wfqqreader-1252317822.image.myqcloud.com/cover/874/41309874/b_41309874.jpg)
2.1 CNN的核心——“卷积”
本案例主要介绍卷积神经网络(Convolutional Neural Networks,CNN)。在此之前,需要先对“二维卷积”(以下简称“卷积”)进行深入了解,它是研究卷积神经网络的前提和基础。
从系统工程的角度看,卷积是为研究系统对输入信号的响应而提出的,卷积有很多种,本节着重介绍二维滑动卷积。
滑动卷积涉及三个矩阵:第一个矩阵通常尺寸较大且固定不动,本书称之为“输入矩阵”(或“待处理矩阵”);第二个矩阵尺寸较小,在输入矩阵上从左到右、从上到下进行滑动,本书称之为“卷积核”;卷积核在输入矩阵上面滑动的过程中,将对应的两个小矩阵的相应元素相乘并求和,结果依次作为第三个矩阵元素,本书称该矩阵为“特征矩阵”。上述三个矩阵及卷积运算符如图2-1所示。
下面,详细地看一下滑动卷积的运算过程。将图2-1中所示的两个矩阵进行卷积运算。
步骤1:将阴影部分的4个元素与卷积核对应位置的元素相乘后,再相加,作为特征矩阵的第1个元素,如图2-2所示。
![](https://epubservercos.yuewen.com/7B8A32/21511157108180906/epubprivate/OEBPS/Images/26_01.jpg?sign=1739203122-dyHVxUm2A14vvebkPsuapMbtsZ9fn9xw-0-84dd650e0a406e6d6445d1437b2c84da)
图2-1 输入矩阵、卷积核、特征矩阵及卷积运算符
![](https://epubservercos.yuewen.com/7B8A32/21511157108180906/epubprivate/OEBPS/Images/26_02.jpg?sign=1739203122-vgTaxXxh6oFO6oqwK1PhjIsDa3Jo9Sts-0-4b0fa5654f6ec53228aac633d176cc4d)
图2-2 滑动卷积运算步骤1
计算过程如下。
(1×1) +(3×0) +(2×0) +(9×1) =10
步骤2:在步骤1的基础上,向右滑动1个单位,将阴影部分的4个元素与卷积核对应位置的元素相乘后,再相加,作为特征矩阵的第2个元素,如图2-3所示。
![](https://epubservercos.yuewen.com/7B8A32/21511157108180906/epubprivate/OEBPS/Images/26_03.jpg?sign=1739203122-AZraqPt1MMOe7MH2MEYX7mQ6rrjLW9P9-0-9037abf3d3b4b34b024123f61a2191c9)
图2-3 滑动卷积运算步骤2
步骤3:在步骤2的基础上,向右滑动1个单位,将阴影部分的4个元素与卷积核对应位置的元素相乘后,再相加,作为特征矩阵的第3个元素,如图2-4所示。
![](https://epubservercos.yuewen.com/7B8A32/21511157108180906/epubprivate/OEBPS/Images/26_04.jpg?sign=1739203122-f0pjhQczRk9TSdHabqJiT8GMC6ipyTM1-0-6fc6b04a27e48d9dfcbef0d1aa7f7035)
图2-4 滑动卷积运算步骤3
步骤4:一旦完成第一行的运算之后,上述运算过程就从下一行开始从左到右继续进行,如图2-5所示。
![](https://epubservercos.yuewen.com/7B8A32/21511157108180906/epubprivate/OEBPS/Images/27_01.jpg?sign=1739203122-SWFryCbBNv2GNaArFa9Qce1wX4NVJq2T-0-0a969739141b15312b2c2b00598f72b1)
图2-5 滑动卷积运算步骤4
步骤5:重复相同的步骤,直到全部完成(见图2-6)。
![](https://epubservercos.yuewen.com/7B8A32/21511157108180906/epubprivate/OEBPS/Images/27_02.jpg?sign=1739203122-Y7I5eNVnvRON2HRFzZ4qGyjvLJz0eyKH-0-53ad028be37c2e09310b14e4d2aa3ad3)
图2-6 滑动卷积运算的结果
在上述卷积运算的过程中,每次都是滑动1个像素。当然,也可以每次滑动两个像素乃至多个像素。每次滑动的像素个数,本书称之为步长(Stride)。
请读者仔细观察图2-1所示的输入矩阵与特征矩阵的元素的个数,不难发现,特征矩阵元素的个数少于输入矩阵的元素个数(请读者思考其中的原因)。如果需要得到与输入矩阵元素个数相等的特征矩阵该如何处理呢?方法很简单,需要对输入矩阵的边缘添加0元素,这个过程称之为零填充(Zero Padding)。通过零填充,实现滑动卷积的过程如图2-7所示。
在二维滑动卷积运算过程中,卷积核在滑动过程中始终都在输入矩阵内部,所得到的特征矩阵的元素个数会比输入矩阵元素个数少,在程序中称这种滑动卷积方式为valid;如果采用零填充的方式,使特征矩阵元素的个数与输入矩阵元素个数相同,在程序中称这种滑动卷积方式为same。
如图2-8所示,特征矩阵的(3,1)元素的值最大。那么,为什么该元素的值最大呢?通过观察输入矩阵和卷积核元素的特征可知:第(3,1)元素所对应的子矩阵与卷积核在形态上类似,二者都是对角矩阵,而且相同位置上的数值都较大。由此可见,子矩阵与卷积核在形态上类似时,卷积运算就会生成一个较大的值。
![](https://epubservercos.yuewen.com/7B8A32/21511157108180906/epubprivate/OEBPS/Images/28_01.jpg?sign=1739203122-Kfa4yxXK1B23TDMWkNjIt7T68bnuCQC0-0-53bf85c0dca63390f3396463dfb99e07)
图2-7 通过零填充实现滑动卷积的过程示意图
![](https://epubservercos.yuewen.com/7B8A32/21511157108180906/epubprivate/OEBPS/Images/28_02.jpg?sign=1739203122-rHEuZG4u0uVrBruhVfG4Ie5w1gwRHMjk-0-d4673ef1c374200e6ccceb3f0ad3d49a)
图2-8 特征矩阵中第(3,1)元素的计算过程
如图2-9所示,输入矩阵中第(3,1)元素的值为20,在输入矩阵中的值是最大的,但通过卷积运算后结果为2,原因是子矩阵与卷积核的形态差异很大。
![](https://epubservercos.yuewen.com/7B8A32/21511157108180906/epubprivate/OEBPS/Images/28_03.jpg?sign=1739203122-aETy5q7fT6hv7GLBY8MtppSNntdocs2W-0-4b5f5b6aa269245426b68d22b4d4c589)
图2-9 特征矩阵中第(2,1)元素的计算过程
如果要使特征矩阵中第(2,1)元素的值变大,可以将卷积核更换为和对应的子矩阵与卷积核在形态上类似的,如图2-10所示。
![](https://epubservercos.yuewen.com/7B8A32/21511157108180906/epubprivate/OEBPS/Images/29_01.jpg?sign=1739203122-4bnJ0zyVnXTuBNwv8ozT49UKCU91LeaA-0-7842b45365fe29c76f3d27ed7b542b28)
图2-10 更换卷积核后特征矩阵中第(2,1)元素的计算过程
通过上面的分析可知,对二维数字图像进行卷积运算,可以判断图像的像素与卷积核的相似程度,相似程度越高,得到的响应值越大,因此可以通过滑动卷积运算来提取图像的特征。