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
- Paper: https://arxiv.org/abs/2607.29462
- Repository: https://github.com/sdoerrich97/mopet
- Package: https://pypi.org/project/mopet-moe/
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
mopetpackage supports adding a new dataset head and co-training it against the existing expert pool (see the repo'sexperiments/).
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