ivadomed / ivadomed/model-spinal-rootlets
Lumbar rootlets - model training on `Draw Tube` labels
- 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