如何理解卷积神经网络(CNN)中的卷积和池化?
要說明這個(gè)問題,首先要從計(jì)算機(jī)視覺中的“Hello World”問題說起:MNIST手寫數(shù)字的分類。給定圖像,將其分類。
來自MNIST數(shù)據(jù)集的圖片樣本
MNIST數(shù)據(jù)集中的每個(gè)圖像都是28x28像素,包含一個(gè)居中的灰度數(shù)字。
什么是卷積?
首先,介紹一下什么是卷積神經(jīng)網(wǎng)絡(luò)。
它是使用卷積層(Convolutional layers)的神經(jīng)網(wǎng)絡(luò),基于卷積的數(shù)學(xué)運(yùn)算。
卷積層由一組濾波器組成,濾波器可以視為二維數(shù)字矩陣。這是一個(gè)示例3x3濾波器:
我們可以將濾波器與輸入圖像進(jìn)行卷積來產(chǎn)生輸出圖像,那么什么是卷積操作呢?具體的步驟如下:
這個(gè)4步描述有點(diǎn)抽象,所以讓我們舉個(gè)例子吧。看下面的4x4灰度圖像和3x3濾波器:
圖像中的數(shù)字表示像素亮度,0是黑色,255是白色。我們將對(duì)輸入圖像和濾波器進(jìn)行卷積,生成2x2輸出圖像。
首先,讓我們將濾鏡覆蓋在圖片的左上角:
接下來,我們?cè)谥丿B的圖像和濾波器元素之間逐個(gè)進(jìn)行乘法運(yùn)算,按照從左向右、從上到下的順序。
把最右列的乘積結(jié)果全部相加,得到:
由于濾波器覆蓋在輸入圖像的左上角,因此目標(biāo)像素是輸出圖像的左上角像素:
用同樣的方式處理圖像剩下的區(qū)域:
求卷積有何用?
看完了基本概念,你可能會(huì)有疑問,對(duì)圖像求卷積有什么用嗎?
我們?cè)谇拔闹惺褂玫哪莻€(gè)3x3濾波器,通常稱為垂直**索伯濾波器**(Sobel filter):
看看用它來處理知名的Lena照片會(huì)得到什么:
看出來了嗎?其實(shí),索伯濾波器是是邊緣檢測(cè)器。
現(xiàn)在可以解釋卷積操作的用處了:用輸出圖像中更亮的像素表示原始圖像中存在的邊緣。
你能看出為什么邊緣檢測(cè)圖像可能比原始圖像更有用嗎?
回想一下MNIST手寫數(shù)字分類問題。在MNIST上訓(xùn)練的CNN可以找到某個(gè)特定的數(shù)字。比如發(fā)現(xiàn)數(shù)字1,可以通過使用邊緣檢測(cè)發(fā)現(xiàn)圖像上兩個(gè)突出的垂直邊緣。
通常,卷積有助于我們找到特定的局部圖像特征(如邊緣),用在后面的網(wǎng)絡(luò)中。
填充
在上面的處理過程中,我們用3x3濾波器對(duì)4x4輸入圖像執(zhí)行卷積,輸出了一個(gè)2x2圖像。
通常,我們希望輸出圖像與輸入圖像的大小相同。因此需要在圖像周圍添加零,讓我們可以在更多位置疊加過濾器。3x3濾波器需要在邊緣多填充1個(gè)像素。
這種方法稱之為“相同”填充,因?yàn)檩斎牒洼敵鼍哂邢嗤拇笮 6皇褂萌魏翁畛浞Q為“有效”填充。
池化
圖像中的相鄰像素傾向于具有相似的值,因此通常卷積層相鄰的輸出像素也具有相似的值。這意味著,卷積層輸出中包含的大部分信息都是冗余的。
如果我們使用邊緣檢測(cè)濾波器并在某個(gè)位置找到強(qiáng)邊緣,那么我們也可能會(huì)在距離這個(gè)像素1個(gè)偏移的位置找到相對(duì)較強(qiáng)的邊緣。但是它們都一樣是邊緣,我們并沒有找到任何新東西。
池化層解決了這個(gè)問題。這個(gè)網(wǎng)絡(luò)層所做的就是通過減小輸入的大小降低輸出值的數(shù)量。
池化一般通過簡單的最大值、最小值或平均值操作完成。以下是池大小為2的最大池層的示例:
超強(qiáng)干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生總結(jié)
以上是生活随笔為你收集整理的如何理解卷积神经网络(CNN)中的卷积和池化?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PyTorch中的nn.Conv1d与n
- 下一篇: 卷积神经网络理解