Home

Awesome

pGAN and cGAN

These techniques (pGAN and cGAN) are described in the following paper:

Dar SUH, Yurt M, Karacan L, Erdem A, Erdem E, Çukur T. Image Synthesis in Multi-Contrast MRI with Conditional Generative Adversarial Networks. IEEE Transaction on Medical Imaging. 2019.

Demo

The following commands train and test pGAN and cGAN models for T1 to T2 synthesis on images from the IXI dataset. Registered dataset of training and testing subjects can be downloaded from here. Copy the "datasets" folder in your current directory. <br /> Pre-trained pGAN and cGAN models are also present in the checkpoints directory. <br /> To run the code on other datasets, create a file named 'data.mat' for training, testing and validation samples and place them in their corresponding directories (datasets/yourdata/train, test, val). 'data.mat' should contain a variable named data_x for the source contrast and data_y for the target contrast. If you are creating the 'data.mat' file via Matlab please make sure that dimensions (1, 2, 3, 4) correspond to (neighbouring slices, number of samples, x-size, y-size). If you are saving the file via python then transpose the dimensions. Also, make sure that voxel intensity of each subject is normalized between 0-1.

pGAN

Training

python pGAN.py --dataroot datasets/IXI --name pGAN_run --which_direction BtoA --lambda_A 100 --batchSize 1 --output_nc 1 --input_nc 3 --gpu_ids 0 --niter 50 --niter_decay 50 --save_epoch_freq 25 --lambda_vgg 100 --checkpoints_dir checkpoints/ --training <br /> <br /> name - name of the experiment <br /> which_direction - direction of synthesis. If it is set to 'AtoB' synthesis would be from data_x to data_y, and vice versa <br /> lambda_A - weighting of the pixel-wise loss function <br /> input_nc, output_nc - number of neighbouring slices used. If you do not want to use the neighboring slices just set them to 1, the central slices would be selected. <br /> niter, n_iter_decay - number of epochs with normal learning rate and number of epochs for which the learning leate is decayed to 0. Total number of epochs is equal to sum of them <br /> save_epoch_freq -frequency of saving models <br /> lambda_vgg - weighting of the pixel-wise loss function

Testing

python pGAN.py --dataroot datasets/IXI --name pGAN_run --which_direction BtoA --phase test --output_nc 1 --input_nc 3 --how_many 1200 --results_dir results/ --checkpoints_dir checkpoints/

cGAN

Training

python cGAN.py --dataroot datasets/IXI --name cGAN_run --model cGAN --output_nc 1 --input_nc 1 --gpu_ids 0 --niter 50 --niter_decay 50 --save_epoch_freq 25 --lambda_A 100 --lambda_B 100 --checkpoints_dir checkpoints --dataset_mode unaligned_mat --training <br /> <br /> lambda_A, lambda_B - weightings of the cycle loss functions for both directions dataset_mode - if set to unaligned the indices of the source and target contrasts are shuffled (for unpaired training)

Testing

python cGAN.py --dataroot datasets/IXI --name cGAN_run --phase test --output_nc 1 --input_nc 1 --how_many 1200 --results_dir results/ --checkpoints_dir checkpoints

Prerequisites

Linux <br /> Python 2.7 <br /> CPU or NVIDIA GPU + CUDA CuDNN <br /> Pytorch 0.2.0 <br /> Other dependencies - visdom, dominate

Citation

You are encouraged to modify/distribute this code. However, please acknowledge this code and cite the paper appropriately.

@article{dar2019image,
  title={Image Synthesis in Multi-Contrast MRI with Conditional Generative Adversarial Networks},
  author={Dar, Salman UH and Yurt, Mahmut and Karacan, Levent and Erdem, Aykut and Erdem, Erkut and {\c{C}}ukur, Tolga},
  journal={IEEE Transaction on Medical Imaging},
  year={2019},
  publisher={IEEE}
}

For any questions, comments and contributions, please contact Salman Dar (salman[at]ee.bilkent.edu.tr) <br />

(c) ICON Lab 2019

Acknowledgments

This code is based on implementations by pytorch-DCGAN and CycleGAN and pix2pix in PyTorch.