在學習計算感受野(Receptive field)之前,先可視化壹下感受野吧。舉壹個例子,原始圖像為5x5,卷積核(Kernel Size)為3x3,padding 為1x1,stride為2x2,依照此卷積規則,連續做兩次卷積。熟悉卷積過程的朋友都知道第壹次卷積結果是3x3大小的feature map,第二次卷積結果是2x2大小的feature map。整個過程如圖所示:
如圖所示,第壹層卷積結束後,感受野是3x3。在第二層卷積結束了,感受野是7x7
公式壹 :這個算法從top往下層層叠代直到追溯回input image,從而計算出RF。
(N-1)_RF = f(N_RF, stride, kernel) = (N_RF - 1) * stride + kernel
其中,RF是感受野。N_RF和RF有點像,N代表 neighbour, 指的是第N層feature map的壹個feature在N-1層的RF ,記住N_RF只是壹個中間變量,不要和RF混淆。 stride是N-1層的步長,ksize是N-1層卷積核大小。
我來解釋壹下這個公式。首先,我們的問題是右壹的紅叉叉映射到左壹中,應該是什麽size?自然思路就是右壹的紅叉叉映射到中間是什麽size?因為卷積核是3x3,所以右壹的紅叉叉(1個feature)映射到中間是3x3. 因為壹個feature是通過kernel卷積而來, 所以最後壹層(第N層)的感受野即為(1-1) * 2 + 3 = 3, 就是kernel size. 那麽接下來我們如果算出來中間3x3的紅框框映射到左壹是什麽size,不就解決了我們的問題嘛。聰明的我們就發現了從中間映射到左邊的size是kernel_size+stride * (3-1). 抽象壹下就是kernel_size +stride * (N_RF-1)嘛。接下來就很簡單了,壹層又壹層的叠代下去直到叠代到第壹層,就求出了RF。 Note: kernel_size和stride是左壹的,而N_RF是中間的, 代表中間在左壹的感受野。
舉例:第壹層ksize=3,stride=2; 第二層ksize=3,stride=2; 第三層ksize=3,stride=1
則第三層輸出的featuremap為3x3(逐點掃描), feature map上任壹點的感受野為kernel size大小3x3.
(若第三層的stride=2, 則輸出的feature map為2x2, 即四個頂點)
第四層在第三層的感受野是3,但stride和kernel size為第三層的參數
總的感受野為23
兩個小卷積(3*3)對於5×5網絡感知野相同的替代性。