Skip to content

Commit ad17a42

Browse files
committed
Added deep learning study roadmap tutorial - pooling parameters
1 parent 303c3c1 commit ad17a42

File tree

4 files changed

+1582
-113
lines changed

4 files changed

+1582
-113
lines changed

monk/gluon/finetune/level_8_layers_main.py

Lines changed: 357 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3218,4 +3218,360 @@ def study_convolution_dilation(self, img_name, factor=0):
32183218
tmp = np.swapaxes(tmp, 1, 2)
32193219
cv2.imwrite("tmp/test_filter" + str(i) + ".jpg", tmp*255)
32203220

3221-
#####################################################################################################################################
3221+
#####################################################################################################################################
3222+
3223+
3224+
3225+
3226+
#####################################################################################################################################
3227+
@warning_checks(None, None, type=None, post_trace=True)
3228+
@error_checks(None, None, type=["in", ["max", "avg"]], post_trace=True)
3229+
@accepts("self", str, type=str, post_trace=True)
3230+
@TraceFunction(trace_args=True, trace_rv=True)
3231+
def study_pooling_type(self, img_name, type="max"):
3232+
"""
3233+
Visualize the effect of a parameter in convolution - KErnel size
3234+
3235+
Args:
3236+
img_name (str): Path to test images
3237+
kernel_size(int): Convolution kernel shape
3238+
3239+
Returns:
3240+
None
3241+
3242+
"""
3243+
3244+
network = [];
3245+
if(type == "max"):
3246+
network.append(self.max_pooling(kernel_size=2));
3247+
else:
3248+
network.append(self.average_pooling(kernel_size=2));
3249+
3250+
3251+
self.Compile_Network(network,
3252+
data_shape=(3, 224, 224),
3253+
use_gpu=False,
3254+
network_initializer="xavier_normal",
3255+
debug=False);
3256+
3257+
self.system_dict["local"]["transforms_test"] = [];
3258+
self.system_dict["local"]["transforms_test"].append(transforms.Resize(size=(224, 224)));
3259+
self.system_dict["local"]["transforms_test"].append(transforms.ToTensor());
3260+
self.system_dict["local"]["data_transforms"]["test"] = transforms.Compose(self.system_dict["local"]["transforms_test"]);
3261+
3262+
3263+
img = image.imread(img_name)
3264+
img = self.system_dict["local"]["data_transforms"]["test"](img).expand_dims(axis=0);
3265+
img = img.copyto(self.system_dict["local"]["ctx"][0]);
3266+
print("Input shape - {}".format(img.shape))
3267+
outputs = self.system_dict["local"]["model"].forward(img);
3268+
print("Output shape - {}".format(outputs.shape))
3269+
3270+
3271+
if(os.path.isdir("tmp")):
3272+
os.system("rm -r tmp");
3273+
os.system("mkdir tmp");
3274+
else:
3275+
os.system("mkdir tmp");
3276+
3277+
3278+
out = outputs[0];
3279+
for i in range(out.shape[0]):
3280+
tmp = out[i].asnumpy()
3281+
cv2.imwrite("tmp/test" + str(i) + ".jpg", tmp*255)
3282+
3283+
#weights = self.system_dict["local"]["model"][0].weight.data().asnumpy()
3284+
3285+
#for i in range(weights.shape[0]):
3286+
# tmp = weights[i]
3287+
# tmp = np.swapaxes(tmp, 0, 1)
3288+
# tmp = np.swapaxes(tmp, 1, 2)
3289+
# cv2.imwrite("tmp/test_filter" + str(i) + ".jpg", tmp*255)
3290+
3291+
#####################################################################################################################################
3292+
3293+
3294+
3295+
#####################################################################################################################################
3296+
@warning_checks(None, None, kernel_size=None, type=None, post_trace=False)
3297+
@error_checks(None, None, kernel_size=["gt", 0], type=["in", ["max", "avg"]], post_trace=False)
3298+
@accepts("self", str, kernel_size=[int, tuple], type=str, post_trace=False)
3299+
#@TraceFunction(trace_args=True, trace_rv=True)
3300+
def study_pooling_kernels(self, img_name, kernel_size=4, type="avg"):
3301+
"""
3302+
Visualize the effect of a parameter in convolution - KErnel size
3303+
3304+
Args:
3305+
img_name (str): Path to test images
3306+
kernel_size(int): Convolution kernel shape
3307+
3308+
Returns:
3309+
None
3310+
3311+
"""
3312+
3313+
network = [];
3314+
if(type == "max"):
3315+
network.append(self.max_pooling(kernel_size=kernel_size));
3316+
else:
3317+
network.append(self.average_pooling(kernel_size=kernel_size));
3318+
3319+
3320+
self.Compile_Network(network,
3321+
data_shape=(3, 224, 224),
3322+
use_gpu=False,
3323+
network_initializer="xavier_normal",
3324+
debug=False);
3325+
3326+
3327+
self.system_dict["local"]["transforms_test"] = [];
3328+
self.system_dict["local"]["transforms_test"].append(transforms.Resize(size=(224, 224)));
3329+
self.system_dict["local"]["transforms_test"].append(transforms.ToTensor());
3330+
self.system_dict["local"]["data_transforms"]["test"] = transforms.Compose(self.system_dict["local"]["transforms_test"]);
3331+
3332+
3333+
img = image.imread(img_name)
3334+
img = self.system_dict["local"]["data_transforms"]["test"](img).expand_dims(axis=0);
3335+
img = img.copyto(self.system_dict["local"]["ctx"][0]);
3336+
print("Input shape - {}".format(img.shape))
3337+
outputs = self.system_dict["local"]["model"].forward(img);
3338+
print("Output shape - {}".format(outputs.shape))
3339+
3340+
3341+
if(os.path.isdir("tmp")):
3342+
os.system("rm -r tmp");
3343+
os.system("mkdir tmp");
3344+
else:
3345+
os.system("mkdir tmp");
3346+
3347+
3348+
out = outputs[0];
3349+
for i in range(out.shape[0]):
3350+
tmp = out[i].asnumpy()
3351+
cv2.imwrite("tmp/test" + str(i) + ".jpg", tmp*255)
3352+
3353+
#weights = self.system_dict["local"]["model"][0].weight.data().asnumpy()
3354+
3355+
#for i in range(weights.shape[0]):
3356+
# tmp = weights[i]
3357+
# tmp = np.swapaxes(tmp, 0, 1)
3358+
# tmp = np.swapaxes(tmp, 1, 2)
3359+
# cv2.imwrite("tmp/test_filter" + str(i) + ".jpg", tmp*255)
3360+
3361+
#####################################################################################################################################
3362+
3363+
3364+
3365+
3366+
#####################################################################################################################################
3367+
@warning_checks(None, None, stride=None, type=None, post_trace=False)
3368+
@error_checks(None, None, stride=["gt", 0], type=["in", ["max", "avg"]], post_trace=False)
3369+
@accepts("self", str, stride=[int, tuple], type=str, post_trace=False)
3370+
#@TraceFunction(trace_args=True, trace_rv=True)
3371+
def study_pooling_stride(self, img_name, stride=4, type="avg"):
3372+
"""
3373+
Visualize the effect of a parameter in convolution - KErnel size
3374+
3375+
Args:
3376+
img_name (str): Path to test images
3377+
kernel_size(int): Convolution kernel shape
3378+
3379+
Returns:
3380+
None
3381+
3382+
"""
3383+
3384+
network = [];
3385+
if(type == "max"):
3386+
network.append(self.max_pooling(kernel_size=2, stride=stride));
3387+
else:
3388+
network.append(self.average_pooling(kernel_size=2, stride=stride));
3389+
3390+
3391+
self.Compile_Network(network,
3392+
data_shape=(3, 224, 224),
3393+
use_gpu=False,
3394+
network_initializer="xavier_normal",
3395+
debug=False);
3396+
3397+
3398+
self.system_dict["local"]["transforms_test"] = [];
3399+
self.system_dict["local"]["transforms_test"].append(transforms.Resize(size=(224, 224)));
3400+
self.system_dict["local"]["transforms_test"].append(transforms.ToTensor());
3401+
self.system_dict["local"]["data_transforms"]["test"] = transforms.Compose(self.system_dict["local"]["transforms_test"]);
3402+
3403+
3404+
img = image.imread(img_name)
3405+
img = self.system_dict["local"]["data_transforms"]["test"](img).expand_dims(axis=0);
3406+
img = img.copyto(self.system_dict["local"]["ctx"][0]);
3407+
print("Input shape - {}".format(img.shape))
3408+
outputs = self.system_dict["local"]["model"].forward(img);
3409+
print("Output shape - {}".format(outputs.shape))
3410+
3411+
3412+
if(os.path.isdir("tmp")):
3413+
os.system("rm -r tmp");
3414+
os.system("mkdir tmp");
3415+
else:
3416+
os.system("mkdir tmp");
3417+
3418+
3419+
out = outputs[0];
3420+
for i in range(out.shape[0]):
3421+
tmp = out[i].asnumpy()
3422+
cv2.imwrite("tmp/test" + str(i) + ".jpg", tmp*255)
3423+
3424+
#weights = self.system_dict["local"]["model"][0].weight.data().asnumpy()
3425+
3426+
#for i in range(weights.shape[0]):
3427+
# tmp = weights[i]
3428+
# tmp = np.swapaxes(tmp, 0, 1)
3429+
# tmp = np.swapaxes(tmp, 1, 2)
3430+
# cv2.imwrite("tmp/test_filter" + str(i) + ".jpg", tmp*255)
3431+
3432+
#####################################################################################################################################
3433+
3434+
3435+
3436+
#####################################################################################################################################
3437+
@warning_checks(None, None, padding=None, type=None, post_trace=False)
3438+
@error_checks(None, None, padding=["gte", 0], type=["in", ["max", "avg"]], post_trace=False)
3439+
@accepts("self", str, padding=[int, tuple], type=str, post_trace=False)
3440+
#@TraceFunction(trace_args=True, trace_rv=True)
3441+
def study_pooling_padding(self, img_name, padding=1, type="avg"):
3442+
"""
3443+
Visualize the effect of a parameter in convolution - KErnel size
3444+
3445+
Args:
3446+
img_name (str): Path to test images
3447+
kernel_size(int): Convolution kernel shape
3448+
3449+
Returns:
3450+
None
3451+
3452+
"""
3453+
3454+
network = [];
3455+
if(type == "max"):
3456+
network.append(self.max_pooling(kernel_size=2, padding=padding));
3457+
else:
3458+
network.append(self.average_pooling(kernel_size=2, padding=padding));
3459+
3460+
3461+
self.Compile_Network(network,
3462+
data_shape=(3, 224, 224),
3463+
use_gpu=False,
3464+
network_initializer="xavier_normal",
3465+
debug=False);
3466+
3467+
3468+
self.system_dict["local"]["transforms_test"] = [];
3469+
self.system_dict["local"]["transforms_test"].append(transforms.Resize(size=(224, 224)));
3470+
self.system_dict["local"]["transforms_test"].append(transforms.ToTensor());
3471+
self.system_dict["local"]["data_transforms"]["test"] = transforms.Compose(self.system_dict["local"]["transforms_test"]);
3472+
3473+
3474+
img = image.imread(img_name)
3475+
img = self.system_dict["local"]["data_transforms"]["test"](img).expand_dims(axis=0);
3476+
img = img.copyto(self.system_dict["local"]["ctx"][0]);
3477+
print("Input shape - {}".format(img.shape))
3478+
outputs = self.system_dict["local"]["model"].forward(img);
3479+
print("Output shape - {}".format(outputs.shape))
3480+
3481+
3482+
if(os.path.isdir("tmp")):
3483+
os.system("rm -r tmp");
3484+
os.system("mkdir tmp");
3485+
else:
3486+
os.system("mkdir tmp");
3487+
3488+
3489+
out = outputs[0];
3490+
for i in range(out.shape[0]):
3491+
tmp = out[i].asnumpy()
3492+
cv2.imwrite("tmp/test" + str(i) + ".jpg", tmp*255)
3493+
3494+
#weights = self.system_dict["local"]["model"][0].weight.data().asnumpy()
3495+
3496+
#for i in range(weights.shape[0]):
3497+
# tmp = weights[i]
3498+
# tmp = np.swapaxes(tmp, 0, 1)
3499+
# tmp = np.swapaxes(tmp, 1, 2)
3500+
# cv2.imwrite("tmp/test_filter" + str(i) + ".jpg", tmp*255)
3501+
3502+
#####################################################################################################################################
3503+
3504+
3505+
3506+
3507+
#####################################################################################################################################
3508+
@warning_checks(None, None, dilation=None, type=None, post_trace=False)
3509+
@error_checks(None, None, dilation=["gt", 0], type=["in", ["max", "avg"]], post_trace=False)
3510+
@accepts("self", str, dilation=[int, tuple], type=str, post_trace=False)
3511+
#@TraceFunction(trace_args=True, trace_rv=True)
3512+
def study_pooling_dilation(self, img_name, dilation=1, type="avg"):
3513+
"""
3514+
Visualize the effect of a parameter in convolution - KErnel size
3515+
3516+
Args:
3517+
img_name (str): Path to test images
3518+
kernel_size(int): Convolution kernel shape
3519+
3520+
Returns:
3521+
None
3522+
3523+
"""
3524+
3525+
network = [];
3526+
if(type == "max"):
3527+
network.append(self.max_pooling(kernel_size=2, dilation=dilation));
3528+
else:
3529+
network.append(self.average_pooling(kernel_size=2, dilation=dilation));
3530+
3531+
3532+
self.Compile_Network(network,
3533+
data_shape=(3, 224, 224),
3534+
use_gpu=False,
3535+
network_initializer="xavier_normal",
3536+
debug=False);
3537+
3538+
3539+
self.system_dict["local"]["transforms_test"] = [];
3540+
self.system_dict["local"]["transforms_test"].append(transforms.Resize(size=(224, 224)));
3541+
self.system_dict["local"]["transforms_test"].append(transforms.ToTensor());
3542+
self.system_dict["local"]["data_transforms"]["test"] = transforms.Compose(self.system_dict["local"]["transforms_test"]);
3543+
3544+
3545+
img = image.imread(img_name)
3546+
img = self.system_dict["local"]["data_transforms"]["test"](img).expand_dims(axis=0);
3547+
img = img.copyto(self.system_dict["local"]["ctx"][0]);
3548+
print("Input shape - {}".format(img.shape))
3549+
outputs = self.system_dict["local"]["model"].forward(img);
3550+
print("Output shape - {}".format(outputs.shape))
3551+
3552+
3553+
if(os.path.isdir("tmp")):
3554+
os.system("rm -r tmp");
3555+
os.system("mkdir tmp");
3556+
else:
3557+
os.system("mkdir tmp");
3558+
3559+
3560+
out = outputs[0];
3561+
for i in range(out.shape[0]):
3562+
tmp = out[i].asnumpy()
3563+
cv2.imwrite("tmp/test" + str(i) + ".jpg", tmp*255)
3564+
3565+
#weights = self.system_dict["local"]["model"][0].weight.data().asnumpy()
3566+
3567+
#for i in range(weights.shape[0]):
3568+
# tmp = weights[i]
3569+
# tmp = np.swapaxes(tmp, 0, 1)
3570+
# tmp = np.swapaxes(tmp, 1, 2)
3571+
# cv2.imwrite("tmp/test_filter" + str(i) + ".jpg", tmp*255)
3572+
3573+
#####################################################################################################################################
3574+
3575+
3576+
3577+

0 commit comments

Comments
 (0)