理解感受野


1,原文:https://blog.csdn.net/u010725283/article/details/78593410

 

       感受野(receptive field)被稱作是CNN中最重要的概念之一。為什么要研究感受野吶?主要是因為在學習SSD,Faster RCNN框架時,其中prior box和Anchor box的設計,一直搞不明白。當我理解了感受野才有點恍然大悟的感覺。快速看完這篇文章的前提是,要對CNN有個大致了解,feature map等術語要知道。

       先看八股式定義,感受野:在卷積神經網絡CNN中,決定某一層輸出結果中一個元素所對應的輸入層的區域大小,被稱作感受野receptive field。我們看這段定義非常簡單,用數學的語言就是感受野是CNN中的某一層輸出結果的一個元素對應輸入層的一個映射。再通俗點的解釋是,feature map上的一個點對應輸入圖上的區域。注意這里是輸入圖,不是原始圖。好多博客寫的都是原圖上的區域,經過一番的資料查找,發現並不是原圖。

       另外加上一句,目前流行的物體識別方法都是圍繞感受野來做的設計,就如上文提到的SSD和Faster RCNN。理解好感受野的本質我覺的有兩個好處。一,理解卷積的本質;二,更好的理解CNN的整個架構。

 

2,https://www.jianshu.com/p/2b968e7a1715

 

終於在知乎上中找到深度神經網絡中的感受野(Receptive Field) - 藍榮禕的文章 - 知乎
http://zhuanlan.zhihu.com/p/28492837
算是弄清了基本原理,記錄以備忘

1.先舉個例子:

  • e.g.兩層 3*3 卷積操作的有效區域(感受野)是5*5 (所有filter的stride=1,pad=0),示意圖如下:


  • 三層3*3卷積核操作的有效區域是7*7 (所有filter的stride=1,pad=0),示意圖如下:


2. 基本定義:

  • 定義:感受野用來表示網絡內部的不同神經元對原圖像的感受范圍的大小,或者說,convNets(cnn)每一層輸出的特征圖(feature map)上的像素點在原始圖像上映射的區域大小。
  • 神經元之所以無法對原始圖像的所有信息進行感知,是因為在這些網絡結構中普遍使用卷積層和pooling層,在層與層之間均為局部連接。
  • 神經元感受野的值越大表示其能接觸到的原始圖像范圍就越大,也意味着它可能蘊含更為全局,語義層次更高的特征;相反,值越小則表示其所包含的特征越趨向局部和細節。因此感受野的值可以用來大致判斷每一層的抽象層次。

3. 感受野的計算

  • 感受野的計算

    可以看到在Conv1中的每一個單元所能看到的原始圖像范圍是3*3,而由於Conv2的每個單元都是由 2*2范圍的Conv1構成,因此回溯到原始圖像,其實是能夠看到5*5的原始圖像范圍的。因此我們說Conv1的感受野是3,Conv2的感受野是5. 輸入圖像的每個單元的感受野被定義為1,這應該很好理解,因為每個像素只能看到自己。

image.png

在上圖中,數字代表某單元能夠看到的原始圖像像素,我們用r_n表示第n個卷積層中,每個單元的感受野,用k_n和s_n表示第n個卷積層的kernel_size和stride.
對Raw Image進行kernel_size=3, stride 2的卷積操作所得到的fmap1 (fmap為feature map的簡稱,為每一個conv層所產生的輸出)的結果是顯而易見的。序列[1 2 3]表示fmap1的第一個單元能看見原圖像中的1,2,3這三個像素,而第二個單元則能看見3,4,5。這兩個單元隨后又被kernel_size=2,stride 1的Filter 2進行卷積,因而得到的fmap2的第一個單元能夠看見原圖像中的1,2,3,4,5共5個像素(即取[1 2 3]和[3 4 5]的並集)。接下來我們嘗試一下如何用公式來表述上述過程。可以看到,[1 2 3]和[3 4 5]之間因為Filter 1的stride 2而錯開(偏移)了兩位,而3是重疊的。對於卷積兩個感受野為3的上層單元,下一層最大能獲得的感受野為 3*2=6,但因為有重疊,因此要減去(kernel_size - 1)個重疊部分,而重疊部分的計算方式則為感受野減去前面所說的偏移量,這里是2. 因此我們就得到


image.png

繼續往下一層看,我們會發現[1 2 3 4 5]和[3 4 5 6 7]的偏移量仍為2,並不簡單地等於上一層的s_2, 這是因為之前的stride對后續層的影響是永久性的,而且是累積相乘的關系(例如,在fmap3中,偏移量已經累積到4了),也就是說 r_3應該這樣求


image.png

同理:
image.png

。。。。。。可抽象如下:
image.png

理解:第n個卷積層的感受野等於前一個卷積層的感受野輸出再乘以第n卷積層的kernel_size,即第n卷積層要合並多少個,這里算出的是總的量,還要減去之間有重復的量,第n卷積層總共要合並k_n個,那么前后兩兩相比較,空隙共有k_n-1個,比如說:第一層和第二層有重復,第二層和第三層也有重復等等,然后就要計算每兩個之間重復的量有多少,首先每層共有r_n-1個數字,需要減去往右偏移的量,即stride,第1卷積層的stride_1,第二層會在第一層的基礎上偏移stride_2,即總共偏移了 stride_1*stride_2,即偏移量是一個乘積的累計效果,所以式子如下:


image.png

經過去括號簡化。可得下面式子:
image.png


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM