Home

Awesome

Top 10 BraTS 2020 open sourced solution

This is the repository of our solution to the 2020 edition of the BraTS challenge. Our paper is available at arXiv.

This repository implements Pipeline A training and inference only. Feel free to use it as a starter for following challenge editions!

Demo results

<div align="center"> <img alt="Patient42+51" src="images/resized_combined.gif"/> </div> <p align="center"> <b>Example of brain tumor segmentations generated by our solution</b> </p>

Installation

in your favorite virtual environment:

pip install -r requirements.txt

Training

First change your data source folder by modifying values in src/config.py

BRATS_TRAIN_FOLDERS = "your-Path_to/brats2020/MICCAI_BraTS_2020_Data_Training"
BRATS_VAL_FOLDER = "your-Path_to/brats2020/MICCAI_BraTS_2020_Data_Valdation"
BRATS_TEST_FOLDER = "your-Path_to/brats2020/MICCAI_BraTS_2020_Data_Testing"

If you prefer not to hardcode this value, you can set them as variable environments.

Then, start training:

python -m src.train --devices 0 --width 48 --arch EquiUnet

For more details on the available option:

python -m src.train -h

Note that this code use an nn.Module to do data augmentation: any batch size above 1 could lead to errors.

After training, you will have a runs folder created containing a directory for each run you have done.

For each run, a yaml file with the option used for the runs, and a segs folder containing the generated .nii.gz segmentations for the validation fold used.

- src
    - runs
        - 20201127_34335135__fold_etc
            202020201127_34335135__fold_etc.ymal
            - segs
            model.txt # the printed model
            model_best.pth.tar # model weights
            patients_indiv_perf.csv # a log of training patient segmentation performance
            events.out.. # Tensorboard log

The yaml file is required to perform inference on the validation and train set

Inference

The script to perform inference is... inference.py !!

python -m src.inference -h 
usage: inference.py [-h] [--config PATH [PATH ...]] --devices DEVICES
                    [--on {val,train,test}] [--tta] [--seed SEED]

Brats validation and testing dataset inference

optional arguments:
  -h, --help            show this help message and exit
  --config PATH [PATH ...]
                        path(s) to the trained models config yaml you want to
                        use
  --devices DEVICES     Set the CUDA_VISIBLE_DEVICES env var from this string
  --on {val,train,test}
  --tta
  --seed SEED

This script can take multiple models (specify multiple yaml config files), even when trained with different image normalization techniques (minmax or zscore); and will automatically merge their prediction (by averaging).