File size: 5,158 Bytes
29935ef
af7f0f4
 
29935ef
0db6a31
 
 
af7f0f4
 
0db6a31
 
686cf88
0db6a31
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
686cf88
0db6a31
 
 
 
 
686cf88
0db6a31
 
 
 
 
 
 
686cf88
0db6a31
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
af7f0f4
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
---
title: AscitesModel
license: cc-by-nc-sa-4.0
---

# Ascites Segmentation with nnUNet

This model was trained as part of the research 'Deep Learning Segmentation of Ascites on Abdominal CT Scans for Automatic Volume Quantification' ([Paper](https://doi.org/10.1148/ryai.230601), [arXiv](https://arxiv.org/abs/2406.15979)). 

## Method 1: Run Inference using `nnunet_predict.py`

1. Install [nnUNet_v1](https://github.com/MIC-DKFZ/nnUNet/tree/nnunetv1#installation) and [PyTorch](https://pytorch.org/get-started/locally/).

```shell
user@machine:~/ascites_segmentation$ pip install torch torchvision torchaudio nnunet matplotlib
```

2. Run inference with command:

```shell
user@machine:~/ascites_segmentation$ python nnunet_predict.py -i file_list.txt -t TMP_DIR -o OUTPUT_FOLDER -m /path/to/nnunet/model_weights
```

```shell
usage: tmp.py [-h] [-i INPUT_LIST] -t TMP_FOLDER -o OUTPUT_FOLDER -m MODEL [-v]

Inference using nnU-Net predict_from_folder Python API

optional arguments:
  -h, --help            show this help message and exit
  -i INPUT_LIST, --input_list INPUT_LIST
                        Input image file_list.txt
  -t TMP_FOLDER, --tmp_folder TMP_FOLDER
                        Temporary folder
  -o OUTPUT_FOLDER, --output_folder OUTPUT_FOLDER
                        Output Segmentation folder
  -m MODEL, --model MODEL
                        Trained Model
  -v, --verbose         Verbose Output
```



N.B. 
- `model_weights` folder should contain `fold0`, `fold1`, etc...
- WARNING: the program will try to create file links first, but will fallback to filecopy if fails


## Method 2: Run Inference using `nnUNet_predict` from shell

1. Install [nnUNet_v1](https://github.com/MIC-DKFZ/nnUNet/tree/nnunetv1#installation) and [PyTorch](https://pytorch.org/get-started/locally/).

```shell
user@machine:~/ascites_segmentation$ pip install torch torchvision torchaudio nnunet matplotlib
```

2. Setup environment variables so that nnU-Net knows where to find trained models: 

```shell
user@machine:~/ascites_segmentation$ export nnUNet_raw_data_base="/absolute/path/to/nnUNet_raw_data_base"
user@machine:~/ascites_segmentation$ export nnUNet_preprocessed="/absolute/path/to/nnUNet_preprocessed"
user@machine:~/ascites_segmentation$ export RESULTS_FOLDER="/absolute/path/to/nnUNet_trained_models"
```

3. Run inference with command:

```shell
user@machine:~/ascites_segmentation$ nnUNet_predict -i INPUT_FOLDER -o OUTPUT_FOLDER -t 505 -m 3d_fullres -f N --save_npz 
```

where:
- `-i`: input folder of `.nii.gz` scans to predict. NB, filename needs to end with `_0000.nii.gz` to tell nnU-Net only one kind of modality
- `-o`: output folder to store predicted segmentations, automatically created if not exist
- `-t 505`: (do not change) Ascites pretrained model name
- `-m 3d_fullres` (do not change) Ascites pretrained model name
- `N`: Ascites pretrained model fold, can be `[0, 1, 2, 3, 4]`
- `--save_npz`: save softmax scores, required for ensembling multiple folds 

### Optional [Additional] Inference Steps

a. use `nnUNet_find_best_configuration` to automatically get the inference commands needed to run the trained model on data.

b. ensemble predictions using `nnUNet_ensemble` by running:

```shell
user@machine:~/ascites_segmentation$ nnUNet_ensemble -f FOLDER1 FOLDER2 ... -o OUTPUT_FOLDER -pp POSTPROCESSING_FILE
```

where `FOLDER1` and `FOLDER2` are predicted outputs by nnUNet (requires `--save_npz` when running `nnUNet_predict`).

## Method 3: Docker Inference

Requires `nvidia-docker` to be installed on the system ([Installation Guide](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html)). This `nnunet_docker` predicts ascites with all 5 trained folds and ensembles output to a single prediction.

1. Build the `nnunet_docker` image from `Dockerfile`:

```shell
user@machine:~/ascites_segmentation$ sudo docker build -t nnunet_docker .
```

2. Run docker image on test volumes:

```shell
user@machine:~/ascites_segmentation$ sudo docker run \
--gpus 0 \
--volume /absolute/path/to/INPUT_FOLDER:/tmp/INPUT_FOLDER \
--volume /absolute/path/to/OUTPUT_FOLDER:/tmp/OUTPUT_FOLDER \
nnunet_docker /bin/sh inference.sh
```

- `--gpus` parameter:
  - `0, 1, 2, ..., n` for integer number of GPUs 
  - `all` for all available GPUs on the system
  - `'"device=2,3"'` for specific GPU with ID

- `--volume` parameter
  - `/absolute/path/to/INPUT_FOLDER` and `/absolute/path/to/OUTPUT_FOLDER` folders on the host system needs to be specified
  - `INPUT_FOLDER` contains all `.nii.gz` volumes to be predicted
  - predicted results will be written to `OUTPUT_FOLDER`

## Citation

If you find this repository helpful in your research, please consider citing our paper:

```text
@article{hou2024deep,
  title={Deep Learning Segmentation of Ascites on Abdominal CT Scans for Automatic Volume Quantification},
  author={Hou, Benjamin and Lee, Sung-Won and Lee, Jung-Min and Koh, Christopher and Xiao, Jing and Pickhardt, Perry J. and Summers, Ronald M.}
  journal={Radiology: Artificial Intelligence},
  pages={e230601},
  year={2024},
  publisher={Radiological Society of North America}
}
```