最近面試問到了有關感受野的知識,所以總結 了一下:
參考鏈接:CNN中感受野的計算、深度學習中的感受野計算
定義:感受野就是網絡中輸出特徵圖對應輸入圖像的區域。簡單地說,就是特徵圖裏面的一個元素受輸入圖像多大區域像素的影響。
所以根據定義,如果我們只計算某兩個連續層之間的感受野,則可以通過直接畫圖,看輸入圖像多大的範圍對應特徵圖中的一個點來確定兩者之間的感受野。
但是,如果網絡比較深,那麼計算最後的特徵圖和輸入圖像的感受野,則變得異常麻煩。好在有人已經總結了公式,如下:
k_j表示的第j層的kernel_size,s_j表示第j層的stride.這個式子分爲兩部分,一部分是指k_j,即局部感受野,另一部分是stride,可理解爲當前層在每多一個原子,上一層的感受野多增加stride個(在第一個局部感受野的基礎上增加的;
其中,F(i,i)=1;i爲最後一層,0爲輸入層。一般算到F(i,0)。
下面我拿一個例子來算算:
答案如下:
pool3的一個輸出對應pool3的輸入大小爲2*2
對應conv4的輸入爲4*4
對應conv3的輸入爲6*6
對應pool2的輸入爲12*12
對應conv2的輸入爲14*14
對應pool1的輸入爲28*28
對應conv1的輸入爲30*30
所以pool3的感受野大小就是30*30