感受野(receptive field)
CNN中,某一層輸出結果中一個元素所對應的輸入層的區域大小.
感受野計算
從后往前
output field size = ( input field size - kernel size + 2 × padding ) / stride + 1,變形之后得到input field size = (output field size - 1)× stride - 2 × padding + kernel size。因此可以通過后式從最后一層到第一次級聯后計算在原圖上的感受野。計算感受野時不需要考慮padding(因為我們不是在計算具體有邊界的映射區域,而是計算抽象的大小):
RF = 1 #待計算的feature map上的感受野大小
for layer in (top layer To down layer):
RF = ((RF -1)* stride) + kernel size
從前往后[1]
\(l_k\) 是第k層的每個點的感受野, \(f_k\)是第k層卷積核的大小(寬或高, 並假設寬高相等), \(s_i\)是第i層卷積的stride, 在第k層的感受野比第k-1層的感受野大 \((f_k−1)\times S_{k−1}=(f_k - 1) \times \prod_{i=1}^{k-1}s_i\).
孔洞卷積
下面考慮計算帶孔卷積(dialated conv)的感受野的理論值(實際上將孔洞也算進感受區域了,如果計算非孔位置的面積那就和不帶孔洞的感受野的值相等了)。
卷積核的dialate屬性定義為卷積核的元素間距,如 dialate=2 是每隔一個像素位置應用一個卷積元素,dialate=1就是普通的無孔卷積。那么大小\(f_k\),dialate=d的卷積核的等價卷積作用大小為:\(f_k'=(f_k-1)d+1\).
然后用\(f_k'\)代替\(f_k\),采用上述的兩種計算方式計算感受野.
舉例
例子:
如果有三層CNN,分別為con3x3, dilation=1, conv3x3, dialation=2, conv3x3, dilation=5,它們的stried=1,則最后一層每個神經元的感受野為17x17.
