Skip to main content
Horama logo

Horama is a compact library designed for Feature Visualization experiments, initially providing the implementation code for the research paper Maco, developed mainly to support exploratory research.

This repository includes:

While Horama builds on ideas from tools like Lucent, it focuses on flexibility and extensibility in PyTorch. It is not intended as a strict reproduction of Distill’s work -- only Maco is officially reproduced here.

Quick start notebook:
Open in Google Colab

🚀 Getting Started

Horama requires Python 3.7–3.10 and works with PyTorch models. Installation is available via PyPI:

pip install horama

Once installed, you can generate feature visualizations with minimal setup. The API is consistent across all methods and designed for easy experimentation. Example using timm:

import torch
import timm
import matplotlib.pyplot as plt
from horama import maco, fourier, plot_maco

model = timm.create_model('resnet18', pretrained=True).cuda().eval()
objective = lambda images: torch.mean(model(images)[:, 1])
# run maco
image1, alpha1 = maco(objective, device='cuda')
plot_maco(image1, alpha1)
plt.show()
# run fourier
image2, alpha2 = fourier(objective, device='cuda')
plot_maco(image2, alpha2)
plt.show()

💡 Be sure to match device='cuda' or 'cpu' depending on where your model is loaded.

Notebooks 📓

We provide a set of Colab notebooks to help you get started and explore different visualization techniques in Horama.

  • Starter Notebook (Colab) – quick overview and usage examples
  • Feature Inversion – Coming soon
  • Feature Accentuation – Coming soon

If you're new to feature visualization or just want a fast way to test Horama, the starter notebook is a great place to begin.

API Reference

Horama provides three main feature visualization functions. All three share a common structure and are designed for simple, composable use.

maco(objective_function,
     total_steps=1000,
     learning_rate=1.0,
     image_size=1000,
     model_input_size=224,
     noise=0.1,
     values_range=(-2.5, 2.5),
     crops_per_iteration=6,
     box_size=(0.20, 0.25),
     penalty=1.0,
     device='cuda')

fourier(objective_function,
        decay_power=1.5,
        total_steps=1000,
        learning_rate=1.0,
        image_size=1000,
        model_input_size=224,
        noise=0.1,
        values_range=(-2.5, 2.5),
        crops_per_iteration=6,
        box_size=(0.20, 0.25),
        penalty=1.0,
        device='cuda')

accentuation(objective_function,
             image_seed,
             decay_power=1.5,
             total_steps=1000,
             learning_rate=1.0,
             image_size=1000,
             model_input_size=224,
             noise=0.05,
             values_range=(-2.5, 2.5),
             crops_per_iteration=6,
             box_size=(0.20, 0.25),
             penalty=1.0,
             device='cuda')

Notes

  • objective_function(images) → scalar defines what you're visualizing. It typically targets a class score, a neuron or a direction.
  • values_range should match your model's expected input scale. For most timm models: (-2.5, 2.5) is usually fine.
  • box_size controls crop scale: (min_ratio, max_ratio).
  • model_input_size must match your model's expected input size (e.g. 224).

When optimizing, it's crucial to fine-tune the hyperparameters. Parameters like the decay spectrum in the Fourier method significantly impact the visual output, controlling the energy distribution across frequencies. Additionally, adjust the values_range to match your model's preprocessing requirements, and ensure model_input_size matches the expected input size of your model.

Citation

@article{fel2023maco,
      title={Unlocking Feature Visualization for Deeper Networks with MAgnitude Constrained Optimization},
      author={Thomas, Fel and Thibaut, Boissin and Victor, Boutin and Agustin, Picard and Paul, Novello and Julien, Colin and Drew, Linsley and Tom, Rousseau and Rémi, Cadène and Laurent, Gardes and Thomas, Serre},
      journal={Advances in Neural Information Processing Systems (NeurIPS)},
      year={2023},
}

Additional Resources

For a simpler and maintained implementation of the code for TensorFlow and the other feature visualization methods used in the paper, refer to the Xplique toolbox. Additionally, we have created a website called the LENS Project, which features the 1000 classes of ImageNet.

For code faithful to the original work of the Clarity team, we highly recommend Lucent.

Authors

Metadata

Release files for Horama 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for Horama 0.3.0
File Size Uploaded
horama-0.3.0.tar.gz 11.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for Horama 0.3.0
File Interpreter ABI Platform
horama-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 26.4 kB

Release files / horama-0.3.0.tar.gz

Download URL horama-0.3.0.tar.gz
Size 11.1 kB
Tags Source
SHA-256 checksum
How to use checksums
ac47233f10e2d5957e771b0a7a7869400978586a7f1d3f00374db5bc280590e1
BLAKE2b-256 checksum
How to use checksums
a516815f6b2f0111c8277f19cd975cf6905eb1063b9da11c6b6d086d8247d353
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.3

Release files / horama-0.3.0-py3-none-any.whl

Download URL horama-0.3.0-py3-none-any.whl
Size 15.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
cdc1a477c099dd18d32d34ebf1317e7eadd41f479aae2c107f973f08f5a05ee6
BLAKE2b-256 checksum
How to use checksums
7336015c6d3d94cd0663ce66fe02e37b81d695af236ae0c7190e927e908e75cf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.3

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 release files

0.2.0

2 release files

0.1.0

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page