hwonheo's picture
Bake model_version tag (YYYYMMDD-TASK-SEQ-VARIANT) + fix LICENSE link
8310e31 verified
|
Raw
History Blame Contribute Delete
2.8 kB
metadata
license: other
license_name: research-only
license_link: LICENSE
tags:
  - medical-imaging
  - mri
  - segmentation
  - canine
  - veterinary
  - lora
  - pytorch
  - monai
library_name: pytorch
pipeline_tag: image-segmentation

DeepCAN-SEG-PosEnc-T1

Canine Brain MRI 9-Class Segmentation — T1 sequence adapted

A T1-weighted axial domain adaptation of hwonheo/DeepCAN-SEG-PosEnc. The shared base (T2-trained) was adapted to T1 with LoRA (rank 16, α 32) on Conv3d layers; the adapters are merged into the base weights, so this checkpoint is a standard LRSegmentationMultiClassUNet — a drop-in replacement loaded exactly like the base model.

Classes (9, L/R separated)

0 Background · 1/5 Lateral Ventricle L/R · 2/6 Gray Matter L/R · 3/7 White Matter L/R · 4/8 Cerebellum L/R

Input is 4-channel: image intensity + normalized x/y/z position encoding (for L/R hemisphere discrimination). Models expect the RPS orientation / 0.5 mm grid layout.

Performance (held-out T1 subjects, Dice, mean of classes 1–8)

split base (T2 model on T1) T1-adapted Δ
val 0.322 0.649 +0.327
test 0.298 0.626 +0.328

Per-class val Dice: BG 0.96 · Cereb 0.79/0.81 · GM 0.69/0.69 · WM 0.58/0.61 · Vent 0.52/0.52. The base T2 model nearly collapses on T1 (WM/Ventricle ~0.1–0.2); T1 adaptation roughly doubles Dice with symmetric L/R recovery.

Training

Base DeepCAN-SEG-PosEnc (T2)
Method LoRA (r=16, α=32) on all Conv3d, base frozen, adapters merged at export
Data 30 T1 HR subjects → 1510 balanced 64³ patches @ 0.5 mm
Optimizer AdamW, LR 2e-4, weight decay 1e-5
Schedule cosine, 200 epochs (early-stopped @ 40)
Loss MultiClass Dice + CE (dice_weight 0.7)
W&B https://wandb.ai/heohwon/DeepCAN-SegSR-public/runs/wrkvlfbo

Usage

from huggingface_hub import snapshot_download
snapshot_download(repo_id="hwonheo/DeepCAN-SEG-PosEnc-T1",
                  local_dir="src/checkpoint/DeepCAN-SEG-PosEnc-T1")

# Loads exactly like the T2 base (plain UNet, in_channels auto-detected = 4)
from src.inference.models.segmentation_inferencer import SegmentationInferencer
seg = SegmentationInferencer(
    checkpoint_path="src/checkpoint/DeepCAN-SEG-PosEnc-T1/DeepCAN-SEG-PosEnc-T1.pth",
    device="cuda")

In the clinical pipeline, T1 axial scans are auto-detected from DICOM metadata (EchoTime/RepetitionTime/SeriesDescription) and routed to this checkpoint.

License

Research use only — see LICENSE. Contact: Hwon Heo, PhD (heohwon@gmail.com), BMC lab, Asan Medical Center.