這兩篇部落格各有優缺點,我結合自己的理解分析一下。
概念:
感受野(receive field)是指當前feature map中的乙個原子點p與輸入層中多少個原子個數相關的問題,假設輸入層相關的點為(rf*rf)個(假設長寬兩個方向上做同樣尺度的操作),即輸入層中rf*rf個原子值的變化會影響當前feature map中的指定原子p,而輸入層中其他原子變化並不會影響這個指定原子p。顯然區域性感受野只跟kernel size有關,與stride無關。這也是卷積層的兩個重要特性之一(區域性感受野和引數共享)。顯然rf>=1.
當然感受野也可以作為乙個相對概念,即不一定是相對於輸入層的感受野,你也可以定義任意層l1相對於另外任意層l2的相對域(只需要滿足約束條件:l2不能再l1層的後面,檔l1==l2時,rf==1).
問題:求任意層的輸出feature map上的感受野f(則感受原子點個數即為f*f).
首先我們來分析比較簡單的一種情況:
輸入層通過第1層(type = conv,kernel_size =3,stride =1),再通過第2層(type = pool,kernel_size =2,stride =2),求第2層的輸出feature map 在輸入層的感受野f.
顯然,這是很簡單的模型,第一層對於輸入層的感受野為3(只跟kernel_size有關),第二層對第一層的感受野為2(只跟kernel_size有關),那第二層對輸入層呢?動手畫一畫,就知道第2層對輸入層的感受野為4*4。我們在分析的過程中,是不是現求第二層對第一層的感受野,然後結合第一層對輸入層的感受野,算出第二層對輸入層的感受野。這就等價乙個遞迴關係。
現在來看一般情況
:假設第i層上對第j層的區域性感受野為f(i,j),顯然i>=j.假定輸入層為第0層。
則現在問題轉化為求f(i,0)的問題。由上面分析可知f(i,i)=1,現只需要求出f(i,j) 與f(i,j-1)層的關係,即可通過f(i,i)求出f(i,0).
通過簡單情況和畫圖分析,可得出遞迴關係式,f(i,j-1) = kernel_size_j + (f(i,j)-1)*stride_j,kernel_size_j表示的第j層的kernel_size,stride_j表示第j層的stride.這個式子分為兩部分,一部分是指kernel_size_j,即區域性感受野,另一部分是stride,可理解為當前層在每多乙個原子,上一層的感受野多增加stride個(在第乙個區域性感受野的基礎上增加的)(只考慮乙個方向的大小)。
則由遞迴關係和f(i,i) =1,可求出f(i,0).注意f(i,0)和f(i-1,0)並沒有任何關係
。現貼上部落格中寫的**,挺好理解的,贊博主~
[python]
view plain
copy
net_struct = ,
'vgg16'
: ,
'zf-5'
:}
imsize = 224
defoutfromin(isz, net, layernum):
totstride = 1
insize = isz
forlayer
inrange(layernum):
fsize, stride, pad = net[layer]
outsize = (insize - fsize + 2
*pad) / stride +
1insize = outsize
totstride = totstride * stride
return
outsize, totstride
definfromout(net, layernum):
rf = 1
forlayer
inreversed(range(layernum)):
fsize, stride, pad = net[layer]
rf = ((rf -1
)* stride) + fsize
return
rf
if__name__ ==
'__main__'
("layer output sizes given image = %dx%d"
% (imsize, imsize))
fornet
innet_struct.keys():
('************net structrue name is %s**************'
% net)
fori
inrange(len(net_struct[net][
'net'
])):
p = outfromin(imsize,net_struct[net]['net'
], i+
1)
rf = infromout(net_struct[net]['net'
], i+
1)
("layer name = %s, output size = %3d, stride = % 3d, rf size = %3d"
% (net_struct[net][
'name'
][i], p[
0], p[
1], rf))
感受野計算
定義 感受野 receptive field 指的是神經網路中神經元 看到的 輸入區域,在卷積神經網路中,感受野的定義是卷積神經網路每一層輸出的特徵圖 feature map 上的畫素點在原始影象上對映的區域大小。計算方式 l k lk 1 f k 1 i 0k 1 si l k l f k 1 p...
感受野的計算
感受野 receptive field 指的是神經網路中神經元 看到的 輸入區域,在卷積神經網路中,feature map上某個元素的計算受輸入影象上某個區域的影響,這個區域即該元素的感受野。卷積神經網路中,越深層的神經元看到的輸入區域越大,如下圖所示,kernel size 均為3 33 3,st...
撥雲見日 卷積網路感受野的計算
寫在最前,正向感受野計算公式rn rn 1 k 1 i 1n 1si r n r k 1 quad prod quad rn rn 1 k 1 i 1 n 1 si 其中k為卷積核尺寸,s為步長。幾個部落格把這個公式抄來抄去,也沒個所以然,實在是頭疼看不懂,所以推導一下。先簡單介紹一下普通卷積和擴張...