DINO-QPM checkpoints (reproductions)
Checkpoints for DINO-QPM, from the paper DINO-QPM: Adapting Visual Foundation Models for Globally Interpretable Image Classification (CVPR Workshops 2026, paper, arXiv:2604.07166). Code: github.com/RobertZimm/DINO-QPM. Archived on Zenodo: doi:10.5281/zenodo.24194857.
DINO-QPM is a lightweight interpretability adapter on top of a frozen DINOv2 backbone. An MLP maps each patch embedding to 512 features, which are average-pooled, and a sparse, binary QPM layer selects 50 of them and assigns 5 to each class. Every class is thus explained by 5 features that can be localised in the image.
Reproductions, not the paper's checkpoints
The checkpoints behind the paper's tables were not kept. These models were retrained with the same architecture, losses and hyperparameters as in the paper, with three differences:
- Shorter schedule: 10 dense epochs (paper: 40) and 25 fine-tuning epochs (paper: 50).
- Fine-tuning batch size 16 (paper: 32).
- 5 seeds per dataset, as for all models in the paper except the main DINO-QPM configuration, which the paper accidentally evaluated over 15 seeds.
They were trained with our internal training code, a successor of the public repository. Their accuracy was re-computed with the public repository and matches the values logged at training time exactly.
Results
Top-1 test accuracy (%), mean ± standard deviation over 5 seeds:
| Model | CUB-200-2011 | Stanford Cars |
|---|---|---|
| DINO-QPM (fine-tuned), released | 88.4 ± 0.3 | 93.7 ± 0.1 |
| DINO-QPM (fine-tuned), paper | 88.3 ± 0.3 | 94.0 ± 0.2 |
| Dense model, released | 80.7 ± 0.3 | 91.7 ± 0.2 |
| Dense model, paper | 78.1 ± 0.3 | 92.9 ± 0.1 |
Per seed:
| Seed | CUB dense | CUB fine-tuned | Cars dense | Cars fine-tuned |
|---|---|---|---|---|
| 2847391 | 81.0 | 88.3 | 91.8 | 93.7 |
| 3748291 | 80.9 | 88.9 | 91.4 | 93.7 |
| 5647382 | 80.2 | 88.1 | 91.6 | 93.8 |
| 6190452 | 80.6 | 88.4 | 91.9 | 93.6 |
| 9182736 | 80.6 | 88.1 | 91.6 | 93.4 |
Interpretability metrics (%) of the fine-tuned models, computed with this repository (--eval-mode cub_segmentation_overlap class_independence contrastiveness diversity; Plausibility is CUBSegmentationOverlap_gradcam_dilated, CUB only), mean ± standard deviation over 5 seeds:
| Model | Plausibility CUB | SID@5 CUB | SID@5 Cars | Class-Indep. CUB | Class-Indep. Cars | Contrast. CUB | Contrast. Cars |
|---|---|---|---|---|---|---|---|
| DINO-QPM, released | 97.1 ± 0.2 | 92.0 ± 0.3 | 94.0 ± 0.1 | 93.9 ± 0.1 | 93.7 ± 0.1 | 99.8 ± 0.0 | 99.8 ± 0.0 |
| DINO-QPM, paper | 95.0 ± 0.6 | 90.1 ± 0.0 | 91.7 ± 0.2 | 93.7 ± 0.1 | 93.7 ± 0.1 | 100.0 ± 0.0 | 100.0 ± 0.0 |
Files
20 checkpoints: 2 datasets × 5 seeds × 2 stages.
cub/ CUB-200-2011 (200 classes)
cars/ Stanford Cars (196 classes)
└── seed_<seed>/
├── dense/ dense model (512 features, all used by every class)
│ ├── model.safetensors
│ └── config.yaml
└── finetune/ DINO-QPM (50 selected features, 5 per class)
├── model.safetensors
└── config.yaml
backbone/dinov2_vitb14_reg4_pretrain.pth copy of Meta's DINOv2 weights (Hugging Face only)
model.safetensorsholds the adapter only (~44 MB); the frozen DINOv2 ViT-B/14 backbone with registers is loaded separately. The fine-tuned files also hold the QPM feature selection (linear.selection). The header metadata records dataset, seed and stage.config.yamlis the configuration the model was trained with (machine-specific settings removed).<dataset>/SHA256SUMSlists the checksums of all files of a dataset.backbone/is an unmodified copy ofdinov2_vitb14_reg4_pretrain.pthfrom facebookresearch/dinov2 (Apache-2.0). The code uses it only if the download from Meta fails.
Usage
Install the code (pip install -e . in the repository), then:
python main.py evaluate --pretrained cub/2847391/finetune --eval-mode accuracy
python main.py inference --pretrained cars/2847391 --image-path my_car.jpg
from dino_qpm.hub import load_pretrained
model, config = load_pretrained("cub", seed=2847391, stage="finetune")
The datasets are needed for evaluation only; see the repository README for the setup. A downloaded file can also be passed directly: python main.py evaluate --model-path cub/seed_2847391/finetune/model.safetensors.
Training details
| Dense | Fine-tuning | |
|---|---|---|
| Epochs | 10 | 25 |
| Batch size | 32 | 16 |
| Optimiser | AdamW (schedule-free) | AdamW (schedule-free) |
| Learning rate | 1e-3 | 5e-3 |
| Weight decay | 7e-4 | 8e-4 |
| Dropout (final layer) | 0.2 | 0 |
| Feature diversity loss λ_div | 0.5 | 1 |
| L1 on feature maps / feature vector | 0 / 0 | 5 / 1 |
Backbone: DINOv2 ViT-B/14 with 4 registers, frozen, 224 × 224 input. MLP adapter: 4 layers, hidden size 2048, batch norm, ReLU, 512 output features, applied per patch token, average pooling. QPM: 50 features, 5 per class, solved with Gurobi (MIP gap 0.5 %, time limit 3 h). Seeds: 2847391, 3748291, 5647382, 6190452, 9182736. Hardware: one NVIDIA GPU per run.
Licence
Apache License 2.0; copyright notice in NOTICE. The models build on DINOv2 (Apache-2.0) and were trained on CUB-200-2011 and Stanford Cars, which have their own terms of use for research.
Citation
@inproceedings{zimmermann2026dino-qpm,
title = {{DINO-QPM}: Adapting Visual Foundation Models for Globally Interpretable Image Classification},
author = {Zimmermann, Robert and Norrenbrock, Thomas and Rosenhahn, Bodo},
booktitle = {2026 IEEE/CVF Conference on Computer Vision and Pattern Recognition Workshops (CVPRW)},
year = {2026}
}
Model tree for zimmerro/DINO-QPM
Base model
facebook/dinov2-with-registers-basePaper for zimmerro/DINO-QPM
Evaluation results
- Top-1 accuracy, mean over 5 seeds on CUB-200-2011self-reported88.400
- Top-1 accuracy, mean over 5 seeds on Stanford Carsself-reported93.700