def reconstruct_features(model, layer_name, input_var, filename, filter_num): """ Reconstruct features in input_img that led to max activation at given layer :param model: :param layer_name: :param input_var: :param input_img: Ensure 4d with (num_sample, num_filter, H, W) :return: """ orig_img = plt.imread(filename) prep_orig = scale_image(orig_img) input_img = prep_orig[None, :, :, :].astype(np.float32) backprop_func, loss, grads = compute_loss_grads_backprop_func(model, layer_name, input_var, filter_num) loss, grads = backprop_func(input_img) print "Original image plotting" # Visualize img before ascent plt.figure(1) plt.imshow(np.transpose(input_img[0], (1, 2, 0))) plt.show(block=False) plt.pause(0.01) print "Input img shape: ", input_img.shape optimal_img = generate_optimal_img(backprop_func, input_img) print "Gradient ascent complete" plt.figure(2) # Visualize img after ascent deprocess_test = deprocess_image(optimal_img[0]) plt.imshow(deprocess_test) plt.show()
def visualize_max_filter_activations(model, layer_name, orig_filename, adv_filename): # Original image orig_img = plt.imread(orig_filename) prep_orig = scale_image(orig_img) prep_orig = prep_orig[None, :, :, :].astype(np.float32) adv_img = plt.imread(adv_filename) prep_adv = scale_image(adv_img) prep_adv = prep_adv[None, :, :, :].astype(np.float32) # Get min/max filter idx print "Computing max/min filters..." min_idx, max_idx = get_min_max_filter_idx(model, layer_name, prep_adv, prep_orig) print "Min idx {0}, Max idx {1}".format(str(min_idx), str(max_idx)) print "Computing activations..." activations_orig = get_activations_at_layer(model, layer_name, prep_orig) activations_adv = get_activations_at_layer(model, layer_name, prep_adv) print "activations dim: ", activations_adv.shape print "Converting original image activations to pixel space..." converted_orig = convert_to_pixel_space(activations_orig, max_idx) plt.figure(1) visualize_img(converted_orig) print "Converting adversarial image activations to pixel space..." plt.figure(2) converted_adv = convert_to_pixel_space(activations_adv, max_idx) visualize_img(converted_adv) print "Printing image differences..." plt.figure(3) image_diff = np.absolute(activations_orig - activations_adv) converted_diff = convert_to_pixel_space(image_diff, max_idx) visualize_img(converted_diff) return min_idx, max_idx
def reconstruct_features(model, layer_name, input_var, filename, filter_num): """ Reconstruct features in input_img that led to max activation at given layer :param model: :param layer_name: :param input_var: :param input_img: Ensure 4d with (num_sample, num_filter, H, W) :return: """ orig_img = plt.imread(filename) prep_orig = scale_image(orig_img) input_img = prep_orig[None, :, :, :].astype(np.float32) backprop_func, loss, grads = compute_loss_grads_backprop_func( model, layer_name, input_var, filter_num) loss, grads = backprop_func(input_img) print "Original image plotting" # Visualize img before ascent plt.figure(1) plt.imshow(np.transpose(input_img[0], (1, 2, 0))) plt.show(block=False) plt.pause(0.01) print "Input img shape: ", input_img.shape optimal_img = generate_optimal_img(backprop_func, input_img) print "Gradient ascent complete" plt.figure(2) # Visualize img after ascent deprocess_test = deprocess_image(optimal_img[0]) plt.imshow(deprocess_test) plt.show()