Last active
November 12, 2024 01:46
-
-
Save Nikasa1889/781a8eb20c5b32f8e378353cde4daa51 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# [filter size, stride, padding] | |
#Assume the two dimensions are the same | |
#Each kernel requires the following parameters: | |
# - k_i: kernel size | |
# - s_i: stride | |
# - p_i: padding (if padding is uneven, right padding will higher than left padding; "SAME" option in tensorflow) | |
# | |
#Each layer i requires the following parameters to be fully represented: | |
# - n_i: number of feature (data layer has n_1 = imagesize ) | |
# - j_i: distance (projected to image pixel distance) between center of two adjacent features | |
# - r_i: receptive field of a feature in layer i | |
# - start_i: position of the first feature's receptive field in layer i (idx start from 0, negative means the center fall into padding) | |
import math | |
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], [1, 1, 0]] | |
layer_names = ['conv1','pool1','conv2','pool2','conv3','conv4','conv5','pool5','fc6-conv', 'fc7-conv'] | |
imsize = 227 | |
def outFromIn(conv, layerIn): | |
n_in = layerIn[0] | |
j_in = layerIn[1] | |
r_in = layerIn[2] | |
start_in = layerIn[3] | |
k = conv[0] | |
s = conv[1] | |
p = conv[2] | |
n_out = math.floor((n_in - k + 2*p)/s) + 1 | |
actualP = (n_out-1)*s - n_in + k | |
pR = math.ceil(actualP/2) | |
pL = math.floor(actualP/2) | |
j_out = j_in * s | |
r_out = r_in + (k - 1)*j_in | |
start_out = start_in + ((k-1)/2 - pL)*j_in | |
return n_out, j_out, r_out, start_out | |
def printLayer(layer, layer_name): | |
print(layer_name + ":") | |
print("\t n features: %s \n \t jump: %s \n \t receptive size: %s \t start: %s " % (layer[0], layer[1], layer[2], layer[3])) | |
layerInfos = [] | |
if __name__ == '__main__': | |
#first layer is the data layer (image) with n_0 = image size; j_0 = 1; r_0 = 1; and start_0 = 0.5 | |
print ("-------Net summary------") | |
currentLayer = [imsize, 1, 1, 0.5] | |
printLayer(currentLayer, "input image") | |
for i in range(len(convnet)): | |
currentLayer = outFromIn(convnet[i], currentLayer) | |
layerInfos.append(currentLayer) | |
printLayer(currentLayer, layer_names[i]) | |
print ("------------------------") | |
layer_name = raw_input ("Layer name where the feature in: ") | |
layer_idx = layer_names.index(layer_name) | |
idx_x = int(raw_input ("index of the feature in x dimension (from 0)")) | |
idx_y = int(raw_input ("index of the feature in y dimension (from 0)")) | |
n = layerInfos[layer_idx][0] | |
j = layerInfos[layer_idx][1] | |
r = layerInfos[layer_idx][2] | |
start = layerInfos[layer_idx][3] | |
assert(idx_x < n) | |
assert(idx_y < n) | |
print ("receptive field: (%s, %s)" % (r, r)) | |
print ("center: (%s, %s)" % (start+idx_x*j, start+idx_y*j)) | |
where is the "raw_input" define?if run this code,it will report this error:
NameError: name 'raw_input' is not defined
raw_input is a function of Python 2.X, if you use version 3.X, try replacing 'raw_input' with 'input' .
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
where is the "raw_input" define?if run this code,it will report this error:
NameError: name 'raw_input' is not defined