- 🔥🔥🔥 We collect recent medical universal models in AWESOME MEDICAL UNIVERSAL MODEL
.
- We have document for common questions for code and common questions for paper.
This repository provides the official implementation of Universal Model.
CLIP-Driven Universal Model for Organ Segmentation and Tumor Detection
Rank First in Medical Segmentation Decathlon (MSD) Competition
Jie Liu1, Yixiao Zhang2, Jie-Neng Chen2, Junfei Xiao2, Yongyi Lu2,
Yixuan Yuan1, Alan Yuille2, Yucheng Tang3, Zongwei Zhou2
1 City University of Hong Kong, 2 Johns Hopkins University, 3 NVIDIA
paper | code | slides | poster | talk | blog
- 01 Multi-Atlas Labeling Beyond the Cranial Vault - Workshop and Challenge (BTCV)
- 02 Pancreas-CT TCIA
- 03 Combined Healthy Abdominal Organ Segmentation (CHAOS)
- 04 Liver Tumor Segmentation Challenge (LiTS)
- 05 Kidney and Kidney Tumor Segmentation (KiTS)
- 06 Liver segmentation (3D-IRCADb)
- 07 WORD: A large scale dataset, benchmark and clinical applicable study for abdominal organ segmentation from CT image
- 08 AbdomenCT-1K
- 09 Multi-Modality Abdominal Multi-Organ Segmentation Challenge (AMOS)
- 10 Decathlon (Liver, Lung, Pancreas, HepaticVessel, Spleen, Colon
- 11 CT volumes with multiple organ segmentations (CT-ORG)
- 12 AbdomenCT 12organ
Main Requirements
connected-components-3d
h5py==3.6.0
monai==0.9.0
torch==1.11.0
tqdm
fastremap
python3 -m venv universal
source /data/zzhou82/environments/universal/bin/activate
git clone https://github.com/ljwztc/CLIP-Driven-Universal-Model.git
pip install torch==1.11.0+cu113 torchvision==0.12.0+cu113 torchaudio==0.11.0 --extra-index-url https://download.pytorch.org/whl/cu113
pip install 'monai[all]'
pip install -r requirements.txt
cd pretrained_weights/
wget https://github.com/Project-MONAI/MONAI-extra-test-data/releases/download/0.8.1/swin_unetr.base_5000ep_f48_lr2e-4_pretrained.pt
cd ../
Dataset Pre-Process
- Download the dataset according to the dataset link and arrange the dataset according to the
dataset/dataset_list/PAOT.txt. - Modify the ORGAN_DATASET_DIR value in label_transfer.py (line 51) and NUM_WORKER (line 53)
python -W ignore label_transfer.py
Current Template
| Index | Organ |
|---|---|
| 1 | Spleen |
| 2 | Right Kidney |
| 3 | Left Kidney |
| 4 | Gall Bladder |
| 5 | Esophagus |
| 6 | Liver |
| 7 | Stomach |
| 8 | Aorta |
| 9 | Postcava |
| 10 | Portal Vein and Splenic Vein |
| 11 | Pancreas |
| 12 | Right Adrenal Gland |
| 13 | Left Adrenal Gland |
| 14 | Duodenum |
| 15 | Hepatic Vessel |
| 16 | Right Lung |
| 17 | Left Lung |
| 18 | Colon |
| 19 | Intestine |
| 20 | Rectum |
| 21 | Bladder |
| 22 | Prostate |
| 23 | Left Head of Femur |
| 24 | Right Head of Femur |
| 25 | Celiac Truck |
| 26 | Kidney Tumor |
| 27 | Liver Tumor |
| 28 | Pancreas Tumor |
| 29 | Hepatic Vessel Tumor |
| 30 | Lung Tumor |
| 31 | Colon Tumor |
| 32 | Kidney Cyst |
How expand to new dataset with new organ?
- Set the following index for new organ. (e.g. 33 for vermiform appendix)
- Check if there are any organs that are not divided into left and right in the dataset. (e.g. kidney, lung, etc.) The
RL_Splitdinlabel_transfer.pyis used to processed this case. - Set up a new transfer list for new dataset in TEMPLATE (line 58 in label_transfer.py). (If a new dataset with Intestine labeled as 1 and vermiform appendix labeled as 2, we set the transfer list as [19, 33])
- Run the program
label_transfer.pyto get new post-processing labels.
More details please take a look at common questions
CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 python -W ignore -m torch.distributed.launch --nproc_per_node=8 --master_port=1234 train.py --dist True --data_root_path /mnt/zzhou82/PublicAbdominalData/ --num_workers 12 --num_samples 4 --cache_dataset --cache_rate 0.6 --uniform_sample
CUDA_VISIBLE_DEVICES=0 python -W ignore validation.py --data_root_path /mnt/zzhou82/PublicAbdominalData/ --start_epoch 10 --end_epoch 40 --epoch_interval 10 --cache_dataset --cache_rate 0.6
CUDA_VISIBLE_DEVICES=0 python -W ignore test.py --resume ./out/epoch_61.pth --data_root_path /mnt/zzhou82/PublicAbdominalData/ --store_result --cache_dataset --cache_rate 0.6
- Code release
- Dataset link
- Support different backbones (SwinUNETR, Unet, DiNTS, Unet++)
- Model release
- Pesudo label release
- Tutorials for generalizability, transferability, and extensibility
This project is under the CC-BY-NC 4.0 license. See LICENSE for details.
A lot of code is modified from monai.
If you find this repository useful, please consider citing this paper:
@article{liu2023clip,
title={CLIP-Driven Universal Model for Organ Segmentation and Tumor Detection},
author={Liu, Jie and Zhang, Yixiao and Chen, Jie-Neng and Xiao, Junfei and Lu, Yongyi and Landman, Bennett A and Yuan, Yixuan and Yuille, Alan and Tang, Yucheng and Zhou, Zongwei},
journal={arXiv preprint arXiv:2301.00785},
year={2023}
}
