1. 程式人生 > >卷積神經網路物體檢測之感受野大小計算

卷積神經網路物體檢測之感受野大小計算

學習RCNN系列論文時, 出現了感受野(receptive field)的名詞, 感受野的尺寸大小是如何計算的,在網上沒有搜到特別詳細的介紹, 為了加深印象,記錄下自己對這一感念的理解,希望對理解基於CNN的物體檢測過程有所幫助。

1 感受野的概念

  在卷積神經網路中,感受野的定義是 卷積神經網路每一層輸出的特徵圖(feature map)上的畫素點在原始影象上對映的區域大小。

  RCNN論文中有一段描述,Alexnet網路pool5輸出的特徵圖上的畫素在輸入影象上有很大的感受野(have very large receptive fields (195 × 195 pixels))和步長(strides (32×32 pixels) ), 這兩個變數的數值是如何得出的呢?

2 感受野大小的計算

 感受野計算時有下面的幾個情況需要說明:

(1)第一層卷積層的輸出特徵影象素的感受野的大小等於濾波器的大小

(2)深層卷積層的感受野大小和它之前所有層的濾波器大小和步長有關係

(3)計算感受野大小時,忽略了影象邊緣的影響,即不考慮padding的大小,關於這個疑惑大家可以閱讀一下參考文章2的解答進行理解

這裡的每一個卷積層還有一個strides的概念,這個strides是之前所有層stride的乘積。  

即strides(i) = stride(1) * stride(2) * ...* stride(i-1) 

關於感受野大小的計算採用top to down的方式, 即先計算最深層在前一層上的感受野,然後逐漸傳遞到第一層,使用的公式可以表示如下:

    RF = 1 #待計算的feature map上的感受野大小
for layer in (top layer To down layer):
RF = ((RF -1)* stride) + fsize

stride 表示卷積的步長; fsize表示卷積層濾波器的大小

用python實現了計算Alexnet  zf-5和VGG16網路每層輸出feature map的感受野大小,實現程式碼:

 receptiveField.py

執行後的結果如下:

參考:

4 Convolutional Feature Maps: Elements of Efficient (and Accurate) CNN-based Object Detection

5 Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition