Instructions to use rmaser/aloe-v2-dinov3-large with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use rmaser/aloe-v2-dinov3-large with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-feature-extraction", model="rmaser/aloe-v2-dinov3-large", trust_remote_code=True)# Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("rmaser/aloe-v2-dinov3-large", trust_remote_code=True, device_map="auto") - Notebooks
- Google Colab
- Kaggle
ALOEv2 (multi-resolution DINOv3)
ALOEv2 is a B-cos-interpretable DINOv3 model obtained by fine-tuning the original ALOE backbones for a further 30k steps. It keeps the original three-layer distillation scheme but adds per-step multi-resolution sampling (224/384/480) and fixes a target-layer bug so the even-thirds distillation layers include the final transformer block.
The original ALOE distilled at a single resolution (224 px), which left features poorly calibrated for the high-resolution inputs that dense-prediction probes β correspondence, depth, surface normals β actually run on, so feature quality degraded at those resolutions. Training on multiple resolutions removes that train/eval mismatch and restores dense-prediction accuracy close to the DINOv3 teacher, while retaining the inherent B-cos explanations and holding ImageNet-1k recognition roughly unchanged.
This card is shared by the ALOEv2 DINOv3 backbones and their ImageNet-1k linear-probe (LP) classifier heads:
| Kind | Repos |
|---|---|
| Backbone | rmaser/aloe-v2-dinov3-{small,base,large} |
| ImageNet-1k LP | rmaser/aloe-v2-dinov3-{small,base,large}-in1k-lp |
Why ALOEv2 (qualitative difference vs. previous models)
Fig 2a β dense correspondence & surface normals across model sizes. ALOEv2 (orange) tracks the DINOv3 teacher closely on NAVI / ScanNet / SPair / surface-normals, while the original ALOE (grey, dotted) lags far behind.
NYUv2 depth probe. Ξ΄<1.25 (higher better) and RMSE (lower better) by size:
Fig 3 β discriminative quality (ImageNet-1k kNN@20 + Linear Probe).
GridPG localization. ALOEv2 inherent B-cos localization (higher is better):
| Size | ALOEv2 B-cos | Original ALOE B-cos | DINOv3 AttnLRP |
|---|---|---|---|
| Small | 75.80 | 79.55 | 53.46 |
| Base | 87.77 | 82.69 | 65.11 |
| Large | 84.38 | 80.69 | 65.33 |
ImageNet-1k (base): kNN@20 81.43, Linear Probe 83.92.
Usage β backbone (feature extraction)
from transformers import AutoImageProcessor, AutoModel
repo_id = "rmaser/aloe-v2-dinov3-base"
processor = AutoImageProcessor.from_pretrained(repo_id, trust_remote_code=True)
model = AutoModel.from_pretrained(repo_id, trust_remote_code=True)
model.eval()
Hidden states are pre-norm
With output_hidden_states=True, hidden_states[i] is the raw output of block i β in
particular hidden_states[-1] is not last_hidden_state, which additionally passes through
post_layernorm. This is the convention the distillation loss was defined against, and recent
Transformers versions report the post-norm tensor in hidden_states[-1] on the official DINOv3
teacher, so the two APIs differ at that one index.
Use hidden_states[i] for anything layer-wise β ALOEv2 supervises blocks n/3, 2n/3 and n,
where its cosine similarity to the DINOv3 teacher's corresponding pre-norm features is 0.98β0.99.
post_layernorm was not part of the loss, so last_hidden_state is noticeably less aligned
(0.78β0.86).
Usage β ImageNet-1k classification and explanations (-in1k-lp only)
from PIL import Image
from transformers import AutoImageProcessor, AutoModelForImageClassification
repo_id = "rmaser/aloe-v2-dinov3-base-in1k-lp"
processor = AutoImageProcessor.from_pretrained(repo_id, trust_remote_code=True)
model = AutoModelForImageClassification.from_pretrained(repo_id, trust_remote_code=True)
model.eval()
image = Image.open("image.jpg").convert("RGB")
pixel_values = processor(images=image, return_tensors="pt").pixel_values
result = model.explain(pixel_values, idx=None)
class_idx = int(result["explained_class_idx"][0])
print(f"Predicted ImageNet-1k class index: {class_idx}")
rgba = (result["explanation"][0] * 255).astype("uint8")
Image.fromarray(rgba).save("explanation.png")
idx=None explains the predicted class. Pass an ImageNet-1k class index to idx to explain a specific class instead. Do not wrap model.explain(...) in torch.inference_mode(): generating the attribution requires input gradients.
Notes
ALOE models use custom B-cos-aware Transformers code, so loading requires
trust_remote_code=True. Runtime code: rmaser/aloe-arch.
Links
- Code: github.com/rmaser/ALOE
- Original ALOE models: ALOE on Hugging Face
- Shared runtime code:
rmaser/aloe-arch - Paper: Align Once to Explain (CVPR 2026)
Citation
@inproceedings{maser2026align,
title = {Align Once to Explain: Feature Alignment for Scalable B-cosification of Foundational Vision Transformers},
author = {Maser, Raphael and Gairola, Siddhartha and Rao, Sukrut and Schiele, Bernt},
booktitle = {Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},
year = {2026},
note = {Poster}
}
License
This model is released under the Creative Commons Attribution-NonCommercial ShareAlike 4.0 International License. The methods described in this work are patent pending.
- Downloads last month
- 10,625



