FelixzeroSun's picture
Upload folder using huggingface_hub
19c1f58 verified
from batchgenerators.utilities.file_and_folder_operations import *
import shutil
from nnunetv2.dataset_conversion.generate_dataset_json import generate_dataset_json
from nnunetv2.paths import nnUNet_raw, nnUNet_preprocessed
def convert_autopet(autopet_base_dir:str = '/media/isensee/My Book1/AutoPET/nifti/FDG-PET-CT-Lesions',
nnunet_dataset_id: int = 221):
task_name = "AutoPETII_2023"
foldername = "Dataset%03.0d_%s" % (nnunet_dataset_id, task_name)
# setting up nnU-Net folders
out_base = join(nnUNet_raw, foldername)
imagestr = join(out_base, "imagesTr")
labelstr = join(out_base, "labelsTr")
maybe_mkdir_p(imagestr)
maybe_mkdir_p(labelstr)
patients = subdirs(autopet_base_dir, prefix='PETCT', join=False)
n = 0
identifiers = []
for pat in patients:
patient_acquisitions = subdirs(join(autopet_base_dir, pat), join=False)
for pa in patient_acquisitions:
n += 1
identifier = f"{pat}_{pa}"
identifiers.append(identifier)
if not isfile(join(imagestr, f'{identifier}_0000.nii.gz')):
shutil.copy(join(autopet_base_dir, pat, pa, 'CTres.nii.gz'), join(imagestr, f'{identifier}_0000.nii.gz'))
if not isfile(join(imagestr, f'{identifier}_0001.nii.gz')):
shutil.copy(join(autopet_base_dir, pat, pa, 'SUV.nii.gz'), join(imagestr, f'{identifier}_0001.nii.gz'))
if not isfile(join(imagestr, f'{identifier}.nii.gz')):
shutil.copy(join(autopet_base_dir, pat, pa, 'SEG.nii.gz'), join(labelstr, f'{identifier}.nii.gz'))
generate_dataset_json(out_base, {0: "CT", 1:"CT"},
labels={
"background": 0,
"tumor": 1
},
num_training_cases=n, file_ending='.nii.gz',
dataset_name=task_name, reference='https://autopet-ii.grand-challenge.org/',
release='release',
# overwrite_image_reader_writer='NibabelIOWithReorient',
description=task_name)
# manual split
splits = []
for fold in range(5):
val_patients = patients[fold :: 5]
splits.append(
{
'train': [i for i in identifiers if not any([i.startswith(v) for v in val_patients])],
'val': [i for i in identifiers if any([i.startswith(v) for v in val_patients])],
}
)
pp_out_dir = join(nnUNet_preprocessed, foldername)
maybe_mkdir_p(pp_out_dir)
save_json(splits, join(pp_out_dir, 'splits_final.json'), sort_keys=False)
if __name__ == '__main__':
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('input_folder', type=str,
help="The downloaded and extracted autopet dataset (must have PETCT_XXX subfolders)")
parser.add_argument('-d', required=False, type=int, default=221, help='nnU-Net Dataset ID, default: 221')
args = parser.parse_args()
amos_base = args.input_folder
convert_autopet(amos_base, args.d)