This repository contains the maintained training and ablation workflows for the 2026 Mitral Valve Anatomy Analysis
Challenge. Reusable implementation lives in src/mitralvalve/; scripts/ is limited to the three final training
workflows, their required support scripts, reproducible ablations, data preparation, and the retained distillation
trainer.
Run complete Task 1, Task 2, and Task 3 workflows from the repository root:
scripts/train_task1
scripts/train_task2
scripts/train_task3Task 1 trains five supervised CT folds for 30 epochs, creates one shared top-25% pseudo-label set with the submitted
composite reliability score, retrains each fold for five epochs, and packs the five retrained members into a uniform
logit ensemble. Its submitted model uses 12/6 fine/coarse base channels, a 160 160 128 ROI, mixed atan-linear and
wide-window training normalization, supervised learning rate 3.7e-3, and retraining learning rate 3.7e-4.
Task 2 trains five 100-epoch TEE folds and packs the original folds into a uniform-logit ensemble.
Task 3 trains six 50-epoch DINOv3-L UPerNet folds, selects the top 25% of unlabeled frames by epoch agreement, generates pseudo-labels with horizontal-flip averaging, retrains for 15 epochs, and performs held-out inference calibration.
Use --dry-run to inspect an entire workflow without training:
scripts/train_task1 --dry-run
scripts/train_task2 --dry-run
scripts/train_task3 --dry-runThe original joint Task 1/2 trainer remains as an implementation dependency and for legacy experiments:
uv run python scripts/train_task12_legacy.py --epochs 100 --device cudaReproducible pseudo-label and loss-term ablations live under scripts/ablations/. The retired
DINOv3-to-PVTv2 trainer is intentionally retained as
scripts/research/task3_distillation/train_task3_dinov3_distill.py. Self-supervised DINO/I-JEPA/LeJEPA training,
synthetic-data generation, and historical diagnostic, sweep, SwinV2-distillation, and PCA launchers have been removed.
configs/task3.yaml is the maintained submitted Task 3 configuration. configs/task3_pvtv2_upernet.yaml is retained
only for the PVTv2 segmentation follow-up to the preserved distillation trainer; obsolete sweep, SSL, and decoder-
variant configurations have been removed.
Set the local dataset root in mvaa_paths.yaml:
data_root: /path/to/MVAAMVAA_PATH_CONFIG may select another path file, and MVAA_DATA_ROOT may override the root for one run. Data download
and cache preparation commands live under scripts/data/. Top-level training run directories are named
taskN_YYYYMMDD_HHMMSS beneath outputs/. Ablations use the same simple basename beneath
outputs/ablations/loss_terms/ or outputs/ablations/pseudolabels/. Curated final checkpoints live beneath
checkpoints/.
Run static checks with:
uv run ruff check src scripts