Comprehensive and open-source repository of deep learning methods for medical data segmentation. Collaboration between MILA and NeuroPoly for the IVADO project on medical imaging.
We adapted the Feature-wise Linear Modulation (FiLM) approach to the segmentation task. FiLM enabled us to modulate CNNs features based on non-image metadata.
We implemented a class sampling scheme, coupled with a transfer learning strategy, in order to mitigate the issue of class imbalance, while adressing the limitations of classical under-sampling (risk of loss of information) or over-sampling (risk of overfitting) approaches. During a first training step, the CNN is trained on an equivalent proportion of positive and negative samples, negative samples being under-weighted dynamically at each epoch. During the second step, the CNN is fine-tuned on the realistic (i.e. class-imbalanced) dataset.
Mixup is a data augmentation technique which trains on virtual samples, generated by linear interpolation of two random samples from the training set and the associated labels. The idea is to regularize the network by linearly interpolating between training samples while extending the training distribution.
This data augmentation is motivated by the large inter-rater variability that we measured on our MS dataset. The raters indeed mainly disagreed on the boundaries of the lesions, which suggests that the lesion surrounding voxels may also include some lesion level information. A soft mask is constructed by morphological dilation of the binary segmentation (i.e. mask provided by expert), where expert-labeled voxels have one as value while the augmented voxels are assigned a soft value which depends on the distance to the core of the lesion. Thus, the prior knowledge about the subjective lesion borders is then leveraged to the network.
This project requires Python 3.6 and PyTorch >= 1.2.0. We recommend you work under a virtual environment:
virtualenv venv-ivadomed --python=python3.6
source venv-ivadomed/bin/activate
Then, install all requirements using pip
:
git clone https://github.com/neuropoly/ivado-medical-imaging.git
cd ivado-medical-imaging
pip install -e .
To train the network, use the ivadomed
command-line tool that will be available on your path after installation, example below:
ivadomed config/config.json
where config.json
is a configuration file. A description of each parameter is available in the wiki.
The working dataset are:
- derived from the Spinal Cord MRI Public Database.
- the spinal cord grey matter segmentation challenge dataset.
- private multi-center dataset (
duke/sct_testing/large
) for spinal cord and MS lesion segmentation task.
The data structure is compatible with BIDS and is exemplified below:
bids_folder/
└── dataset_description.json
└── participants.tsv
└── sub-amu01
└── anat
└── sub-amu01_T1w_reg.nii.gz --> Processed (i.e. different than in the original SpineGeneric database)
└── sub-amu01_T1w_reg.json
└── sub-amu01_T2w_reg.nii.gz --> Processed
└── sub-amu01_T2w_reg.json
└── sub-amu01_acq-MTon_MTS_reg.nii.gz --> Processed
└── sub-amu01_acq-MTon_MTS_reg.json
└── sub-amu01_acq-MToff_MTS_reg.nii.gz --> Processed
└── sub-amu01_acq-MToff_MTS_reg.json
└── sub-amu01_acq-T1w_MTS.nii.gz --> Unprocessed (i.e. same as in the original SpineGeneric database)
└── sub-amu01_acq-T1w_MTS.json
└── sub-amu01_T2star_reg.nii.gz --> Processed
└── sub-amu01_T2star_reg.json
└── derivatives
└── labels
└── sub-amu01
└── anat
└── sub-amu01_T1w_seg.nii.gz --> Spinal cord segmentation