MoPET: Parameter-Efficient Mixture-of-Experts for Unified Medical Image Classification @ EMA4MICCAI 2026 Workshop
[Preprint] [PyPI] [Pretrained Weights (HF)] [Citation]
Overview
MoPET is a mixture-of-experts method for parameter-efficient fine-tuning (PEFT) of foundation models on 2D medical images. A learned sparse router directs each input through a small, top-k subset of low-rank PEFT experts (LoRA and BOFT) injected into a frozen DINOv3 backbone, sharing adapter capacity across datasets while limiting the gradient conflict that arises when heterogeneous domains are trained jointly. On MedMNIST+, this design lets a single model consolidate multiple classification tasks that would otherwise each need their own fine-tuned network.
Standard PEFT trains one adapted model per dataset (left). MoPET routes each input through a shared feature router to a frozen pretrained backbone plus a pool of specialized PEFT experts, consolidating all datasets into a single multi-domain model (right).
(A) Interleaved batch sampling keeps every training batch diverse across the pooled datasets. (B) Inside a MoPET layer, a router selects the top-k PEFT experts per token; their outputs are combined with the frozen pretrained projection. (C) A dataset router uses the pooled feature and the sample's dataset id to dispatch it to the matching classification head.
Key Contributions
- Across 12 MedMNIST+ datasets, parameter-efficient fine-tuning of a frozen foundation backbone outperforms full end-to-end fine-tuning.
- MoPET, a mixture-of-experts built entirely from PEFT modules, unifies distinct classification tasks in a single model and beats isolated per-domain adapters on a four-dataset pool.
- A cross-domain "booster" dynamic where co-training with auxiliary datasets improves accuracy on data-constrained target datasets.
Installation
From PyPI (the distribution is mopet-moe; it still imports as mopet):
pip install mopet-moe
From source (adds the reproduction/training stack):
git clone https://github.com/sdoerrich97/mopet.git && cd mopet
pip install -e ".[experiments]"
Requirements & reproducibility
pip install uses permissive version ranges (Python >= 3.12, torch>=2.9,<3,
timm>=1.0.22,<2, ...) so MoPET installs cleanly next to other packages and with newer releases.
The one version-sensitive dependency is peft (bounded to 0.18.x): MoPET calls peft internal
layer classes, so a wider range is not guaranteed to work. For bit-for-bit reproduction of the
paper's environment, use the hash-pinned requirements.txt / uv.lock (what the Dockerfile
installs) rather than the ranges above.
Quick Start
from mopet import create_model
model = create_model(weights="unified").eval() # downloads the adapter weights from HF; frozen DINOv3 from timm
See examples/ for runnable inference, minimal-API, and training-CLI notebooks.
Model Zoo
Weights live in the MoPET HuggingFace Collection.
The Identifier column is exactly the string to pass as create_model(weights=...); list the
available checkpoints and their head layout programmatically with mopet.list_pretrained().
| Identifier | Datasets (head order) | Backbone | HF Repo |
|---|---|---|---|
unified |
Blood, Breast, Derma, Path | DINOv3 ViT-B/16 | mopet_dinov3_unified_blood_breast_derma_path |
booster-retina |
Breast, Blood, Retina, Path, OrganA | DINOv3 ViT-B/16 | mopet_dinov3_booster_retina_breast_blood_retina_path_organa |
booster-derma |
Derma, Blood, OCT, OrganS | DINOv3 ViT-B/16 | mopet_dinov3_booster_derma_derma_blood_oct_organs |
Each release carries only the ~7M trainable parameters (PEFT experts, routers, and
per-dataset heads); the frozen DINOv3 backbone is reconstructed from timm at load
time.
Project Structure
mopet/ # the installable package: MoPET model, MoE/PEFT experts, create_model factory
experiments/ # reproduction code: configs, data, metrics, reference baselines, entry scripts — not on PyPI
examples/ # runnable inference / usage / training notebooks
assets/ # figures used by the README and paper
Dockerfile # reproducible environment (multi-stage; the canonical way to reproduce results)
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},
}
License
The mopet code is released under the MIT License. The frozen DINOv3
backbone weights are downloaded separately via timm/HuggingFace under their own
upstream license; only the code in this repository and the trainable-parameter
checkpoints in the HuggingFace collection above are covered by the MIT license.
Changelog
v0.1.1
- Relaxed dependency ranges for easier installation (
torch<3,timm<2,peftbounded to 0.18.x); exact reproducible versions remain inrequirements.txt/uv.lock. - Added
mopet.list_pretrained()to discover the released checkpoints. - Expanded and executed the example notebooks (inference, API usage, training) with embedded outputs.
- Added
CITATION.cff; slimmed the public repository to the code and Docker reproduction path.
v0.1.0
- Initial public release accompanying the MICCAI 2026 EMA Workshop paper.
Metadata
Release files for mopet-moe 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| mopet_moe-0.1.2.tar.gz | 23.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mopet_moe-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 37.8 kB
Release files / mopet_moe-0.1.2.tar.gz
| Download URL | mopet_moe-0.1.2.tar.gz |
|---|---|
| Size | 23.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6551862656d58baf46a9abb6a23b6d7876a01b1aa42fb62a136dd3bc73b45ea1
|
|
BLAKE2b-256 checksum How to use checksums |
8fdac1ea78b6d8ce4fd944db829df6450e9a1149f0440b7d18564c522906fedb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.4
|
Release files / mopet_moe-0.1.2-py3-none-any.whl
| Download URL | mopet_moe-0.1.2-py3-none-any.whl |
|---|---|
| Size | 13.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e2bc2c2a0b66f8e52bbce754117ea33fec97d15c3f2f94fad1a831aeafd1d760
|
|
BLAKE2b-256 checksum How to use checksums |
ba29e8c805b329be2ab23f9135b0c25c11f5c96e8bd03f2cd5edd8a122f50f7a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.4
|