def test_adversarial(model, criterion, image, label): # model = bn_model # criterion = bn_criterion # image = bn_image # label = bn_label adversarial = Adversarial(model, criterion, image, label, verbose=False) assert not adversarial.predictions(image)[1] assert adversarial.image is None assert adversarial.distance == MSE(value=np.inf) assert adversarial.original_image is image assert adversarial.original_class == label assert adversarial.target_class() is None assert adversarial.normalized_distance(image) == MSE(value=0) assert adversarial.normalized_distance(image).value == 0 np.random.seed(22) perturbation = np.random.uniform(-1, 1, size=image.shape) perturbed = np.clip(image + perturbation, 0, 255).astype(np.float32) d1 = adversarial.normalized_distance(perturbed).value assert d1 != 0 assert adversarial.original_image.dtype == np.float32 adversarial.set_distance_dtype(np.float32) assert adversarial.normalized_distance(perturbed).value == d1 adversarial.set_distance_dtype(np.float64) assert adversarial.normalized_distance(perturbed).value != d1 adversarial.reset_distance_dtype() assert adversarial.normalized_distance(perturbed).value == d1 label = 22 # wrong label adversarial = Adversarial(model, criterion, image, label, verbose=True) assert adversarial.image is not None assert adversarial.distance == MSE(value=0) assert adversarial.original_image is image assert adversarial.original_class == label assert adversarial.target_class() is None assert adversarial.normalized_distance(image) == MSE(value=0) assert adversarial.normalized_distance(image).value == 0 predictions, is_adversarial = adversarial.predictions(image) first_predictions = predictions assert is_adversarial predictions, is_adversarial, _, _ = adversarial.predictions( image, return_details=True) # noqa: E501 first_predictions = predictions assert is_adversarial predictions, is_adversarial = adversarial.batch_predictions( image[np.newaxis]) # noqa: E501 assert (predictions == first_predictions[np.newaxis]).all() assert np.all(is_adversarial == np.array([True])) predictions, is_adversarial, index = adversarial.batch_predictions( image[np.newaxis], greedy=True) # noqa: E501 assert (predictions == first_predictions[np.newaxis]).all() assert is_adversarial assert index == 0 predictions, is_adversarial, index, _, _ = adversarial.batch_predictions( image[np.newaxis], greedy=True, return_details=True) # noqa: E501 assert (predictions == first_predictions[np.newaxis]).all() assert is_adversarial assert index == 0 predictions, gradient, is_adversarial = adversarial.predictions_and_gradient( image, label) # noqa: E501 assert (predictions == first_predictions).all() assert gradient.shape == image.shape assert is_adversarial predictions, gradient, is_adversarial, _, _ = adversarial.predictions_and_gradient( image, label, return_details=True) # noqa: E501 assert (predictions == first_predictions).all() assert gradient.shape == image.shape assert is_adversarial predictions, gradient, is_adversarial = adversarial.predictions_and_gradient( ) # noqa: E501 assert (predictions == first_predictions).all() assert gradient.shape == image.shape assert is_adversarial gradient_pre = np.ones_like(predictions) * 0.3 gradient = adversarial.backward(gradient_pre, image) gradient2 = adversarial.backward(gradient_pre) assert gradient.shape == image.shape assert (gradient == gradient2).all() gradient = adversarial.gradient() assert gradient.shape == image.shape assert is_adversarial assert adversarial.num_classes() == 1000 assert adversarial.has_gradient() assert adversarial.channel_axis(batch=True) == 3 assert adversarial.channel_axis(batch=False) == 2 # without adversarials criterion.is_adversarial = Mock(return_value=False) adversarial = Adversarial(model, criterion, image, label) predictions, is_adversarial, index = adversarial.batch_predictions( image[np.newaxis], greedy=True) # noqa: E501 assert (predictions == first_predictions[np.newaxis]).all() assert not is_adversarial assert index is None # without gradient del model.predictions_and_gradient assert not adversarial.has_gradient()
def test_adversarial(model, criterion, image, label): # model = bn_model # criterion = bn_criterion # image = bn_image # label = bn_label adversarial = Adversarial(model, criterion, image, label) assert not adversarial.predictions(image)[1] assert adversarial.image is None assert adversarial.distance == MSE(value=np.inf) assert adversarial.original_image is image assert adversarial.original_class == label assert adversarial.target_class() is None assert adversarial.normalized_distance(image) == MSE(value=0) assert adversarial.normalized_distance(image).value == 0 label = 22 # wrong label adversarial = Adversarial(model, criterion, image, label) assert adversarial.image is not None assert adversarial.distance == MSE(value=0) assert adversarial.original_image is image assert adversarial.original_class == label assert adversarial.target_class() is None assert adversarial.normalized_distance(image) == MSE(value=0) assert adversarial.normalized_distance(image).value == 0 predictions, is_adversarial = adversarial.predictions(image) first_predictions = predictions assert is_adversarial predictions, is_adversarial = adversarial.batch_predictions( image[np.newaxis]) # noqa: E501 assert (predictions == first_predictions[np.newaxis]).all() assert np.all(is_adversarial == np.array([True])) predictions, is_adversarial, index = adversarial.batch_predictions( image[np.newaxis], increasing=True) # noqa: E501 assert (predictions == first_predictions[np.newaxis]).all() assert is_adversarial assert index == 0 predictions, gradient, is_adversarial = adversarial.predictions_and_gradient( image, label) # noqa: E501 assert (predictions == first_predictions).all() assert gradient.shape == image.shape assert is_adversarial predictions, gradient, is_adversarial = adversarial.predictions_and_gradient( ) # noqa: E501 assert (predictions == first_predictions).all() assert gradient.shape == image.shape assert is_adversarial gradient = adversarial.gradient() assert gradient.shape == image.shape assert is_adversarial assert adversarial.num_classes() == 1000 assert adversarial.has_gradient() assert adversarial.channel_axis(batch=True) == 3 assert adversarial.channel_axis(batch=False) == 2 # without adversarials criterion.is_adversarial = Mock(return_value=False) adversarial = Adversarial(model, criterion, image, label) predictions, is_adversarial, index = adversarial.batch_predictions( image[np.newaxis], increasing=True) # noqa: E501 assert (predictions == first_predictions[np.newaxis]).all() assert not is_adversarial assert index is None # without gradient del model.predictions_and_gradient assert not adversarial.has_gradient()
def test_adversarial(model, criterion, image, label): # model = bn_model # criterion = bn_criterion # image = bn_image # label = bn_label adversarial = Adversarial(model, criterion, image, label, verbose=False) assert not adversarial.predictions(image)[1] assert adversarial.image is None assert adversarial.distance == MSE(value=np.inf) assert adversarial.original_image is image assert adversarial.original_class == label assert adversarial.target_class() is None assert adversarial.normalized_distance(image) == MSE(value=0) assert adversarial.normalized_distance(image).value == 0 np.random.seed(22) perturbation = np.random.uniform(-1, 1, size=image.shape) perturbed = np.clip(image + perturbation, 0, 255).astype(np.float32) d1 = adversarial.normalized_distance(perturbed).value assert d1 != 0 assert adversarial.original_image.dtype == np.float32 adversarial.set_distance_dtype(np.float32) assert adversarial.normalized_distance(perturbed).value == d1 adversarial.set_distance_dtype(np.float64) assert adversarial.normalized_distance(perturbed).value != d1 adversarial.reset_distance_dtype() assert adversarial.normalized_distance(perturbed).value == d1 label = 22 # wrong label adversarial = Adversarial(model, criterion, image, label, verbose=True) assert adversarial.image is not None assert adversarial.distance == MSE(value=0) assert adversarial.original_image is image assert adversarial.original_class == label assert adversarial.target_class() is None assert adversarial.normalized_distance(image) == MSE(value=0) assert adversarial.normalized_distance(image).value == 0 predictions, is_adversarial = adversarial.predictions(image) first_predictions = predictions assert is_adversarial predictions, is_adversarial, _, _ = adversarial.predictions(image, return_details=True) # noqa: E501 first_predictions = predictions assert is_adversarial predictions, is_adversarial = adversarial.batch_predictions(image[np.newaxis]) # noqa: E501 assert (predictions == first_predictions[np.newaxis]).all() assert np.all(is_adversarial == np.array([True])) predictions, is_adversarial, index = adversarial.batch_predictions(image[np.newaxis], greedy=True) # noqa: E501 assert (predictions == first_predictions[np.newaxis]).all() assert is_adversarial assert index == 0 predictions, is_adversarial, index, _, _ = adversarial.batch_predictions(image[np.newaxis], greedy=True, return_details=True) # noqa: E501 assert (predictions == first_predictions[np.newaxis]).all() assert is_adversarial assert index == 0 predictions, gradient, is_adversarial = adversarial.predictions_and_gradient(image, label) # noqa: E501 assert (predictions == first_predictions).all() assert gradient.shape == image.shape assert is_adversarial predictions, gradient, is_adversarial, _, _ = adversarial.predictions_and_gradient(image, label, return_details=True) # noqa: E501 assert (predictions == first_predictions).all() assert gradient.shape == image.shape assert is_adversarial predictions, gradient, is_adversarial = adversarial.predictions_and_gradient() # noqa: E501 assert (predictions == first_predictions).all() assert gradient.shape == image.shape assert is_adversarial gradient_pre = np.ones_like(predictions) * 0.3 gradient = adversarial.backward(gradient_pre, image) gradient2 = adversarial.backward(gradient_pre) assert gradient.shape == image.shape assert (gradient == gradient2).all() gradient = adversarial.gradient() assert gradient.shape == image.shape assert is_adversarial assert adversarial.num_classes() == 1000 assert adversarial.has_gradient() assert adversarial.channel_axis(batch=True) == 3 assert adversarial.channel_axis(batch=False) == 2 # without adversarials criterion.is_adversarial = Mock(return_value=False) adversarial = Adversarial(model, criterion, image, label) predictions, is_adversarial, index = adversarial.batch_predictions(image[np.newaxis], greedy=True) # noqa: E501 assert (predictions == first_predictions[np.newaxis]).all() assert not is_adversarial assert index is None # without gradient del model.predictions_and_gradient assert not adversarial.has_gradient()