Finished testing random noise and threshold filter

This commit is contained in:
Aidan Sharpe 2024-04-18 15:58:30 -04:00
parent 35fc6dd2e5
commit 3c35a2bc02
7 changed files with 7 additions and 8 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

View File

@ -4,7 +4,6 @@ import numpy as np
import torch import torch
# Turn a pytorch tensor into an image # Turn a pytorch tensor into an image
def pttensor_to_images(data): def pttensor_to_images(data):
images = None images = None

View File

@ -118,10 +118,10 @@ def test(model, device, test_loader, epsilon):
# Evaluate performance for # Evaluate performance for
for i in range(TESTED_STRENGTH_COUNT): for i in range(TESTED_STRENGTH_COUNT):
strength = 2*i + 1 strength = (2*i + 1)/10
# Apply the filter with the specified strength # Apply the filter with the specified strength
filtered_input = defense_filters.gaussian_blur(perturbed_data_normalized, batch_size=len(perturbed_data_normalized), ksize=(strength, strength)) filtered_input = defense_filters.threshold_filter(perturbed_data_normalized, batch_size=len(perturbed_data_normalized), threshold=strength)
# Evaluate the model on the filtered images # Evaluate the model on the filtered images
filtered_output = model(filtered_input) filtered_output = model(filtered_input)
# Get the predicted classification # Get the predicted classification
@ -157,8 +157,8 @@ def test(model, device, test_loader, epsilon):
print(f"Clean (No Filter) Accuracy = {orig_correct} / {len(test_loader)} = {orig_acc}") print(f"Clean (No Filter) Accuracy = {orig_correct} / {len(test_loader)} = {orig_acc}")
print(f"Unfiltered Accuracy = {unfiltered_correct} / {len(test_loader)} = {unfiltered_acc}") print(f"Unfiltered Accuracy = {unfiltered_correct} / {len(test_loader)} = {unfiltered_acc}")
for i in range(TESTED_STRENGTH_COUNT): for i in range(TESTED_STRENGTH_COUNT):
strength = 2*i + 1 strength = (2*i + 1)/10
print(f"Gaussian Blur (strength = {strength}) = {filtered_correct_counts[i]} / {len(test_loader)} = {filtered_accuracies[i]}") print(f"Threshold Filter (threshold = {strength}) = {filtered_correct_counts[i]} / {len(test_loader)} = {filtered_accuracies[i]}")
return unfiltered_acc, filtered_accuracies return unfiltered_acc, filtered_accuracies
@ -176,10 +176,10 @@ plt.figure(figsize=(16,9))
plt.plot(epsilons, unfiltered_accuracies, label="Attacked Accuracy") plt.plot(epsilons, unfiltered_accuracies, label="Attacked Accuracy")
for i in range(TESTED_STRENGTH_COUNT): for i in range(TESTED_STRENGTH_COUNT):
filtered_accuracy = [filter_eps[i] for filter_eps in filtered_accuracies] filtered_accuracy = [filter_eps[i] for filter_eps in filtered_accuracies]
plt.plot(epsilons, filtered_accuracy, label=f"Gaussian Blur (strength = {2*i + 1})") plt.plot(epsilons, filtered_accuracy, label=f"Threshold Filter (threshold = {(2*i + 1)/10})")
plt.legend(loc="upper right") plt.legend(loc="upper right")
plt.title("Gaussian Blur Performance") plt.title("Threshold Filter Performance")
plt.xlabel("Attack Strength ($\\epsilon$)") plt.xlabel("Attack Strength ($\\epsilon$)")
plt.ylabel("Accuracy") plt.ylabel("Accuracy")
plt.savefig("Images/GaussianBlurPerformance.png", ) plt.savefig("Images/ThresholdFilterPerformance.png", )