ivadomed / ivadomed/model-spinal-rootlets

Lumbar rootlets - model training on `Draw Tube` labels

Open
#67 12 comments 0 reactions 0 assignees View on GitHub
lumbar rootlets
Dominant language
Python
Stars
8
Forks
2
PR merge metrics
No merged PRs in 30d

Description

This issue summarizes model training on T2w lumbar data with relabeled rootlets using the 3D Slicer `Draw Tube` module.

This is a follow up of https://github.com/ivadomed/model-spinal-rootlets/issues/48.

## 0. Data overview

We have 6 subjects with the following labels:

```bash
sub_labels = {"sub-CTS04": { "start": "T11","end": "S1"},
"sub-CTS05": {"start": "T11","end": "S1"},
"sub-CTS09": {"start": "T10","end": "S2"},
"sub-CTS10": {"start": "T11","end": "S1"},
"sub-CTS14": {"start": "T11","end": "S1"},
"sub-CTS15": {"start": "T10","end": "S2"}}
```

## 1. Preparing nnUNet folders
details

```bash
# imagesTr
cp sub-CTS04_ses-SPpre_acq-zoomit_T2w.nii.gz Dataset301_LumbarRootlets/imagesTr/sub-CTS04_ses-SPpre_T2w_001_0000.nii.gz
cp sub-CTS05_ses-SPpre_acq-zoomit_T2w.nii.gz Dataset301_LumbarRootlets/imagesTr/sub-CTS05_ses-SPpre_T2w_001_0000.nii.gz
cp sub-CTS09_ses-SPpre_acq-zoomit_T2w.nii.gz Dataset301_LumbarRootlets/imagesTr/sub-CTS09_ses-SPpre_T2w_001_0000.nii.gz
cp sub-CTS10_ses-SPanat_acq-zoomit_T2w.nii.gz Dataset301_LumbarRootlets/imagesTr/sub-CTS10_ses-SPanat_T2w_001_0000.nii.gz
cp sub-CTS14_ses-SPpre_acq-zoomit_T2w.nii.gz Dataset301_LumbarRootlets/imagesTr/sub-CTS14_ses-SPpre_T2w_001_0000.nii.gz
cp sub-CTS15_ses-SPpre_acq-zoomit_T2w.nii.gz Dataset301_LumbarRootlets/imagesTr/sub-CTS15_ses-SPpre_T2w_001_0000.nii.gz

# labelsTr
cp T11-S1_RD_LD_sub-CTS04_relabeled.nii.gz Dataset301_LumbarRootlets/labelsTr/sub-CTS04_ses-SPpre_T2w_001.nii.gz
cp T11-S1_RD_LD_sub-CTS05_relabeled.nii.gz Dataset301_LumbarRootlets/labelsTr/sub-CTS05_ses-SPpre_T2w_001.nii.gz
cp T10-S2_RD_LD_sub-CTS09_relabeled.nii.gz Dataset301_LumbarRootlets/labelsTr/sub-CTS09_ses-SPpre_T2w_001.nii.gz
cp T11-S1_RD_LD_sub-CTS10_relabeled.nii.gz Dataset301_LumbarRootlets/labelsTr/sub-CTS10_ses-SPanat_T2w_001.nii.gz
cp T11-S1_RD_LD_sub-CTS14_relabeled.nii.gz Dataset301_LumbarRootlets/labelsTr/sub-CTS14_ses-SPpre_T2w_001.nii.gz
cp T10-S2_RD_LD_sub-CTS15_relabeled.nii.gz Dataset301_LumbarRootlets/labelsTr/sub-CTS15_ses-SPpre_T2w_001.nii.gz
```

## 2. Changing label values to be consecutive (this is required by nnUNet)

details

Original values

```bash
cd labelsTr
for file in *nii.gz;do get_unique_values $file;done
[ 0. 19. 20. 21. 22. 23. 24. 25. 26.]
[ 0. 19. 20. 21. 22. 23. 24. 25. 26.]
[ 0. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.]
[ 0. 19. 20. 21. 22. 23. 24. 25. 26.]
[ 0. 19. 20. 21. 22. 23. 24. 25. 26.]
[ 0. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.]
```

Removing label 18 (presented only for two subjects) for now:

```bash
sct_maths -i sub-CTS09_ses-SPpre_T2w_001.nii.gz -thr 19 -o sub-CTS09_ses-SPpre_T2w_001.nii.gz
sct_maths -i sub-CTS15_ses-SPpre_T2w_001.nii.gz -thr 19 -o sub-CTS15_ses-SPpre_T2w_001.nii.gz
```

Recoding using [recode_nii.py](https://github.com/ivadomed/model-spinal-rootlets/blob/main/utilities/recode_nii.py):

```bash
for file in *nii.gz;do python ~/code/model-spinal-rootlets/utilities/recode_nii.py -i $file -o $file;done
Unique values in the data: [ 0. 19. 20. 21. 22. 23. 24. 25. 26.]
Unique values in the recoded data: [0 1 2 3 4 5 6 7 8]
Unique values in the data: [ 0. 19. 20. 21. 22. 23. 24. 25. 26.]
Unique values in the recoded data: [0 1 2 3 4 5 6 7 8]
Unique values in the data: [ 0. 19. 20. 21. 22. 23. 24. 25. 26. 27.]
Unique values in the recoded data: [0 1 2 3 4 5 6 7 8 9]
Unique values in the data: [ 0. 19. 20. 21. 22. 23. 24. 25. 26.]
Unique values in the recoded data: [0 1 2 3 4 5 6 7 8]
Unique values in the data: [ 0. 19. 20. 21. 22. 23. 24. 25. 26.]
Unique values in the recoded data: [0 1 2 3 4 5 6 7 8]
Unique values in the data: [ 0. 19. 20. 21. 22. 23. 24. 25. 26. 27.]
Unique values in the recoded data: [0 1 2 3 4 5 6 7 8 9]
```

## 3. Training

`fold1`, 4 training and 2 validation images.

### Semantic (level-specific) model: `Dataset301_LumbarRootlets`

```bash
cd ~/code/model-spinal-rootlets/training
bash run_training.sh 1 301 Dataset301_LumbarRootlets
```

### Binary model (all rootlets set to 1): `Dataset302_LumbarRootlets`

Binarize labels and modify `dataset.json`:

```bash
cd $nnUNet_raw
cp -r Dataset301_LumbarRootlets Dataset302_LumbarRootlets
cd Dataset302_LumbarRootlets/labelsTr
for file in *nii.gz;do sct_maths -i $file -bin 0.5 -o $file;done
cd ..
# modify dataset.json
```

```bash
cd ~/code/model-spinal-rootlets/training
bash run_training.sh 1 302 Dataset302_LumbarRootlets
```

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with the documented nnUNet training commands in training/run_training.sh and the dataset preparation steps for Dataset301_LumbarRootlets and Dataset302_LumbarRootlets. Review utilities/recode_nii.py and the label-processing commands first; the issue does not define a concrete requested change or completion criterion beyond recording the semantic and binary training runs.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
computer-vision, machine-learning
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.