A comprehensive, interactive deep dive into how Convolutional Neural Networks (CNNs) "see" the world through three tutorial notebooks covering fundamentals and advanced feature visualization.
Topics:
- Image tensors & convolution mathematics
- Training a simple CNN on ImageNette
- Filter & feature map visualization
- Saliency maps (vanilla gradients)
- Grad-CAM class activation mapping
Features: β Auto-setup for Colab | β LaTeX formulas | β Research references
Topics:
- Gradient ascent optimization for feature visualization
- Reproducing Distill.pub Circuits research
- FFT vs pixel parameterization
- Total variation & L2 regularization
Features: β Uses torch-lucent library | β Self-contained (no local deps) | β Publication-quality visuals
Topics:
- Finding dataset examples across activation spectrum
- Minimum, slightly negative, slightly positive, maximum examples
- Distill.pub style 6-column visualization layout
Features: β Streaming ImageNet | β W&B logging | β Publication-quality Distill.pub visuals
Topics:
- Feature visualization with Faccent library
- Advanced optimization techniques
- Class activation mapping (CAM)
Features: β Faccent library | β Advanced parametrization | β CAM visualization
Click either badge above β Run all cells. Setup is automatic!
Requires Python 3.13+ and uv
# Clone the repository
git clone https://github.com/cataluna84/VisionInterpretability.git
cd VisionInterpretability
# Install dependencies
uv sync
# Start Jupyter
uv run jupyter labThen open either notebook in notebooks/.
VisionInterpretability/
βββ notebooks/
β βββ cataluna84__segment_1_intro.ipynb # Part 1: CNN Basics
β βββ cataluna84__segment_2_activation_max.ipynb # Part 2: Feature Viz
β βββ cataluna84__segment_3_dataset_images.ipynb # Part 3: Dataset Examples
β βββ cataluna84__segment_3_faccent.ipynb # Part 3b: Faccent Optimization
β βββ lucent/ # Lucent tutorial notebooks
β β βββ tutorial.ipynb # Getting started with Lucent
β β βββ activation_grids.ipynb # Activation grid visualizations
β β βββ diversity.ipynb # Feature diversity analysis
β β βββ feature_inversion.ipynb # Feature inversion techniques
β β βββ GAN_parametrization.ipynb # GAN-based parametrization
β β βββ neuron_interaction.ipynb # Neuron interaction analysis
β β βββ style_transfer.ipynb # Neural style transfer
β β βββ modelzoo.ipynb # Model zoo examples
β βββ results/ # Notebook output artifacts
β βββ wandb/ # W&B experiment logs
βββ src/segment_1_intro/ # Python modules (for Segment 1)
β βββ __init__.py
β βββ data.py # ImageNette dataset loading
β βββ models.py # SimpleCNN, InceptionV1, training
β βββ visualize.py # Grad-CAM, Saliency Maps, plotting
βββ src/segment_3_dataset_images/ # Python modules (for Segment 3)
β βββ __init__.py
β βββ activation_pipeline.py # Activation extraction, spectrum tracking
β βββ visualization.py # Distill.pub style plotting
β βββ faccent/ # Feature visualization library
β βββ cam.py # Class activation mapping
β βββ mask.py # Masking utilities
β βββ objectives.py # Optimization objectives
β βββ param.py # Image parameterization
β βββ render.py # Rendering engine
β βββ transform.py # Image transforms
β βββ utils.py # Utility functions
β βββ modelzoo/ # Pretrained model loaders
β βββ inceptionv1/ # InceptionV1 model
βββ scripts/ # Notebook enhancement scripts
β βββ add_circuit_visualization.py
β βββ add_colab_support_seg3.py
β βββ add_data_dir_param.py
β βββ add_device_definition.py
β βββ add_performance_docs.py
β βββ add_plotly_setup.py
β βββ add_setup_cell_seg2.py
β βββ add_wandb_chart.py
β βββ analyze_flow.py
β βββ analyze_notebook_structure.py
β βββ check_gpu.py
β βββ complete_restructure.py
β βββ enhance_notebook_theory.py
β βββ fix_animate_sequence.py
β βββ update_notebook.py
β βββ update_notebook_distill.py
βββ data/ # Dataset files
β βββ imagenette2-320/ # ImageNette dataset
β βββ segment_3_test_images/ # Test images for Segment 3
βββ docs/ # Documentation
βββ pyproject.toml # Dependencies (UV)
from segment_1_intro import data
train_loader = data.load_imagenette(split="train", batch_size=32)
classes = data.IMAGENETTE_CLASSES # 10 ImageNet classesfrom segment_1_intro import models
model = models.load_simple_cnn(num_classes=10)
history = models.train_model(model, train_loader, val_loader, epochs=5)from segment_1_intro import visualize
# Saliency map
saliency = visualize.compute_saliency_map(model, image, target_class=3)
# Grad-CAM
gradcam = visualize.GradCAM(model, model.conv3)
heatmap = gradcam(image, target_class=3)from segment_3_dataset_images import (
ActivationSpectrumTrackerV2,
FeatureOptimizer,
plot_neuron_spectrum_distill,
)
tracker = ActivationSpectrumTrackerV2(num_neurons=10, samples_per_category=9)
optimizer = FeatureOptimizer(model)
fig = plot_neuron_spectrum_distill(
neuron_idx=0,
layer_name="mixed4a",
spectrum=tracker.get_spectrum(0),
optimized_img=optimizer.optimize_neuron("mixed4a", 0),
negative_optimized_img=optimizer.optimize_neuron_negative("mixed4a", 0),
)- PyTorch >= 2.5.0
- torchvision >= 0.20.0
- matplotlib >= 3.9.0
- numpy >= 2.0.0
- opencv-python >= 4.13.0
- scikit-learn >= 1.5.0
- tqdm >= 4.66.0
- torch-lucent >= 0.1.8 β Feature visualization library (PyTorch port of Lucid)
- torch-lucent >= 0.1.8 β Feature visualization
- wandb >= 0.18.0 β Experiment tracking
| Section | Notebook | Key Concepts |
|---|---|---|
| Image Representation | Segment 1 | Tensors |
| Convolutions | Segment 1 | Kernels, stride, padding, formulas |
| CNN Training | Segment 1 | SimpleCNN on ImageNette |
| Feature Maps | Segment 1 | Layer activations, what CNNs detect |
| Saliency Maps | Segment 1 | |
| Grad-CAM | Segment 1 | |
| Activation Max | Segment 2 | Gradient ascent, FFT parameterization |
| Feature Viz | Segment 2 | Reproducing Distill.pub Circuits |
| Dataset Examples | Segment 3 | Activation spectrum, min/max/near-threshold |
| Distill.pub Layout | Segment 3 | 6-column visualization |
- Selvaraju et al., Grad-CAM, ICCV 2017
- Zeiler & Fergus, Visualizing CNNs, ECCV 2014
- Olah et al., Feature Visualization, Distill 2017
- Olah et al., Circuits, Distill 2020
MIT License