-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathtest_env.py
109 lines (85 loc) · 4.4 KB
/
test_env.py
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
"""script predicts the segmentation results of a given testing dataset using a virtual environment.
This script allows users to enter the directory path to the testing PET images. It also accepts the output
directory to save predicted Nifti images and computed quantitative biomarkers features. If you chose to run it using a
virtual environment, please activate the environment first.
"""
import os
import sys
from src.LFBNet.utilities import train_valid_paths
from src.LFBNet.preprocessing import preprocessing
from src.run import trainer, parse_argument
from src.LFBNet.utilities.compute_surrogate_features import ComputesTMTVsDmaxFromNii
def main():
""" Predicts tumor segmentation results and calculate associated quantitative metrics on a given testing dataset
This function receives the path directory to the testing dataset that contains the PET images. It predicts the
segmentation results and save as .nii files. It then calculates the surrogate metabolic tumor volume (sTMTV) and
surrogate dissemination feature (sDmax) and save as csv or xls file.
Acronyms:
PET: Nifti format of [18]F-FDG PET images in SUV unit.
GT: Ground truth mask from the expert if available.
[directory_path_to_raw 3D nifti data with SUV values] should have the following structure as:
main_dir:
-- patient_id_1:
-- PET
--give_name.nii or give_name.nii.gz
-- GT (if available) (Ground truth mask from the expert if available)
-- give_name.nii or give_name.nii.gz
-- patient_id_2:
-- PET
--give_name.nii or give_name.nii.gz
-- GT (if available)
-- give_name.nii or give_name.nii.gz
It reads the .nii files, resize, crop, and save the 3D data, then from these data it generates the sagittal and
coronal PET MIPs and the ground truth (mask from the expert) if available in the folder.
Get the latest trained model weight from './weight' directory and use that weight to predict the segmentation.
Returns:
save segmented images and computed surrogate biomarker features using the last weight saved in the ./weight
folder.
"""
# parse input and output directory path:
# Path to the parent/main directory. Please read readme.md for how to organize your files.
# parse input directory,
args = parse_argument.get_parsed_arguments_test_case()
input_dir = args.input_dir
preprocessing_data_dir = args.output_dir
# If input directory path is not given use the default "/input_data"
if input_dir is None:
input_dir = "/input"
if not os.path.exists(input_dir):
os.mkdir(input_dir)
# if output path is not given in the argument, create "/output"
if preprocessing_data_dir is None:
preprocessing_data_dir = "/output"
if not os.path.exists(preprocessing_data_dir):
os.mkdir(preprocessing_data_dir)
# parameters
dataset_name = 'data'
desired_spacing = [4.0, 4.0, 4.0]
preprocessing_params = dict(
data_path=input_dir, data_name=dataset_name, saving_dir=preprocessing_data_dir, save_3D=True,
output_resolution=[128, 128, 256], desired_spacing=desired_spacing, generate_mip=True
)
mip_data_dir = preprocessing.read_pet_gt_resize_crop_save_as_3d_andor_mip(**preprocessing_params)
# get list of all patient names from the generated mip directory
patient_id_list = os.listdir(mip_data_dir)
print('There are %d cases to evaluate \n' % len(patient_id_list))
# prediction on the given testing dataset
test_params = dict(
preprocessed_dir=mip_data_dir, data_list=patient_id_list, predicted_dir=preprocessing_data_dir
)
network_run = trainer.ModelTesting(**test_params)
network_run.test()
print("\n\n Computing the surrogate biomarkers ... \n\n")
for identifier, data_path in zip(
["predicted", "ground_truth"], [os.path.join(preprocessing_data_dir, "predicted_data"),
os.path.join(preprocessing_data_dir, "data_default_MIP_dir")]
):
try:
csv_file = ComputesTMTVsDmaxFromNii(data_path=data_path, get_identifier=identifier)
csv_file.compute_and_save_surrogate_features()
except:
continue
# check
if __name__ == '__main__':
print("\n Running the integrated framework for testing use case... \n\n")
main()