# LeGrad + PE Perception Encoder Notebook Usage This repository includes a notebook `legrad_perception_encoder.ipynb` that demonstrates how to run **LeGrad** explanations on the PE CoCa-style vision encoder. ## 1. Environment and installation - **Install this repo** (from the repo root): ```bash pip install -e . ``` - **Install LeGrad** (if not already installed): ```bash pip install legrad ``` Make sure you have a working CUDA‑enabled PyTorch environment. ## 2. Open the notebook From the repo root: ```bash cd xai/perception_models jupyter lab legrad_perception_encoder.ipynb ``` ## 3. What the notebook does The notebook shows how to: 1. Load a PE CoCa‑style vision encoder: - Uses `pe.CLIP.from_config("PE-Core-B16-224", pretrained=True)` and moves the model to CUDA. 2. Wrap the model with LeGrad: - `LeWrapper` lives in `core/legrad_pe.py`. - It hooks PE residual blocks and attention pooling so gradients can be used to build visual explanations. 3. Prepare inputs: - Build an image transform with `transforms.get_image_transform(model.image_size)`. - Tokenize text prompts with `transforms.get_text_tokenizer(model.context_length)`. 4. Run LeGrad: - **Multi‑layer explanation**: - `heatmap = wrapped_model.compute_legrad_coca(text_emb, image=image_tensor)` - **Single‑layer explanation**: - `heatmap = wrapped_model.compute_legrad_coca_one_layer(text_emb, image=image_tensor, layer_idx=-1)` 5. Visualize: - Convert the `heatmap` to numpy and use `legrad.visualize` (or standard plotting) to overlay it on the image. ## 4. Minimal code sketch (inside the notebook) The core usage pattern is: ```python import core.vision_encoder.pe as pe import core.vision_encoder.transforms as transforms from core.legrad_pe import LeWrapper model = pe.CLIP.from_config("PE-Core-B16-224", pretrained=True).cuda() preprocess = transforms.get_image_transform(model.image_size) tokenizer = transforms.get_text_tokenizer(model.context_length) wrapped_model = LeWrapper(model, layer_index=-2) ``` You can then: - Preprocess an input image with `preprocess`, - Tokenize prompts with `tokenizer`, - Encode text/image, and - Call one of the `compute_legrad_*` methods to obtain a heatmap for visualization.