方法1
top to down
从最顶层往底层算:
RF=1 //最顶层一个1x1feature map
for layer in (top layer To down layer):
RF = (RF -1)* stride + kernelSize
//这里还有一个步长:
strides(i) = stride(1) * stride(2) * …* stride(i-1)
例如:[kernelSize,stride,padding]
{‘alexnet’: {‘net’:[[11,4,0],[3,2,0],[5,1,2],[3,2,0],[3,1,1],[3,1,1],[3,1,1],[3,2,0]],
‘name’:[‘conv1’,‘pool1’,‘conv2’,‘pool2’,‘conv3’,‘conv4’,‘conv5’,‘pool5’]},
//计算conv2 RF
RF=1//最顶层一个1x1feature map
RF=(RF-1)*1+5=(1-1)*1+5=5
RF=(RF-1)*2+3=(5-1)*2+3=11
RF=(RF-1)*4+11=(11-1)*4+11=51
所以conv2感受野是51,strides=4*2*1=8
方法2
down to top
从底层往顶层算:
RF=第一个conv的kernelSize
for layer in (down layer To top layer):
strides(i) = stride(1) * stride(2) * …* stride(i-1)
RF = (kernelSize-1)* strides + RF //strides同方法1
strides(i) = stride(1) * stride(2) * …* stride(i-1)
例如:[kernelSize,stride,padding]
{‘alexnet’: {‘net’:[[11,4,0],[3,2,0],[5,1,2],[3,2,0],[3,1,1],[3,1,1],[3,1,1],[3,2,0]],
‘name’:[‘conv1’,‘pool1’,‘conv2’,‘pool2’,‘conv3’,‘conv4’,‘conv5’,‘pool5’]}
kernelSize(stride) RF(strides)
conv1 11(4) 11(4)
pool1 3(2) (3-1)*4+11=19(8)
conv2 5(1) (5-1)*8+19=51(8)
pool2 3(2) (3-1)*8+51=67(8)
............
工具
https://fomoro.com/projects/project/receptive-field-calculator#