【面試基礎--深度學習】感受野

        感受野是卷積神經網絡中比較重要的概念,看到了很好的一篇博文,結合這兩篇文章,並加上自己的感悟吧!

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

https://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,這應該很好理解,因爲每個像素只能看到自己。

       具體計算時,從最深處往回計算,以最後一個單元作爲1:

RF = 1
for layer in (high layer To low layer):
  RF = ((RF -1)* stride) + fsize

       根據公式,我們也可以得到,增大感受野的幾種方法:

  • 增加pooling層,但是會降低準確性(pooling過程中造成了信息損失)
  • 增大卷積核的kernel size,但是會增加參數
  • 增加捲積層的個數,但是會面臨梯度消失的問題

        最後談一下個人對感受野的理解吧,

首先爲什麼它很重要?

        前面看過感受野的定義,是表示在前幾層對應的圖像區域的大小,那麼爲了保證所利用的信息是全局的,而不僅僅是局部信息,我們就應該保證感受野較大。同時,合理計算感受野,可以保證效率,例如,輸入圖像大小是128*128,如果最後一層的感受野已經可以超過128,我們可以認爲在做最後的分類判斷時所用到的特徵已經涵蓋了原始圖像所有範圍的信息了。如果能夠儘可能的降低網絡的參數總量,也十分重要。

其次有哪些方法呢?

        網絡層數增加,必然可以使感受野增大。所以在保證梯度的前提下,利用ResNet,DenseNet等結構加大網絡深度。

        使用膨脹卷積  Multi-Scale Context Aggregation by Dilated Convolutions:  https://arxiv.org/abs/1511.07122

        使用可變形卷積等  Deformable Convolutional Networkhttps://arxiv.org/pdf/1703.06211.pdf

最後,多多推公式和複習基礎吧!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章