LeGrad
An Explainability Method for Vision Transformers via Feature Formation Sensitivity
Walid Bousselham1, Angie Boggust2, Sofian Chaybouti1, Hendrik Strobelt3,4 and Hilde Kuehne1,3
1 University of Bonn & Goethe University Frankfurt, 2 MIT CSAIL, 3 MIT-IBM Watson AI Lab, 4 IBM Research.
Vision-Language foundation models have shown remarkable performance in various zero-shot settings such as image retrieval, classification, or captioning. we propose LeGrad, an explainability method specifically designed for ViTs. We LeGrad we explore how the decision-making process of such models by leveraging their feature formation process. A by-product of understanding VL models decision-making is the ability to produce localised heatmap for any text prompt.
The following is the code for a wrapper around the OpenCLIP library to equip VL models with LeGrad.
🔨 Installation
legrad library can be simply installed via pip:
$ pip install legrad_torch
Demo
- Try out our web demo on HuggingFace Spaces
- Run the demo on Google Colab:
- Run
playground.pyfor a usage example.
To run the gradio app locally, first install gradio and then run app.py:
$ pip install gradio
$ python app.py
Usage
To see which pretrained models is available use the following code snippet:
import legrad
legrad.list_pretrained()
Single Image
To process an image and a text prompt use the following code snippet:
Note: the wrapper does not affect the original model, hence all the functionalities of OpenCLIP models can be used seamlessly.
import requests
from PIL import Image
import open_clip
import torch
from legrad import LeWrapper, LePreprocess
from legrad.utils import visualize
# ------- model's paramters -------
model_name = 'ViT-B-16'
pretrained = 'laion2b_s34b_b88k'
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
# ------- init model -------
model, _, preprocess = open_clip.create_model_and_transforms(
model_name=model_name, pretrained=pretrained, device=device)
tokenizer = open_clip.get_tokenizer(model_name=model_name)
model.eval()
# ------- Equip the model with LeGrad -------
model = LeWrapper(model)
# ___ (Optional): Wrapper for Higher-Res input image ___
preprocess = LePreprocess(preprocess=preprocess, image_size=448)
# ------- init inputs: image + text -------
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = preprocess(Image.open(requests.get(url, stream=True).raw)).unsqueeze(0).to(device)
text = tokenizer(['a photo of a cat']).to(device)
# -------
text_embedding = model.encode_text(text, normalize=True)
print(image.shape)
explainability_map = model.compute_legrad_clip(image=image, text_embedding=text_embedding)
# ___ (Optional): Visualize overlay of the image + heatmap ___
visualize(heatmaps=explainability_map, image=image)
⭐ Acknowledgement
This code is build as wrapper around OpenCLIP library from LAION, visit their repo for more vision-language models. This project also takes inspiration from Transformer-MM-Explainability and the timm library, please visit their repository.
📚 Citation
If you find this repository useful, please consider citing our work 📝 and giving a star 🌟 :
@article{bousselham2024legrad,
author = {Bousselham, Walid and Boggust, Angie and Chaybouti, Sofian and Strobelt, Hendrik and Kuehne, Hilde}
title = {LeGrad: An Explainability Method for Vision Transformers via Feature Formation Sensitivity},
journal = {arXiv preprint arXiv:2404.03214},
year = {2024},
}
Metadata
Release files for legrad-torch 1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| legrad_torch-1.1.tar.gz | 16.1 kB | Without provenance | Details for legrad_torch-1.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| legrad_torch-1.1-py3-none-any.whl | Python 3 | none | any | Details for legrad_torch-1.1-py3-none-any.whl |
Total release size: 30.2 kB
Release files / legrad_torch-1.1.tar.gz
| Download URL | legrad_torch-1.1.tar.gz |
|---|---|
| Size | 16.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a43c4c026f742b8d5e9305dbecd20d2481e116bab3c7514dd0f12a3547fddac5
|
|
BLAKE2b-256 checksum How to use checksums |
e32b5e1f060e34500476a6f82b7c7fd57a12847a60216aeacf2752f4272a0026
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.1.1 CPython/3.11.7
|
Release files / legrad_torch-1.1-py3-none-any.whl
| Download URL | legrad_torch-1.1-py3-none-any.whl |
|---|---|
| Size | 14.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
cad57870ce1347c2cad69c1bcda2475c46ba8f0313eec52b85c4359f61ca0267
|
|
BLAKE2b-256 checksum How to use checksums |
99f9d552783ff4f11e54abb2e901c2cc3132549b82a7493855b79bc10a8f94ee
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.1.1 CPython/3.11.7
|
Security for legrad-torch 1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.