在上一講中,我們對卷積神經網絡中的卷積操作進行了詳細的解讀,但僅僅是對二維圖像,即通道數為 1 的圖像(灰度圖)進行了卷積,對于三維或者更高維的圖像卷積顯然并沒有這么簡單。
如果圖像大小為 6*6*3,那么這里的 3 指的是三個顏色通道,你可以將其理解為 3 個 6*6 的圖像的堆疊,如果要對此圖像進行卷積的話,我們的濾波器也需要變成三維的,假設采用一個 3*3*3 的濾波器對其進行卷積(這里需要注意的是,濾波器的通道數一定要等于輸入圖像的通道數),根據 ((n+2p-f)/s)+1 的計算公式我們可以知道輸出圖像的大小為 4*4*1,由一個濾波器進行卷積之后輸出圖像的通道不是 3 而是 1 了。
那么究竟如何理解三通道的卷積過程?單通道的卷積操作我們已經知道,就是直接對感受野與濾波器進行元素相乘求和,那三通道呢?我們可以將 3*3*3 的濾波器想象為一個三維的立方體,為了計算立方體濾波器在輸入圖像上的卷積操作,我們首先將這個三維的濾波器放到左上角,讓三維濾波器的 27 個數依次乘以紅綠藍三個通道中的像素數據,即濾波器的前 9 個數乘以紅色通道中的數據,中間 9 個數乘以綠色通道中的數據,最后 9 個數乘以藍色通道中的數據。將這些數據加總起來,就得到輸出像素的第一個元素值。如下圖所示:
這樣做可能還不夠。在實際圖像處理中,僅靠單濾波器很難將復雜的圖像特征進行充分提取。所以,通常而言,我們用來進行卷積的濾波器遠不止一個。下面我們用兩個濾波器對上述圖像進行卷積操作。
我們用第一個濾波器進行卷積得到一個 4*4 的輸出,然后用第二個濾波器進行卷積又得到一個 4*4 的輸出,將這個輸出放到第一個輸出后面,形成了一個 4*4*2 的輸出,這里的 2 的就是濾波器的個數。
關于多通道卷積的另一種理解類似于 DNN 中的標準神經網絡中的 Z=Wx+b 的線性計算,其中 x 為輸入的原始圖像,W 為濾波器,b 偏差項,卷積過程就類似與標準神經網絡的線性計算,完了之后利用激活函數進行激活。還有一個關鍵問題就是卷積層有多少參數,卷積層的參數通常在于濾波器 W,根據濾波器的大小,我們可以計算一個濾波器的參數數量為 f*f*nc,其中 nc 為通道熟量,那 k 個濾波器所含的參數數量則為 f*f*nc*k。
卷積過程到此就差不多解釋完了。我們再看 CNN 的另一個重要操作——池化(pooling)。簡單來說,池化層是用來縮減模型大小,提高模型計算速度以及提高所提取特征的魯棒性。池化操作通常有兩種,一種是常用的最大池化(max pooling),另一種是不常用的平均池化(average pooling)。池化操作過程也非常簡單,假設池化層的輸入為一個 4*4 的圖像,我們用最大池化對其進行池化,執行最大池化的樹池是一個 2*2 的矩陣,執行過程就是將輸入矩陣拆分為不同區域,對于 2*2 的輸出而言,輸出的每個元素都是其對應區域的最大元素值。
最大池化過程就像是應用了一個 2*2 的濾波器以步幅 2 進行區域最大化輸出操作。所以簡單而言,池化的參數就是濾波器的大小 f 和步幅 s,池化的效果就相當于對輸入圖像的高度和寬度進行縮小。值得注意的是,最大池化只是計算神經網絡某一層的靜態屬性,中間并沒有什么學習過程。
池化完成之后就是標準神經網絡中的全連接層了。全連接層我們在 DNN 中有詳細介紹,這里就不再贅述。總之,一個典型的卷積層通常包括卷積層-池化層和全連接層。
下一講中,我們將一起嘗試如何利用 numpy 實現一個簡單的典型的卷積神經網絡。
本文由《自興動腦人工智能》項目部 凱文 投稿。
-
神經網絡
+關注
關注
42文章
4762瀏覽量
100541 -
人工智能
+關注
關注
1791文章
46859瀏覽量
237582 -
卷積神經網絡
+關注
關注
4文章
366瀏覽量
11851
發布評論請先 登錄
相關推薦
評論