Skip to content

SCSE-Biomedical-Computing-Group/LPAD

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LPAD: Latent Pathology–Age Decoupling for Multi-task Schizophrenia Assessment

Reference implementation for the MICCAI 2026 paper Latent Pathology–Age Decoupling in Functional Connectivity Graphs for Multi-task Schizophrenia Assessment.

LPAD is a dual-stream graph framework that

  1. decouples disease-specific from age-related variation in functional connectivity (FC) representations via a cosine-orthogonality loss and a continuous-anchor supervised contrastive loss, then
  2. selectively reintroduces age as a subordinate contextual signal through a lightweight gated modulation (CIGM) before the eight prediction heads.

Implemented components map to paper sections:

Section Component File
2.1 Dual-stream GPSConv-GINE → GATConv encoder lpad/model.py:DualStreamEncoder
2.1, Eq. 1 Latent orthogonality loss lpad/losses.py:orthogonality_loss
2.1, Eq. 2 VL-anchored supervised contrastive loss lpad/losses.py:supcon_loss_continuous
2.2, Eqs. 3–5 Clinically-Informed Gated Modulation lpad/model.py:CIGM
2.3, Eq. 6 Homoscedastic uncertainty weighting lpad/losses.py:UncertaintyWeightedRMSE
2.3 Manifold mixup (post-pooling) lpad/model.py:LPAD.forward

Repository layout

LPAD/
├── lpad/
│   ├── config.py        # Config dataclass, task list, indices
│   ├── data.py          # FC -> PyG graph + COBRE loader
│   ├── losses.py        # L_ortho, L_supcon, uncertainty weighting
│   ├── model.py         # DualStreamEncoder, CIGM, LPAD
│   └── trainer.py       # 5-fold CV trainer with JSONL logging
├── scripts/
│   └── train_cobre.py   # Command-line entry point
├── requirements.txt
└── README.md

Installation

conda create -n lpad python=3.10
conda activate lpad
pip install -r requirements.txt
# torch-geometric extras (sparse / scatter / cluster) per the official guide

Data layout

The COBRE arrays produced by the preprocessing pipeline are expected under a single directory, e.g. /data/.../COBRE:

COBRE/
├── X.npy             # (N, 264, 264)  Power-264 FC matrices
├── Y_age.npy         # auxiliary age regression target
├── Y_positive.npy    # PANSS POS
├── Y_negative.npy    # PANSS NEG
├── Y_total.npy       # PANSS TOT
├── Y_general.npy     # PANSS GEN
├── Y_PS.npy          # MCCB processing speed
├── Y_BACS.npy        # BACS Symbol Coding T-score, used as the paper's "ATT" task
├── Y_WM.npy          # MCCB working memory
└── Y_VL.npy          # MCCB verbal learning (used as supcon anchor)

Training

cd LPAD
python scripts/train_cobre.py \
    --data-root /path/to/COBRE \
    --output-dir runs/lpad_cobre_seed42 \
    --seed 42

Outputs written to --output-dir:

  • train.log – human-readable log
  • epochs.jsonl – per-epoch training loss and per-task metrics
  • summary.json – mean ± std Pearson, MAE, RMSE across folds
  • checkpoint_fold*.pt – best-epoch model state per fold

The default hyperparameters (Adam, lr 5e-4, batch size 20, 60 epochs, λ₁=0.05, λ₂=0.10, mixup α=1.0, TopK ratio 0.9) reproduce the COBRE numbers reported in Tables 1–3.

Citation

@inproceedings{lpad2026,
  title     = {Latent Pathology--Age Decoupling in Functional Connectivity Graphs
               for Multi-task Schizophrenia Assessment},
  booktitle = {MICCAI},
  year      = {2026},
}

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages