A comprehensive demonstration of subset scanning for adversarial detection using the Adversarial Robustness Toolbox (ART). This project showcases how subset scanning can effectively identify adversarial examples hidden within clean data.
This demo implements the complete workflow for detecting adversarial examples using subset scanning:
- FGSM Attack Generation: Create adversarial examples using Fast Gradient Sign Method
- Mixed Dataset Creation: Hide adversarial samples within clean data (simulating real-world scenarios)
- Subset Scanning Detection: Use ART's
SubsetScanningDetector
to identify the anomalous subgroup - Performance Evaluation: Comprehensive metrics and visualizations
- Qualitative Analysis: Visual evidence of subtle perturbations and detection results
Here are some key visualizations from the demo:
Shows the subtle differences between clean and adversarial images, with perturbation patterns and magnified views.
Demonstrates how well the subset scanning detector separates clean from adversarial samples.
Reveals systematic patterns in adversarial attacks and identifies vulnerable image regions.
# Create virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Train the model first (if not already trained)
python src/models/cnn_model.py
# Run the comprehensive showcase
python showcase_subset_scanning_demo.py
This will demonstrate the complete workflow and generate both quantitative and qualitative visualizations.
For a standalone interactive visualization experience:
# Run the interactive visualization app
python visualization_app.py
This app will:
- Load real data if available, or create realistic dummy data
- Display interactive visualizations one by one
- Save visualizations to files
- Provide detailed explanations for each visualization
Each visualization opens in a separate window - close it to proceed to the next one.
For creating high-resolution screenshots for documentation or presentations:
# Create high-resolution screenshots
python screenshot_demo.py
This will generate publication-ready screenshots in the screenshots/
directory.
For detailed information about all visualization features, customization options, and troubleshooting, see the comprehensive Visualization Guide.
The showcase demonstrates:
- FGSM Attack Effectiveness: Shows how adversarial examples can fool the model
- Hidden Adversarial Detection: Subset scanning finds adversarial samples even when they're mixed with clean data
- Performance Comparison: Raw pixels vs. feature-based detection
- Comprehensive Metrics: ROC AUC, precision, recall, F1-score
- Quantitative Visualizations: Score distributions, ROC curves, confusion matrices
- Qualitative Visualizations: Original vs adversarial images, perturbation patterns, detected anomalies (see screenshots above)
- Interactive Exploration: Each visualization opens in a separate window for detailed examination
βββ showcase_subset_scanning_demo.py # Main showcase script
βββ visualization_app.py # Standalone interactive visualization app
βββ screenshot_demo.py # High-resolution screenshot generator
βββ src/
β βββ data/
β β βββ dataset.py # MNIST data loading
β β βββ subset_data.py # Mixed dataset preparation
β βββ models/
β β βββ cnn_model.py # CNN model for MNIST
β βββ attacks/
β β βββ fgsm_attack.py # FGSM attack implementation
β βββ scanning/
β β βββ art_subset_scanner.py # ART subset scanning utilities
β β βββ subset_evaluation.py # Evaluation and visualization
β β βββ simple_subset_scanning_demo.py # Simple demo
β β βββ run_subset_scanning_demo.py # Comprehensive demo
β βββ visualization/
β β βββ qualitative_analysis.py # Qualitative visualizations
β β βββ __init__.py
β βββ utils/
β βββ art_utils.py # ART classifier utilities
β βββ data_utils.py # Data preparation utilities
βββ screenshots/ # High-resolution visualization screenshots
βββ interactive_visualizations/ # Interactive visualization outputs
βββ VISUALIZATION_GUIDE.md # Comprehensive visualization guide
βββ requirements.txt
- Uses ART's
FastGradientMethod
for generating adversarial examples - Configurable perturbation magnitude (Ξ΅)
- Attack effectiveness evaluation
- Raw Pixel Detection: Flattened image data (784 dimensions for MNIST)
- Feature-Based Detection: Extracted features from CNN layers
- Mixed Dataset Support: Hidden adversarial samples within clean data
- ROC curves and AUC scores
- Precision-recall analysis
- Confusion matrices
- Score distribution visualization
- Original vs Adversarial: Side-by-side comparison showing subtle perturbations
- Perturbation Analysis: Statistical analysis of perturbation patterns
- Detected Anomalies: Visualization of images identified as anomalous
- Score Distribution: Analysis of detection scores across clean and adversarial samples
- Seamless integration with ART's
SubsetScanningDetector
- PyTorch model compatibility
- Configurable detection parameters
When you run the showcase, you'll see output like:
SUBSET SCANNING ADVERSARIAL DETECTION SHOWCASE
================================================================================
PHASE 1: Loading Data and Model
----------------------------------------
β Loaded 1000 test samples
β Data shape: torch.Size([1000, 1, 28, 28])
β Model accuracy on clean data: 98.50%
PHASE 2: Generating FGSM Adversarial Examples
----------------------------------------
β FGSM attack completed with eps=0.3
β Attack success rate: 85.20%
β Adversarial accuracy: 14.80%
PHASE 3: Creating Mixed Dataset with Hidden Adversarial Subgroup
----------------------------------------
β Mixed dataset created:
- Total samples: 1000
- Clean samples: 900
- Adversarial samples: 100
- Contamination rate: 10.0%
PHASE 4: Running Subset Scanning Detection
----------------------------------------
β Raw pixel detection completed!
β Feature-based detection completed!
PHASE 5: Evaluation and Visualization
----------------------------------------
DETECTION PERFORMANCE COMPARISON
============================================================
Metric Raw Pixels Features
------------------------------------------------------------
ROC AUC 0.892 0.945
PR AUC 0.756 0.823
F1 Score 0.723 0.789
Precision 0.689 0.756
Recall 0.760 0.823
PHASE 6: Qualitative Visualization
----------------------------------------
β Original vs adversarial visualization saved
β Detection scores distribution saved
β Detected anomalies visualization saved
β Perturbation analysis saved
π― SUCCESS: Subset scanning successfully detected the hidden adversarial subgroup!
The showcase generates several qualitative visualizations that provide intuitive understanding:
All visualizations are displayed interactively in separate windows, allowing you to:
- Zoom and pan to examine details
- Save screenshots using the plot window controls
- Explore different aspects of the visualizations
- Close windows to proceed to the next visualization
- Side-by-side comparison of clean and perturbed images
- Perturbation visualization showing the subtle differences
- Magnified perturbations to highlight imperceptible changes
- Perturbation statistics (Lβ and L2 norms)
See the Visual Showcase section above for an example of this visualization.
- Score distributions for clean vs adversarial samples
- Box plots and violin plots showing separation
- ROC curves demonstrating detection performance
See the Visual Showcase section above for an example of this analysis.
- True positives: Adversarial images correctly detected
- False positives: Clean images incorrectly flagged
- Score rankings: Top detected anomalies
- Threshold analysis: Detection boundary visualization
- Statistical patterns across the dataset
- Average perturbation patterns showing systematic changes
- Perturbation variance highlighting consistent vs random changes
- Pixel-level analysis of where perturbations occur most
See the Visual Showcase section above for an example of this analysis.
from src.scanning.simple_subset_scanning_demo import main
main()
from src.scanning.run_subset_scanning_demo import main
main()
from src.attacks.fgsm_attack import generate_fgsm_attack
adv_data, adv_preds, success_rate = generate_fgsm_attack(
model, test_data, test_labels, eps=0.3
)
from art.defences.detector.evasion import SubsetScanningDetector
from src.utils.art_utils import create_art_classifier
classifier = create_art_classifier(model)
detector = SubsetScanningDetector(classifier, window_size=784)
scores, p_values, scan_stats = detector.detect(x_combined_flat)
from src.visualization.qualitative_analysis import create_comprehensive_qualitative_analysis
create_comprehensive_qualitative_analysis(
clean_data, adversarial_data, true_labels, adv_predictions,
scores, y_true, output_dir='my_visualizations'
)
- Statistical Approach: Uses likelihood ratio tests to identify anomalous subgroups
- Unsupervised Detection: No labels required during detection
- Scalable: Efficient implementation for large datasets
- PyTorchClassifier: Wrapper for PyTorch models
- SubsetScanningDetector: Main detection class
- Configurable Parameters: Window size, scoring functions, etc.
- ROC AUC: Area under the receiver operating characteristic curve
- PR AUC: Area under the precision-recall curve
- F1 Score: Harmonic mean of precision and recall
- Confusion Matrix: Detailed classification results
- Multi-panel layouts: Comprehensive analysis in single figures
- Color-coded results: Intuitive distinction between clean and adversarial
- Statistical overlays: Thresholds, confidence intervals, and distributions
- High-resolution output: Publication-ready visualizations
This project demonstrates the integration of subset scanning with ART. Contributions are welcome!
This project is licensed under the MIT License - see the LICENSE file for details.
- ART Team: For the Adversarial Robustness Toolbox
- Subset Scanning Research: For the statistical foundation
- MNIST Dataset: For the standard benchmark dataset
For questions and support, please open an issue on GitHub or contact the maintainers.
Note: This is a demonstration project. For production use, please ensure proper testing and validation of all algorithms and implementations.