Model reference · open weights

aloe-dino-in1k-lp

Available as managed deployment Licence fee Embeddings rmaser · community Image embed 1 variants 909 dl/mo

aloe-dino-in1k-lp is an open-weight embedding model from rmaser. AxForge deploys and operates it for you on dedicated EU-owned hardware — with the licence handled where one is required.

Available as managed deployment — configured and operated for you on dedicated EU hardware, quoted per deployment.

What it is

Released byrmaser
TypeEmbedding models
TaskImage embed
Parameters (lead)88M
Runs withtransformers
Released2026-07-18
Popularity909 downloads / month
LicenceCommercial licence needed

About

What aloe-dino-in1k-lp is

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:

KindRepos
Backbonermaser/aloe-v2-dinov3-{small,base,large}
ImageNet-1k LPrmaser/aloe-v2-dinov3-{small,base,large}-in1k-lp
Read the full model card

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):

SizeALOEv2 B-cosOriginal ALOE B-cosDINOv3 AttnLRP
Small75.8079.5553.46
Base87.7782.6965.11
Large84.3880.6965.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

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.

From the published model card. Full card on the HuggingFace links in the sidebar.

Using it via the API

Call it like any OpenAI endpoint

Once AxForge deploys aloe-dino-in1k-lp for you, it answers on the OpenAI-compatible API — the same base URL and keys as every other model. (aloe-dino-in1k-lp below is illustrative; you get the exact model name on deployment.)

$ curl -sS https://api.axforge.ai/v1/embeddings \
  -H "Authorization: Bearer $AXFORGE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"aloe-dino-in1k-lp","input":"text to embed"}'

Create an account — your API key is available in the console. 3M free tokens every 30 days with every new account.

© 2026 AxForge · EU-hosted AI infrastructure Pricing Docs Trust Privacy Terms