This is the official Pytorch implementation of "Conditional Deformable Image Registration with Convolutional Neural Network" (MICCAI 2021), written by Tony C. W. Mok and Albert C. S. Chung.
Python 3.5.2+
Pytorch 1.3.0 - 1.7.1
NumPy
NiBabel
This code has been tested with Pytorch 1.7.1
and NVIDIA TITAN RTX GPU.
python Test_cLapIRN.py
The regularization weight can be changed by appending --reg_input {{normalized weight within [0,1]}}
argument to the inference script. For example,
python Test_cLapIRN.py --reg_input 0.4
is equivalent to output the solution with regularization weight set to 4.
Step 1: Replace /PATH/TO/YOUR/DATA
with the path of your training data. You may also need to implement your own data generator (Dataset_epoch
in Functions.py
).
Step 2: Change the imgshape
variable in Train_cLapIRN.py
to match the resolution of your data.
Step 3: python Train_cLapIRN.py
to train the model. Remember the data should be normalized within [0,1]. Otherwise, set norm=True
in the provided data loader.
(Optional): Implement the custom validation code in line 368 at Train_cLapIRN.py
.
You may adjust the size of the model by manipulating the argument --start_channel
in Train_cLapIRN.py
and Test_cLapIRN.py
You may modify the number of conditional image registration module in resblock_seq
function (at Functions.py
).
If you want to train on the preprocessed OASIS dataset in https://github.com/adalca/medical-datasets/blob/master/neurite-oasis.md. We have an example showing how to train on this dataset.
python Train_cLapIRN_lite.py
will create a conditional LapIRN model trained on all cases in the dataset.python Test_cLapIRN_lite.py --modelpath {{pretrained_model_path}} --fixed ../Data/image_A_fullsize.nii.gz --moving ../Data/image_B_fullsize.nii.gz
will load the assigned model and register the image "image_A_fullsize.nii.gz" and "image_B_fullsize.nii.gz".Note that the conditional LapIRN model in Train_cLapIRN_lite.py
is a lightweight version, which reduced the number of feature maps in the original model. A pretrained model and its log file are available in "Model/LDR_OASIS_NCC_unit_disp_add_fea4_reg01_10_lite_stagelvl3_54000.pth" and "Log/LDR_OASIS_NCC_unit_disp_add_fea4_reg01_10lite.txt", respectively.
We demonstrate the 2D deformable image registration with 2D coronal slices extracted from the preprocessed OASIS dataset (available in https://github.com/adalca/medical-datasets/blob/master/neurite-oasis.md) as follows:
python Train_cLapIRN_2D.py
will create a conditional LapIRN model trained on all cases in the dataset.python Test_cLapIRN_2D.py --modelpath {{pretrained_model_path}} --fixed ../Data/image_A_2D.nii.gz --moving ../Data/image_B_2D.nii.gz
will load the assigned model and register the image "image_A_fullsize.nii.gz" and "image_B_fullsize.nii.gz".Note that the 2D images in the dataset are in resolution (160, 192, 1)
. During training and testing, we drop the last dimension using .squeeze(-1)
. The pretrained model for 2D conditional LapIRN can be downloaded here.
If you find this repository useful, please cite:
Conditional Deformable Image Registration with Convolutional Neural Network
Tony C. W. Mok, Albert C. S. Chung
MICCAI 2021. eprint arXiv:2106.12673
Large Deformation Diffeomorphic Image Registration with Laplacian Pyramid Networks
Tony C. W. Mok, Albert C. S. Chung
MICCAI 2020. eprint arXiv:2006.16148
Some codes in this repository are modified from IC-Net and VoxelMorph.
Keywords: Conditional Image registration, Controllable Regularization, Deformable Image Registration