size of receptive field of each layer in CNN

13 views
Skip to first unread message

李媛媛

unread,
Oct 28, 2016, 9:39:34 AM10/28/16
to Caffe Users

i have searched an answer on internet, but i don't understand it, it is as follows:
 #Compute input size that leads to a 1x1 output size, among other things  
 
# [filter size, stride, padding]
 
convnet =[[11,4,0],[3,2,0],[5,1,2],[3,2,0],[3,1,1],[3,1,1],[3,1,1],[3,2,0],[6,1,0]]
layer_name = ['conv1','pool1','conv2','pool2','conv3','conv4','conv5','pool5','fc6-conv']
imsize = 227
 
def outFromIn(isz, layernum = 9, net = convnet):
    if layernum>len(net): layernum=len(net)
 
    totstride = 1
    insize = isz
    #for layerparams in net:
    for layer in range(layernum):
        fsize, stride, pad = net[layer]
        outsize = (insize - fsize + 2*pad) / stride + 1
        insize = outsize
        totstride = totstride * stride
    return outsize, totstride
 
def inFromOut( layernum = 9, net = convnet):
    if layernum>len(net): layernum=len(net)
    outsize = 1
    #for layerparams in net:
    for layer in reversed(range(layernum)):
        fsize, stride, pad = net[layer]
        outsize = ((outsize -1)* stride) + fsize
    RFsize = outsize
    return RFsize
 
if __name__ == '__main__':
 
    print "layer output sizes given image = %dx%d" % (imsize, imsize)
    for in range(len(convnet)):
        = outFromIn(imsize,i+1)
        rf = inFromOut(i+1)
        print "Layer Name = %s, Output size = %3d, Stride = % 3d, RF size = %3d" % (layer_name[i], p[0], p[1], rf)


and the result is:

but i do as it say, i got different result? could anyone show me more details or different explanation? thank you very much!
Reply all
Reply to author
Forward
0 new messages