Spaces:
Sleeping
Sleeping
| 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 | |
| def convert_amos_task2(amos_base_dir: str, nnunet_dataset_id: int = 219): | |
| """ | |
| AMOS doesn't say anything about how the validation set is supposed to be used. So we just incorporate that into | |
| the train set. Having a 5-fold cross-validation is superior to a single train:val split | |
| """ | |
| task_name = "AMOS2022_postChallenge_task2" | |
| 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") | |
| imagests = join(out_base, "imagesTs") | |
| labelstr = join(out_base, "labelsTr") | |
| maybe_mkdir_p(imagestr) | |
| maybe_mkdir_p(imagests) | |
| maybe_mkdir_p(labelstr) | |
| dataset_json_source = load_json(join(amos_base_dir, 'dataset.json')) | |
| training_identifiers = [i['image'].split('/')[-1][:-7] for i in dataset_json_source['training']] | |
| for tr in training_identifiers: | |
| shutil.copy(join(amos_base_dir, 'imagesTr', tr + '.nii.gz'), join(imagestr, f'{tr}_0000.nii.gz')) | |
| shutil.copy(join(amos_base_dir, 'labelsTr', tr + '.nii.gz'), join(labelstr, f'{tr}.nii.gz')) | |
| test_identifiers = [i['image'].split('/')[-1][:-7] for i in dataset_json_source['test']] | |
| for ts in test_identifiers: | |
| shutil.copy(join(amos_base_dir, 'imagesTs', ts + '.nii.gz'), join(imagests, f'{ts}_0000.nii.gz')) | |
| val_identifiers = [i['image'].split('/')[-1][:-7] for i in dataset_json_source['validation']] | |
| for vl in val_identifiers: | |
| shutil.copy(join(amos_base_dir, 'imagesVa', vl + '.nii.gz'), join(imagestr, f'{vl}_0000.nii.gz')) | |
| shutil.copy(join(amos_base_dir, 'labelsVa', vl + '.nii.gz'), join(labelstr, f'{vl}.nii.gz')) | |
| generate_dataset_json(out_base, {0: "either_CT_or_MR"}, labels={v: int(k) for k,v in dataset_json_source['labels'].items()}, | |
| num_training_cases=len(training_identifiers) + len(val_identifiers), file_ending='.nii.gz', | |
| dataset_name=task_name, reference='https://amos22.grand-challenge.org/', | |
| release='https://zenodo.org/record/7262581', | |
| overwrite_image_reader_writer='NibabelIOWithReorient', | |
| description="This is the dataset as released AFTER the challenge event. It has the " | |
| "validation set gt in it! We just use the validation images as additional " | |
| "training cases because AMOS doesn't specify how they should be used. nnU-Net's" | |
| " 5-fold CV is better than some random train:val split.") | |
| if __name__ == '__main__': | |
| import argparse | |
| parser = argparse.ArgumentParser() | |
| parser.add_argument('input_folder', type=str, | |
| help="The downloaded and extracted AMOS2022 (https://amos22.grand-challenge.org/) data. " | |
| "Use this link: https://zenodo.org/record/7262581." | |
| "You need to specify the folder with the imagesTr, imagesVal, labelsTr etc subfolders here!") | |
| parser.add_argument('-d', required=False, type=int, default=219, help='nnU-Net Dataset ID, default: 219') | |
| args = parser.parse_args() | |
| amos_base = args.input_folder | |
| convert_amos_task2(amos_base, args.d) | |
| # /home/isensee/Downloads/amos22/amos22/ | |