![深度学习经典案例解析:基于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=1739414888-0yY6ijemcgyFGbiBc41dTq8TK5AzfEnx-0-a335cca8daf51df58480af8ef599b347)
图2-1 输入矩阵、卷积核、特征矩阵及卷积运算符
![](https://epubservercos.yuewen.com/7B8A32/21511157108180906/epubprivate/OEBPS/Images/26_02.jpg?sign=1739414888-E5goVGY4zNDrWhPMjZio9dxvrIdv3R5E-0-76b3ea2ab51cf996e4e0697c24a9ba5e)
图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=1739414888-AtuJGfHfpf5gEG6pN26MwIsWtgy0uvSz-0-6f9a93a7c16414975d48633d9c866f5d)
图2-3 滑动卷积运算步骤2
步骤3:在步骤2的基础上,向右滑动1个单位,将阴影部分的4个元素与卷积核对应位置的元素相乘后,再相加,作为特征矩阵的第3个元素,如图2-4所示。
![](https://epubservercos.yuewen.com/7B8A32/21511157108180906/epubprivate/OEBPS/Images/26_04.jpg?sign=1739414888-l8gZ5kt0VfrYkomTgSe032gvDa1TbMkY-0-01e91c547a1799eae5d6b27f86ea914b)
图2-4 滑动卷积运算步骤3
步骤4:一旦完成第一行的运算之后,上述运算过程就从下一行开始从左到右继续进行,如图2-5所示。
![](https://epubservercos.yuewen.com/7B8A32/21511157108180906/epubprivate/OEBPS/Images/27_01.jpg?sign=1739414888-TRJcq0zSZPjJMOA5rEucOJQDVLamd1wb-0-4e90331489a946d8f2d2b0b069d30a9d)
图2-5 滑动卷积运算步骤4
步骤5:重复相同的步骤,直到全部完成(见图2-6)。
![](https://epubservercos.yuewen.com/7B8A32/21511157108180906/epubprivate/OEBPS/Images/27_02.jpg?sign=1739414888-S4YKCI7rROIBRRRz8f6xUXTgiZs9q6RP-0-1363de2ba0e897ac90c8b027dfb78eec)
图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=1739414888-WKCbTYYsLauFFFrqGduS3YAARS2qymSu-0-3694a94f643904f8859938f29ba08643)
图2-7 通过零填充实现滑动卷积的过程示意图
![](https://epubservercos.yuewen.com/7B8A32/21511157108180906/epubprivate/OEBPS/Images/28_02.jpg?sign=1739414888-KFUJlqFmmjUZKEIbEEDQ13z1SRWIetMt-0-6b5d9ee8b30e999fd18ba3c7b2bb4486)
图2-8 特征矩阵中第(3,1)元素的计算过程
如图2-9所示,输入矩阵中第(3,1)元素的值为20,在输入矩阵中的值是最大的,但通过卷积运算后结果为2,原因是子矩阵与卷积核的形态差异很大。
![](https://epubservercos.yuewen.com/7B8A32/21511157108180906/epubprivate/OEBPS/Images/28_03.jpg?sign=1739414888-fqhkEFjwLBAULcOaMdUf7swKcrAqq3gR-0-9164d73f2f17d34368d0e38a5208e668)
图2-9 特征矩阵中第(2,1)元素的计算过程
如果要使特征矩阵中第(2,1)元素的值变大,可以将卷积核更换为和对应的子矩阵与卷积核在形态上类似的,如图2-10所示。
![](https://epubservercos.yuewen.com/7B8A32/21511157108180906/epubprivate/OEBPS/Images/29_01.jpg?sign=1739414888-famDW68cuY5mZKkCFoj0tdnICOvviojk-0-2604816b9b258dc4d6aa0d55020b86d0)
图2-10 更换卷积核后特征矩阵中第(2,1)元素的计算过程
通过上面的分析可知,对二维数字图像进行卷积运算,可以判断图像的像素与卷积核的相似程度,相似程度越高,得到的响应值越大,因此可以通过滑动卷积运算来提取图像的特征。