1. 程式人生 > >卷積神經網路中感受野的理解和計算

卷積神經網路中感受野的理解和計算

什麼是感受野

“感受野”的概念來源於生物神經科學,比如當我們的“感受器”,比如我們的手受到刺激之後,會將刺激傳輸至中樞神經,但是並不是一個神經元就能夠接受整個面板的刺激,因為面板面積大,一個神經元可想而知肯定接受不完,而且我們同時可以感受到身上面板在不同的地方,如手、腳,的不同的刺激,如痛、癢等。這說明面板感受器是由很多不同的神經元控制的,那麼每一個神經元所能夠反映的那塊感受器的區域就稱之為“感受野”,感受野即每一個神經元所支配的區域,也可以說這個神經元的活動受到那一塊區域的影響。

卷積神經網路中,整個卷積運算的過程正好和上面的面板刺激過程類似,我們可以將原始影象對應看成感受器(面板),將最終的輸出看成是做出反應的那個神經元。最終輸出到底是什麼狀態(神經元的狀態)所受到的初始影象哪一塊區域的影響(受到那一塊面板的刺激)不正是上面所描述的過程嗎?於是我們給出感受野的定義如下:

卷積神經網路每一層輸出的特徵圖(feature map)上的畫素點在原始影象上對映的區域大小;通俗點說,就是影象的最終輸出的每一個特徵(每一個畫素)到底受到原始影象哪一部分的影響。

在這裡插入圖片描述

圖解說明

為了更好地說明整個卷積神經網路的工作過程,下面以一個例子說明,原始影象的大小為10x10,一共設計了5個網路層,前面4個是卷積層,卷積核的大小為3x3,最後一個是池化層,大小為2x2,為了較簡單的說明,本次所有的步幅stride均為1.

注意:感受野在計算的時候不考慮“邊界填充”,因為填充的邊界已經不是原始影象本身的內容了,感受野描述的是輸出特徵到原始影象的對映關係,故而不考慮padding 。實際建模過程中可能需要填充邊界,原理一樣,只是計算稍微複雜點。

圖解步驟拆分
1. 第一次卷積運算

在這裡插入圖片描述
從上面可以看出:第一層網路輸出的影象中,輸出結果為8x8,output1輸出的每一個特徵(即每一個畫素)受到原始影象的3x3區域內的影響,故而第一層的感受野為3,用字母表示為

RF1=3 (每一個畫素值與原始影象的3x3區域有關)

2. 第二次卷積運算

在這裡插入圖片描述

從上圖可以看出,經歷兩次卷積運算之後,最終的輸出影象為6x6,output2輸出的每一個特徵(即每一個畫素)受到output1的範圍影響為3x3,而output1中的這個3x3又收到原始影象的5x5的範圍的影響,故而第二層的感受野為5,即

RF2=5 (每一個畫素值與原始影象的5x5區域有關)

3. 第三次卷積運算

在這裡插入圖片描述
從上圖可以看出,經歷三次卷積運算之後,最終的輸出影象為4x4,output3輸出的每一個特徵(即每一個畫素)受到output2的範圍影響為3x3,而output2中的這個3x3又受到output1的5x5的範圍的影響,而output1中的這個5x5又受到原始影象的7x7的範圍的影響,故而第三層的感受野為7,即

RF3=7 (每一個畫素值與原始影象的7x7區域有關)

4. 第四次卷積運算

在這裡插入圖片描述

從上圖可以看出,經歷四次卷積運算之後,最終的輸出影象為2x2,output4輸出的每一個特徵(即每一個畫素)受到output3的範圍影響為3x3,而output3中的這個3x3又受到output2的5x5的範圍的影響,而output2中的這個5x5又受到output1的7x7的範圍的影響,而output1中的這個7x7又受到原始圖形的9x9的範圍的影響,故而第四層的感受野為9,即

RF4=9 (每一個畫素值與原始影象的9x9區域有關)

5. 第五次卷積運算

在這裡插入圖片描述
從上圖可以看出,經歷四次卷積運算和一次池化運算之後,最終的輸出影象為1x1,output5輸出的每一個特徵(即每一個畫素)受到output4的範圍影響為2x2,而output4中的這個2x2又受到output3的4x4的範圍的影響,而output3中的這個4x4又受到output2的6x6的範圍的影響,而output2中的這個6x6受到output1的8x8的範圍的影響,而output1中的這個8x8受到原始影象的10x10的範圍的影響,故而第五層的感受野為10,即

RF5=10 (每一個畫素值與原始影象的10x10區域有關)

結論: 從上面的地推過程可以看出,隨著卷積層數的逐漸增加,感受野的範圍在逐漸擴大,也就是說,越靠近後面的輸出,所受到的影象的畫素影響的範圍更加寬闊。卷積神經網路正是通過這種層層推進的方式,每一個卷基層都能學習到不同的特徵,最後實現相關的識別、分類等功能的。

遞推公式

從上面的過程可以看出,感受野的推導是一個遞推的過程,下面將展示這一過程。

RF1=3           k1(第一層的感受野,永遠等於第一個卷積核的尺寸大小)k表示第幾個卷積層

RF2=5       k1 + (k2-1)       RF1+ (k2-1)

RF3=7       k1 + (k2-1) + (k3-1)       RF2+ (k3-1)

RF4=9       k1 + (k2-1) + (k3-1) + (k4-1)       RF3+ (k4-1)

RF4=10       k1 + (k2-1) + (k3-1) + (k4-1) + (k5-1)       RF4+ (k5-1)

從上面可以看出,感受野的大小的求解是一個不斷第一的過程,因為第一層的每一個畫素的感受野始終是第一個卷積核的大小,故而RF1總是最先確定,然後以此類推,逐步求出RF2、RF3、RF4、RF5……

但是上面的所有步長均為 1 ,如果每一次卷積運算的步長 stride 不為1呢,同理,這裡直接給出遞推公式:

RFn=RFn-1 + (kn-1)*stride_n

其中stride_n表示的是第n次卷積的移動步幅stride。

求解過程是從RF1開始的。

感受野的例子

(1)兩層33的卷積核卷積操作之後的感受野是55,其中卷積核(filter)的步長(stride)為1、padding為0,如圖2所示:
在這裡插入圖片描述
圖2:兩層33卷積核操作之後的感受野是55

(2)三層33卷積核操作之後的感受野是77,其中卷積核的步長為1,padding為0,如圖3所示:
在這裡插入圖片描述
圖3:三層33卷積核操作之後的感受野是77

感受野的計算

感受野計算時有下面幾個知識點需要知道:

  • 最後一層(卷積層或池化層)輸出特徵圖感受野的大小等於卷積核的大小。
  • 第i層卷積層的感受野大小和第i層的卷積核大小和步長有關係,同時也與第(i+1)層感受野大小有關。
  • 計算感受野的大小時忽略了影象邊緣的影響,即不考慮padding的大小。

關於感受野大小的計算方式是採用從最後一層往下計算的方法,即先計算最深層在前一層上的感受野,然後逐層傳遞到第一層,使用的公式可以表示如下:
在這裡插入圖片描述
其中,是第i層卷積層的感受野,是(i+1)層上的感受野,stride是卷積的步長,Ksize是本層卷積核的大小。

注意: 此公式與上邊的遞迴公式在原理上是一致的,一個向前計算一個向後計算。

計算VGG16網路每層的感受野

(1)引例:VGG16網路有點複雜,我們先來計算一個簡單的例子,先學會計算感受野,在來分析複雜的網路
在這裡插入圖片描述
圖4:簡單的網路結構

我們從最後一層的池化層開始計算感受野:

pool3:RF=2(最後一層池化層輸出特徵圖的感受野大小等於卷積核的大小)

conv4:RF=(2-1)*1+3=4。

conv3:RF=(4-1)*1+3=6。

pool2:RF=(6-1)*2+2=12。

conv2:RF=(12-1)*1+3=14。

pool1:RF=(14-1)*2+2=28。

conv1:RF=(28-1)*1+3=30。

因此,pool3輸出的特徵圖在輸入圖片上的感受野為30*30。

(2)VGG16網路每層感受野計算
在這裡插入圖片描述
圖5:VGG16網路結構
在VGG16網路中,我們從全連線層開始倒推,直到輸入層,過程如下:

pool5:RF=2。(最後一層池化層輸出特徵圖感受野的大小等於卷積核的大小)

conv5_3:RF=(2-1)* 2+2=4。

conv5_2:RF=(4-1)*1+3=6。

conv5_1:RF=(6-1)*1+3=8。

pool4:RF=(8-1)*2+2=16。

… … … … … … …

類推…

因此我們可以得出:pool5輸出的特徵圖在輸入圖片上的感受野為212212;conv5_3輸出的特徵圖在輸入圖片上的感受野為196196,其它層依次類推:

在這裡插入圖片描述
圖6:VGG16網路感受野計算結果

總結

感受野是卷積神經網路中非常核心的概念,它有助於我們層層剖析每一步卷積所發生的過程,對於我們理解卷積神經網路的運算過程、本質原理都非常有幫助。

參考

  1. https://blog.csdn.net/qq_27825451/article/details/83302662
  2. https://blog.csdn.net/program_developer/article/details/80958716
  3. https://blog.csdn.net/SIGAI_CSDN/article/details/80743475(卷積神經網路為什麼有效)