MoPET — booster-derma (DermaMNIST, BloodMNIST, OCTMNIST, OrganSMNIST)

Official weights for MoPET: Parameter-Efficient Mixture-of-Experts for Unified Medical Image Classification (EMA4MICCAI 2026 Workshop). This repo holds the booster-derma variant: DermaMNIST co-trained with three auxiliary MedMNIST+ datasets (Blood, OCT, OrganS) in a single shared MoPET expert pool, part of the paper's cross-domain "booster" analysis.

MoPET unifies medical image classification across heterogeneous MedMNIST+ tasks by adapting a frozen DINOv3 ViT-B/16 backbone with a learned sparse top-k router over a heterogeneous pool of LoRA + BOFT experts injected into the attention qkv projections, trained with a DeepSeekMoE-style load-balancing loss and one lightweight classification head per dataset. Only the experts, routers, and heads are trained; the backbone stays frozen and is reconstructed from timm at load time.

Model Details

  • Developed by: Sebastian Doerrich, Daniel Würtinger (xAILab, University of Bamberg)
  • Funded by: Hightech Agenda Bayern (HTA) of the Free State of Bavaria, Germany
  • Model type: Mixture-of-Experts over parameter-efficient adapters (LoRA + BOFT) on a frozen Vision Transformer (DINOv3 ViT-B/16)
  • License: MIT

Model Sources

Architecture and training

Backbone vit_base_patch16_dinov3.lvd1689m (DINOv3 ViT-B/16), frozen
Adapters 32 PEFT experts per routed layer (20 LoRA, 12 BOFT), top-12 active per token
Routing learned sparse top-k router over the expert pool, injected into the attention qkv projections
Input 3 x 256 x 256 RGB
Heads one linear classification head per dataset
Training data DermaMNIST, BloodMNIST, OCTMNIST, OrganSMNIST (MedMNIST+, CC BY 4.0)
Optimizer AdamW (decoupled weight decay), lr 1e-3, weight decay 0.0
Schedule 75 epochs, global batch 128, linear warm-up + cosine annealing, gradient clip 1.0, early stopping patience 10
MoE load balancing DeepSeekMoE-style auxiliary loss, lambda_load=0.05
Initialization DINOv3 backbone from timm, frozen; only experts, routers and heads are trained
Trainable parameters ~7.4M (experts, routers, per-dataset heads; the frozen backbone is reconstructed from timm at load time)
  • Head order (dataset id -> head): 0=DermaMNIST (7 classes), 1=BloodMNIST (8 classes), 2=OCTMNIST (4 classes), 3=OrganSMNIST (11 classes).

These are the lab's shared training-recipe values (see experiments/utils/training.py). The full multi-task loop is in the repo; a runnable demo is examples/training.ipynb.

Uses

Direct Use

The target of this configuration is DermaMNIST; it is co-trained with the three auxiliary datasets to raise target accuracy. A single forward pass routes the input through the shared expert pool and emits the per-dataset head logits.

Downstream Use

  • Feature extraction / probing: the frozen backbone plus routed experts can serve as a strong medical-image encoder for lightweight downstream heads.
  • Extending the pool: the mopet package supports adding a new dataset head and co-training it against the existing expert pool (see the repo's experiments/).

Out-of-Scope Use

  • Not a diagnostic device. These weights are a research artifact; the outputs must not be used for clinical diagnosis without expert validation and regulatory approval.
  • Non-medical or off-distribution images. The model is trained only on the datasets above at MedMNIST+ resolution; behavior on other modalities or natural images is undefined.

Bias, Risks, and Limitations

  • MedMNIST+ images are downsampled from their clinical sources, so fine-grained detail is lost relative to full-resolution acquisition.
  • Several source datasets are class-imbalanced; per-class performance varies and the headline accuracy can mask minority-class errors.
  • Reported numbers are in-distribution; robustness under acquisition/domain shift is not characterized by this checkpoint.
  • Top-k routing uses scatter/gather ops whose CUDA kernels are not fully deterministic; the package seeds best-effort (warn-only) determinism (see the repo's reproducibility.py).

How to Get Started with the Model

Installation

pip install mopet-moe

Input Requirements

  • Resolution: 3×256×256 RGB (MedMNIST+ images are loaded at 224 and upsampled to 256 for the DINOv3 backbone).
  • Format: PyTorch tensor (B, 3, 256, 256).
  • Normalization: applied by the package's preprocessing to match the DINOv3 backbone's expected statistics; see examples/inference.ipynb.

Inference

from mopet import create_model

model = create_model(weights="booster-derma").eval()
# ... run inference; see the repo's examples/ notebooks.

The mopet package resolves this repo automatically via its PUBLISHED_MODELS map, downloading model.safetensors through huggingface_hub.

Evaluation

Metrics

Accuracy (ACC) and area under the ROC curve (AUC), per the paper.

Results

From the paper: co-training a data-constrained target dataset with a hand-picked pool of auxiliary datasets raises target accuracy (81.58% -> 83.58% on the data-constrained target, averaged across the paper's booster configurations). This is one of the two booster configurations reported in the paper (Table 3); see the paper for the exact per-dataset numbers for this pool.

Citation

@article{doerrich2026mopet,
  title={MoPET: Parameter-Efficient Mixture-of-Experts for Unified Medical Image Classification},
  author={Sebastian Doerrich and Daniel W{\"u}rtinger and Francesco {Di Salvo} and Shyam Nandan Rai and Christian Ledig},
  year={2026},
  eprint={2607.29462},
  archivePrefix={arXiv},
  primaryClass={eess.IV},
  url={https://arxiv.org/abs/2607.29462},
}

Model Card Contact

For questions or issues, please open an issue in the GitHub repository.

Downloads last month
35
Safetensors
Model size
7.43M params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Space using sdoerrich97/mopet_dinov3_booster_derma_derma_blood_oct_organs 1

Collection including sdoerrich97/mopet_dinov3_booster_derma_derma_blood_oct_organs

Paper for sdoerrich97/mopet_dinov3_booster_derma_derma_blood_oct_organs