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()
示例#2
0
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 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
示例#4
0
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()