diff --git a/2024 - (Fillable) ECE Engineering Clinic Report Cover Page with Grading Components and Weights.pdf b/2024 - (Fillable) ECE Engineering Clinic Report Cover Page with Grading Components and Weights.pdf new file mode 100644 index 0000000..b500886 Binary files /dev/null and b/2024 - (Fillable) ECE Engineering Clinic Report Cover Page with Grading Components and Weights.pdf differ diff --git a/Filter_Analysis/Images/GaussianBlurPerformance.png b/Filter_Analysis/Images/GaussianBlurPerformance.png index 73eca72..8fb5f4c 100644 Binary files a/Filter_Analysis/Images/GaussianBlurPerformance.png and b/Filter_Analysis/Images/GaussianBlurPerformance.png differ diff --git a/Filter_Analysis/Images/RandomNoisePerformance.png b/Filter_Analysis/Images/RandomNoisePerformance.png new file mode 100644 index 0000000..cd2b52f Binary files /dev/null and b/Filter_Analysis/Images/RandomNoisePerformance.png differ diff --git a/Filter_Analysis/Images/ThresholdFilterPerformance.png b/Filter_Analysis/Images/ThresholdFilterPerformance.png new file mode 100644 index 0000000..2d4fdca Binary files /dev/null and b/Filter_Analysis/Images/ThresholdFilterPerformance.png differ diff --git a/Filter_Analysis/__pycache__/defense_filters.cpython-311.pyc b/Filter_Analysis/__pycache__/defense_filters.cpython-311.pyc index b562457..b328ee7 100644 Binary files a/Filter_Analysis/__pycache__/defense_filters.cpython-311.pyc and b/Filter_Analysis/__pycache__/defense_filters.cpython-311.pyc differ diff --git a/Filter_Analysis/defense_filters.py b/Filter_Analysis/defense_filters.py index 2a43d40..7d30717 100644 --- a/Filter_Analysis/defense_filters.py +++ b/Filter_Analysis/defense_filters.py @@ -4,7 +4,6 @@ import numpy as np import torch - # Turn a pytorch tensor into an image def pttensor_to_images(data): images = None diff --git a/Filter_Analysis/fgsm.py b/Filter_Analysis/fgsm.py index 6bf140d..0be1f55 100644 --- a/Filter_Analysis/fgsm.py +++ b/Filter_Analysis/fgsm.py @@ -118,10 +118,10 @@ def test(model, device, test_loader, epsilon): # Evaluate performance for for i in range(TESTED_STRENGTH_COUNT): - strength = 2*i + 1 + strength = (2*i + 1)/10 # 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 filtered_output = model(filtered_input) # 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"Unfiltered Accuracy = {unfiltered_correct} / {len(test_loader)} = {unfiltered_acc}") for i in range(TESTED_STRENGTH_COUNT): - strength = 2*i + 1 - print(f"Gaussian Blur (strength = {strength}) = {filtered_correct_counts[i]} / {len(test_loader)} = {filtered_accuracies[i]}") + strength = (2*i + 1)/10 + print(f"Threshold Filter (threshold = {strength}) = {filtered_correct_counts[i]} / {len(test_loader)} = {filtered_accuracies[i]}") return unfiltered_acc, filtered_accuracies @@ -176,10 +176,10 @@ plt.figure(figsize=(16,9)) plt.plot(epsilons, unfiltered_accuracies, label="Attacked Accuracy") for i in range(TESTED_STRENGTH_COUNT): 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.title("Gaussian Blur Performance") +plt.title("Threshold Filter Performance") plt.xlabel("Attack Strength ($\\epsilon$)") plt.ylabel("Accuracy") -plt.savefig("Images/GaussianBlurPerformance.png", ) +plt.savefig("Images/ThresholdFilterPerformance.png", )