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.safetensors holds 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.yaml is the configuration the model was trained with (machine-specific settings removed).
  • <dataset>/SHA256SUMS lists the checksums of all files of a dataset.
  • backbone/ is an unmodified copy of dinov2_vitb14_reg4_pretrain.pth from 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}
}
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for zimmerro/DINO-QPM

Finetuned
(13)
this model

Paper for zimmerro/DINO-QPM

Evaluation results

  • Top-1 accuracy, mean over 5 seeds on CUB-200-2011
    self-reported
    88.400
  • Top-1 accuracy, mean over 5 seeds on Stanford Cars
    self-reported
    93.700