Skip to main content

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.

MoPET method overview

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).

MoPET architecture detail

(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, peft bounded to 0.18.x); exact reproducible versions remain in requirements.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.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mopet_moe-0.1.2.tar.gz (23.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mopet_moe-0.1.2-py3-none-any.whl (13.8 kB view details)

Uploaded Python 3

File details

Details for the file mopet_moe-0.1.2.tar.gz.

File metadata

  • Download URL: mopet_moe-0.1.2.tar.gz
  • Upload date:
  • Size: 23.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.11.4

File hashes

Hashes for mopet_moe-0.1.2.tar.gz
Algorithm Hash digest
SHA256 6551862656d58baf46a9abb6a23b6d7876a01b1aa42fb62a136dd3bc73b45ea1
MD5 db25bf47aedd1cc2ed9b1ee08a7b0cf7
BLAKE2b-256 8fdac1ea78b6d8ce4fd944db829df6450e9a1149f0440b7d18564c522906fedb

See more details on using hashes here.

File details

Details for the file mopet_moe-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: mopet_moe-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 13.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.11.4

File hashes

Hashes for mopet_moe-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 e2bc2c2a0b66f8e52bbce754117ea33fec97d15c3f2f94fad1a831aeafd1d760
MD5 0d9de680cfef76ed7e52215c52169cb7
BLAKE2b-256 ba29e8c805b329be2ab23f9135b0c25c11f5c96e8bd03f2cd5edd8a122f50f7a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page