def __init__(self, args, mode, dataset_path='../datasets', classes=4, dim=(32, 32, 32), split_id=0, samples=1000, load=False): self.mode = mode self.root = dataset_path self.classes = classes dataset_name = 'MICCAI_2020_ribfrac' self.val_path = "/data/chelx/MICCAI-RibFrac2020/dataset/ribfrac-val-images" self.dirs = os.listdir(self.val_path) self.sample = samples self.list = [] self.full_vol_size = (240, 240, 48) self.threshold = args.threshold self.crop_dim = dim self.list_reg_t1 = [] self.labels = [] self.full_volume = None self.save_name = self.root + '/MICCAI_2020_ribfrac/val/classes-' + str( classes) + '-list-' + mode + '-samples-' + str(samples) + '.txt' if load: ## load pre-generated data self.list = utils.load_list(self.save_name) return # subvol = '_vol_' + str(dim[0]) + 'x' + str(dim[1]) + 'x' + str(dim[2]) + '_' + str(self.threshold) # subvol = '_vol_' + str(dim[0]) + 'x' + str(dim[1]) + 'x' + str(dim[2]) + '_' + str(self.threshold) + '_' + str(args.samples_train) subvol = '_vol_' + str(dim[0]) + 'x' + str(dim[1]) + 'x' + str( dim[2]) + '_' + str(self.threshold) + '_overall' self.sub_vol_path = self.root + '/MICCAI_2020_ribfrac/generated/' + mode + subvol + '/' # utils.make_dirs(self.sub_vol_path) if not os.path.exists(self.sub_vol_path): os.makedirs(self.sub_vol_path) if not os.path.exists(os.path.dirname(self.save_name)): os.makedirs(os.path.dirname(self.save_name)) list_reg_t1 = sorted( glob.glob(os.path.join(self.val_path, 'val/*.nii.gz'))) # import ipdb;ipdb.set_trace() labels = sorted( glob.glob(os.path.join(self.val_path, 'val_label_gt/*.nii.gz'))) self.affine = img_loader.load_affine_matrix(list_reg_t1[0]) self.list = create_sub_volumes(list_reg_t1, labels, dataset_name=dataset_name, mode=mode, samples=samples, full_vol_dim=self.full_vol_size, crop_size=self.crop_dim, sub_vol_path=self.sub_vol_path, th_percent=self.threshold) utils.save_list(self.save_name, self.list)
def __init__(self, dataset_path='./data', voxels_space=(2, 2, 2), modalities=2, to_canonical=False, save=True): """ :param dataset_path: the extracted path that contains the desired images :param voxels_space: for reshampling the voxel space :param modalities: 1 for T1 only, 2 for T1 and T2 :param to_canonical: If you want to convert the coordinates to RAS for more info on this advice here https://www.slicer.org/wiki/Coordinate_systems :param save: to save the generated data offline for faster reading and not load RAM """ self.root = str(dataset_path) self.modalities = modalities self.pathT1 = self.root + '/ixi/T1/' self.pathT2 = self.root + '/ixi/T2/' self.save = save self.CLASSES = 4 self.full_vol_dim = (150, 256, 256) # slice, width, height self.voxels_space = voxels_space self.modalities = str(modalities) self.list = [] self.full_volume = None self.to_canonical = to_canonical self.affine = None subvol = '_vol_' + str(self.voxels_space[0]) + 'x' + str(self.voxels_space[1]) + 'x' + str( self.voxels_space[2]) if self.save: self.sub_vol_path = self.root + '/ixi/generated/' + subvol + '/' utils.make_dirs(self.sub_vol_path) print(self.pathT1) self.list_IDsT1 = sorted(glob.glob(os.path.join(self.pathT1, '*T1.nii.gz'))) self.list_IDsT2 = sorted(glob.glob(os.path.join(self.pathT2, '*T2.nii.gz'))) self.affine = img_loader.load_affine_matrix(self.list_IDsT1[0]) self.create_input_data()
def __init__(self, args, mode, dataset_path='../datasets', classes=4, dim=(32, 32, 32), split_id=0, samples=1000, load=False): self.mode = mode self.root = dataset_path self.classes = classes dataset_name = "mrbrains" + str(classes) self.training_path = self.root + '/mrbrains_2018/training' self.dirs = os.listdir(self.training_path) self.samples = samples self.list = [] self.full_vol_size = (240, 240, 48) self.threshold = 0.1 self.crop_dim = dim self.list_flair = [] self.list_ir = [] self.list_reg_ir = [] self.list_reg_t1 = [] self.labels = [] self.full_volume = None self.save_name = self.root + '/mrbrains_2018/training/mrbrains_2018-classes-' + str( classes) + '-list-' + mode + '-samples-' + str( samples) + '.txt' if load: ## load pre-generated data self.list = utils.load_list(self.save_name) return subvol = '_vol_' + str(dim[0]) + 'x' + str(dim[1]) + 'x' + str(dim[2]) self.sub_vol_path = self.root + '/mrbrains_2018/generated/' + mode + subvol + '/' utils.make_dirs(self.sub_vol_path) list_reg_t1 = sorted(glob.glob(os.path.join(self.training_path, '*/pr*/*g_T1.nii.gz'))) list_reg_ir = sorted(glob.glob(os.path.join(self.training_path, '*/pr*/*g_IR.nii.gz'))) list_flair = sorted(glob.glob(os.path.join(self.training_path, '*/pr*/*AIR.nii.gz'))) labels = sorted(glob.glob(os.path.join(self.training_path, '*/*egm.nii.gz'))) self.affine = img_loader.load_affine_matrix(list_reg_t1[0]) split_id = int(split_id) if mode == 'val': labels = [labels[split_id]] list_reg_t1 = [list_reg_t1[split_id]] list_reg_ir = [list_reg_ir[split_id]] list_flair = [list_flair[split_id]] self.full_volume = get_viz_set(list_reg_t1, list_reg_ir, list_flair, labels, dataset_name=dataset_name) else: labels.pop(split_id) list_reg_t1.pop(split_id) list_reg_ir.pop(split_id) list_flair.pop(split_id) self.list = create_sub_volumes(list_reg_t1, list_reg_ir, list_flair, labels, dataset_name=dataset_name, mode=mode, samples=samples, full_vol_dim=self.full_vol_size, crop_size=self.crop_dim, sub_vol_path=self.sub_vol_path, th_percent=self.threshold) utils.save_list(self.save_name, self.list)
def __init__(self, mode, dataset_path='../datasets', classes=4, dim=(32, 32, 32), fold_id=0, samples=1000, save=True): self.mode = mode self.root = dataset_path self.classes = classes self.training_path = self.root + '/mrbrains_2018/training' self.dirs = os.listdir(self.training_path) self.samples = samples self.save = save self.list = [] self.full_vol_size = (240, 240, 48) self.crop_dim = dim self.fold = str(fold_id) self.list_flair = [] self.list_ir = [] self.list_reg_ir = [] self.list_reg_t1 = [] self.labels = [] self.full_volume = None if self.save: subvol = '_vol_' + str(dim[0]) + 'x' + str(dim[1]) + 'x' + str( dim[2]) self.sub_vol_path = self.root + '/mrbrains_2018/generated/' + mode + subvol + '/' utils.make_dirs(self.sub_vol_path) self.list_reg_t1 = sorted( glob.glob(os.path.join(self.training_path, '*/pr*/*g_T1.nii.gz'))) self.list_reg_ir = sorted( glob.glob(os.path.join(self.training_path, '*/pr*/*g_IR.nii.gz'))) self.list_flair = sorted( glob.glob(os.path.join(self.training_path, '*/pr*/*AIR.nii.gz'))) self.labels = sorted( glob.glob(os.path.join(self.training_path, '*/*egm.nii.gz'))) self.affine = img_loader.load_affine_matrix(self.list_reg_t1[0]) fold_id = int(fold_id) if mode == 'val': self.labels = [self.labels[fold_id]] self.list_reg_t1 = [self.list_reg_t1[fold_id]] self.list_reg_ir = [self.list_reg_ir[fold_id]] self.list_flair = [self.list_flair[fold_id]] self.get_viz_set() else: self.labels.pop(fold_id) self.list_reg_t1.pop(fold_id) self.list_reg_ir.pop(fold_id) self.list_flair.pop(fold_id) self.get_samples()
def __init__(self, args, mode, dataset_path='../datasets', classes=4, dim=(32, 32, 32), split_id=0, samples=1000, load=False): self.mode = mode self.root = dataset_path self.classes = classes dataset_name = 'MICCAI_2020_ribfrac' self.val_path = args.test_path #"/data/beijing/dataset/MICCAI-RibFrac2020/ribfrac-val-images" self.dirs = os.listdir(self.val_path) self.sample = samples self.list = [] self.full_vol_size = (240, 240, 48) # self.threshold = args.threshold self.crop_dim = dim self.list_reg_t1 = [] self.labels = [] self.full_volume = None self.save_name = self.root + '/MICCAI_2020_ribfrac/val/classes-' + str( classes) + '-list-' + mode + '-samples-' + str(samples) + '.txt' list_reg_t1 = sorted( glob.glob(os.path.join(self.val_path, 'val/*.nii.gz'))) labels = sorted( glob.glob(os.path.join(self.val_path, 'val_label_gt/*.nii.gz'))) # list_reg_t1 = sorted(glob.glob(os.path.join(self.val_path, 'train/*/*.nii.gz'))) # labels = sorted(glob.glob(os.path.join(self.val_path, 'train_label_gt/*/*.nii.gz'))) # list_reg_t1 = sorted(glob.glob('/data/hejy/MedicalZooPytorch/datasets/MICCAI_2020_ribfrac/generated/train_vol_128x128x48_0.3_nii/'+ '*.nii.gz')) # labels = sorted(glob.glob('/data/hejy/MedicalZooPytorch/datasets/MICCAI_2020_ribfrac/generated/train_vol_128x128x48_0.3_nii/'+ '*.nii.gz')) self.affine = img_loader.load_affine_matrix(list_reg_t1[0]) # self.full_volume = get_viz_set(list_reg_t1, labels, dataset_name=dataset_name) self.full_volume = [] for img, label in zip(list_reg_t1, labels): img_label_path = [] img_label_path.append(img) img_label_path.append(label) self.list.append(tuple(img_label_path))
def __init__(self, mode, dataset_path='./datasets', crop_dim=(32, 32, 32), split_id=1, samples=1000, load=False): """ :param mode: 'train','val','test' :param dataset_path: root dataset folder :param crop_dim: subvolume tuple :param fold_id: 1 to 10 values :param samples: number of sub-volumes that you want to create """ self.mode = mode self.root = str(dataset_path) self.training_path = self.root + '/iseg_2017/iSeg-2017-Training/' self.testing_path = self.root + '/iseg_2017/iSeg-2017-Testing/' self.CLASSES = 4 self.full_vol_dim = (144, 192, 256) # slice, width, height self.crop_size = crop_dim self.list = [] self.samples = samples self.full_volume = None self.save_name = self.root + '/iseg_2017/iSeg-2017-Training/iseg2017-list-' + mode + '-samples-' + str( samples) + '.txt' if load: self.list = utils.load_list(self.save_name) list_IDsT1 = sorted( glob.glob(os.path.join(self.training_path, '*T1.img'))) self.affine = img_loader.load_affine_matrix(list_IDsT1[0]) return subvol = '_vol_' + str(crop_dim[0]) + 'x' + str( crop_dim[1]) + 'x' + str(crop_dim[2]) self.sub_vol_path = self.root + '/iseg_2017/generated/' + mode + subvol + '/' utils.make_dirs(self.sub_vol_path) list_IDsT1 = sorted( glob.glob(os.path.join(self.training_path, '*T1.img'))) list_IDsT2 = sorted( glob.glob(os.path.join(self.training_path, '*T2.img'))) labels = sorted( glob.glob(os.path.join(self.training_path, '*label.img'))) self.affine = img_loader.load_affine_matrix(list_IDsT1[0]) if self.mode == 'train': list_IDsT1 = list_IDsT1[:split_id] list_IDsT2 = list_IDsT2[:split_id] labels = labels[:split_id] self.list = create_sub_volumes(list_IDsT1, list_IDsT2, labels, dataset_name="iseg2017", mode=mode, samples=samples, full_vol_dim=self.full_vol_dim, crop_size=self.crop_size, sub_vol_path=self.sub_vol_path, threshold=10) elif self.mode == 'val': list_IDsT1 = list_IDsT1[split_id:] list_IDsT2 = list_IDsT2[:split_id:] labels = labels[split_id:] self.list = create_sub_volumes(list_IDsT1, list_IDsT2, labels, dataset_name="iseg2017", mode=mode, samples=samples, full_vol_dim=self.full_vol_dim, crop_size=self.crop_size, sub_vol_path=self.sub_vol_path, threshold=10) self.full_volume = get_viz_set(list_IDsT1, list_IDsT2, labels) elif self.mode == 'test': self.list_IDsT1 = sorted( glob.glob(os.path.join(self.testing_path, '*T1.img'))) self.list_IDsT2 = sorted( glob.glob(os.path.join(self.testing_path, '*T2.img'))) self.labels = None utils.save_list(self.save_name, self.list)
def __init__(self, args, mode, dataset_path='./datasets', classes=5, crop_dim=(32, 32, 32), split_idx=10, samples=10, load=False): """ :param mode: 'train','val','test' :param dataset_path: root dataset folder :param crop_dim: subvolume tuple :param split_idx: 1 to 10 values :param samples: number of sub-volumes that you want to create """ self.mode = mode self.root = str(dataset_path) self.training_path = self.root + '/MICCAI_BraTS_2018_Data_Training/' self.testing_path = self.root + ' ' self.CLASSES = 4 self.full_vol_dim = (240, 240, 155) # slice, width, height self.crop_size = crop_dim self.threshold = args.threshold self.normalization = args.normalization self.augmentation = args.augmentation self.list = [] self.samples = samples self.full_volume = None self.classes = classes self.save_name = self.root + '/MICCAI_BraTS_2018_Data_Training/brats2018-list-' + mode + '-samples-' + str( samples) + '.txt' if self.augmentation: self.transform = augment3D.RandomChoice(transforms=[ augment3D.GaussianNoise(mean=0, std=0.01), augment3D.RandomFlip(), augment3D.ElasticTransform() ], p=0.5) if load: ## load pre-generated data list_IDsT1 = sorted( glob.glob(os.path.join(self.training_path, '*GG/*/*t1.nii.gz'))) self.affine = img_loader.load_affine_matrix(list_IDsT1[0]) self.list = utils.load_list(self.save_name) return subvol = '_vol_' + str(crop_dim[0]) + 'x' + str( crop_dim[1]) + 'x' + str(crop_dim[2]) self.sub_vol_path = self.root + '/MICCAI_BraTS_2018_Data_Training/generated/' + mode + subvol + '/' utils.make_dirs(self.sub_vol_path) list_IDsT1 = sorted( glob.glob(os.path.join(self.training_path, '*GG/*/*t1.nii.gz'))) list_IDsT1ce = sorted( glob.glob(os.path.join(self.training_path, '*GG/*/*t1ce.nii.gz'))) list_IDsT2 = sorted( glob.glob(os.path.join(self.training_path, '*GG/*/*t2.nii.gz'))) list_IDsFlair = sorted( glob.glob(os.path.join(self.training_path, '*GG/*/*_flair.nii.gz'))) labels = sorted( glob.glob(os.path.join(self.training_path, '*GG/*/*_seg.nii.gz'))) # print(len(list_IDsT1),len(list_IDsT2),len(list_IDsFlair),len(labels)) self.affine = img_loader.load_affine_matrix(list_IDsT1[0]) if self.mode == 'train': list_IDsT1 = list_IDsT1[:split_idx] list_IDsT1ce = list_IDsT1ce[:split_idx] list_IDsT2 = list_IDsT2[:split_idx] list_IDsFlair = list_IDsFlair[:split_idx] labels = labels[:split_idx] self.list = create_sub_volumes(list_IDsT1, list_IDsT1ce, list_IDsT2, list_IDsFlair, labels, dataset_name="brats2018", mode=mode, samples=samples, full_vol_dim=self.full_vol_dim, crop_size=self.crop_size, sub_vol_path=self.sub_vol_path, normalization=self.normalization, th_percent=self.threshold) elif self.mode == 'val': list_IDsT1 = list_IDsT1[split_idx:] list_IDsT1ce = list_IDsT1ce[split_idx:] list_IDsT2 = list_IDsT2[split_idx:] list_IDsFlair = list_IDsFlair[split_idx:] labels = labels[split_idx:] self.list = create_sub_volumes(list_IDsT1, list_IDsT1ce, list_IDsT2, list_IDsFlair, labels, dataset_name="brats2018", mode=mode, samples=samples, full_vol_dim=self.full_vol_dim, crop_size=self.crop_size, sub_vol_path=self.sub_vol_path, normalization=self.normalization, th_percent=self.threshold) elif self.mode == 'test': self.list_IDsT1 = sorted( glob.glob(os.path.join(self.testing_path, '*GG/*/*t1.nii.gz'))) self.list_IDsT1ce = sorted( glob.glob(os.path.join(self.testing_path, '*GG/*/*t1ce.nii.gz'))) self.list_IDsT2 = sorted( glob.glob(os.path.join(self.testing_path, '*GG/*/*t2.nii.gz'))) self.list_IDsFlair = sorted( glob.glob( os.path.join(self.testing_path, '*GG/*/*_flair.nii.gz'))) self.labels = None utils.save_list(self.save_name, self.list)
def __init__(self, args, mode, dataset_path='./datasets', crop_dim=(32, 32, 32), split_id=1, samples=1000, load=False): """ :param mode: 'train','val','test' :param dataset_path: root dataset folder :param crop_dim: subvolume tuple :param fold_id: 1 to 10 values :param samples: number of sub-volumes that you want to create """ self.mode = mode self.root = str(dataset_path) self.training_path = self.root + '/iseg_2019/iSeg-2019-Training/' self.testing_path = self.root + '/iseg_2019/iSeg-2019-Validation/' self.CLASSES = 4 self.full_vol_dim = (144, 192, 256) # slice, width, height self.crop_size = crop_dim self.threshold = args.threshold self.normalization = args.normalization self.augmentation = args.augmentation self.list = [] self.samples = samples self.full_volume = None self.save_name = self.root + '/iseg_2019/iseg2019-list-' + mode + '-samples-' + str( samples) + '.txt' if self.augmentation: self.transform = augment3D.RandomChoice(transforms=[ augment3D.GaussianNoise(mean=0, std=0.01), augment3D.RandomFlip(), augment3D.ElasticTransform() ], p=0.5) if load: ## load pre-generated data self.list = utils.load_list(self.save_name) list_IDsT1 = sorted( glob.glob(os.path.join(self.training_path, '*T1.img'))) self.affine = img_loader.load_affine_matrix(list_IDsT1[0]) return subvol = '_vol_' + str(crop_dim[0]) + 'x' + str( crop_dim[1]) + 'x' + str(crop_dim[2]) self.sub_vol_path = self.root + '/iseg_2019/generated/' + mode + subvol + '/' utils.make_dirs(self.sub_vol_path) list_IDsT1 = sorted( glob.glob(os.path.join(self.training_path, '*T1.img'))) list_IDsT2 = sorted( glob.glob(os.path.join(self.training_path, '*T2.img'))) labels = sorted( glob.glob(os.path.join(self.training_path, '*label.img'))) self.affine = img_loader.load_affine_matrix(list_IDsT1[0]) if self.mode == 'train': list_IDsT1 = list_IDsT1[:split_id] list_IDsT2 = list_IDsT2[:split_id] labels = labels[:split_id] self.list = create_sub_volumes(list_IDsT1, list_IDsT2, labels, dataset_name="iseg2019", mode=mode, samples=samples, full_vol_dim=self.full_vol_dim, crop_size=self.crop_size, sub_vol_path=self.sub_vol_path, th_percent=self.threshold) elif self.mode == 'val': list_IDsT1 = list_IDsT1[split_id:] list_IDsT2 = list_IDsT2[:split_id:] labels = labels[split_id:] self.list = create_sub_volumes(list_IDsT1, list_IDsT2, labels, dataset_name="iseg2019", mode=mode, samples=samples, full_vol_dim=self.full_vol_dim, crop_size=self.crop_size, sub_vol_path=self.sub_vol_path, th_percent=self.threshold) self.full_volume = get_viz_set(list_IDsT1, list_IDsT2, labels, dataset_name="iseg2019") elif self.mode == 'test': self.list_IDsT1 = sorted( glob.glob(os.path.join(self.testing_path, '*T1.img'))) self.list_IDsT2 = sorted( glob.glob(os.path.join(self.testing_path, '*T2.img'))) self.labels = None # todo inference here utils.save_list(self.save_name, self.list)
def __init__(self, mode, dataset_path='./datasets', classes=5, crop_dim=(200, 200, 150), split_idx=260, samples=10, load=False): """ :param mode: 'train','val','test' :param dataset_path: root dataset folder :param crop_dim: subvolume tuple :param split_idx: 1 to 10 values :param samples: number of sub-volumes that you want to create """ self.mode = mode self.root = str(dataset_path) self.training_path = self.root + '/brats2019/MICCAI_BraTS_2019_Data_Training/' self.testing_path = self.root + '/brats2019/MICCAI_BraTS_2019_Data_Validation/' self.full_vol_dim = (240, 240, 155) # slice, width, height self.crop_size = crop_dim self.list = [] self.samples = samples self.full_volume = None self.classes = classes self.save_name = self.root + '/brats2019/brats2019-list-' + mode + '-samples-' + str( samples) + '.txt' if load: self.list = utils.load_list(self.save_name) list_IDsT1 = sorted( glob.glob(os.path.join(self.training_path, '*GG/*/*t1.nii.gz'))) self.affine = img_loader.load_affine_matrix(list_IDsT1[0]) return subvol = '_vol_' + str(crop_dim[0]) + 'x' + str( crop_dim[1]) + 'x' + str(crop_dim[2]) self.sub_vol_path = self.root + '/brats2019/MICCAI_BraTS_2019_Data_Training/generated/' + mode + subvol + '/' utils.make_dirs(self.sub_vol_path) list_IDsT1 = sorted( glob.glob(os.path.join(self.training_path, '*GG/*/*t1.nii.gz'))) list_IDsT1ce = sorted( glob.glob(os.path.join(self.training_path, '*GG/*/*t1ce.nii.gz'))) list_IDsT2 = sorted( glob.glob(os.path.join(self.training_path, '*GG/*/*t2.nii.gz'))) list_IDsFlair = sorted( glob.glob(os.path.join(self.training_path, '*GG/*/*_flair.nii.gz'))) labels = sorted( glob.glob(os.path.join(self.training_path, '*GG/*/*_seg.nii.gz'))) list_IDsT1, list_IDsT1ce, list_IDsT2, list_IDsFlair, labels = utils.shuffle_lists( list_IDsT1, list_IDsT1ce, list_IDsT2, list_IDsFlair, labels, seed=17) self.affine = img_loader.load_affine_matrix(list_IDsT1[0]) if self.mode == 'train': print('Brats2019, Total data:', len(list_IDsT1)) list_IDsT1 = list_IDsT1[:split_idx] list_IDsT1ce = list_IDsT1ce[:split_idx] list_IDsT2 = list_IDsT2[:split_idx] list_IDsFlair = list_IDsFlair[:split_idx] labels = labels[:split_idx] self.list = create_sub_volumes(list_IDsT1, list_IDsT1ce, list_IDsT2, list_IDsFlair, labels, dataset_name="brats2019", mode=mode, samples=samples, full_vol_dim=self.full_vol_dim, crop_size=self.crop_size, sub_vol_path=self.sub_vol_path) elif self.mode == 'val': list_IDsT1 = list_IDsT1[split_idx:] list_IDsT1ce = list_IDsT1ce[split_idx:] list_IDsT2 = list_IDsT2[split_idx:] list_IDsFlair = list_IDsFlair[split_idx:] labels = labels[split_idx:] self.list = create_sub_volumes(list_IDsT1, list_IDsT1ce, list_IDsT2, list_IDsFlair, labels, dataset_name="brats2019", mode=mode, samples=samples, full_vol_dim=self.full_vol_dim, crop_size=self.crop_size, sub_vol_path=self.sub_vol_path) elif self.mode == 'test': self.list_IDsT1 = sorted( glob.glob(os.path.join(self.testing_path, '*GG/*/*t1.nii.gz'))) self.list_IDsT1ce = sorted( glob.glob(os.path.join(self.testing_path, '*GG/*/*t1ce.nii.gz'))) self.list_IDsT2 = sorted( glob.glob(os.path.join(self.testing_path, '*GG/*/*t2.nii.gz'))) self.list_IDsFlair = sorted( glob.glob( os.path.join(self.testing_path, '*GG/*/*_flair.nii.gz'))) self.labels = None # Todo inference code here utils.save_list(self.save_name, self.list)
def __init__(self, mode, dataset_path='./datasets', classes=5, crop_dim=(32, 32, 32), split_idx=10, samples=10, save=True): """ :param mode: 'train','val','test' :param dataset_path: root dataset folder :param crop_dim: subvolume tuple :param split_idx: 1 to 10 values :param samples: number of sub-volumes that you want to create """ self.mode = mode self.root = str(dataset_path) self.training_path = self.root + '/MICCAI_BraTS_2018_Data_Training/' self.testing_path = self.root + ' ' self.save = save self.CLASSES = 4 self.full_vol_dim = (240, 240, 155) # slice, width, height self.crop_size = crop_dim self.list = [] self.samples = samples self.full_volume = None self.classes = classes subvol = '_vol_' + str(crop_dim[0]) + 'x' + str( crop_dim[1]) + 'x' + str(crop_dim[2]) if self.save: self.sub_vol_path = self.root + '/MICCAI_BraTS_2018_Data_Training/generated/' + mode + subvol + '/' utils.make_dirs(self.sub_vol_path) # print(self.training_path) list_IDsT1 = sorted( glob.glob(os.path.join(self.training_path, '*GG/*/*t1.nii.gz'))) list_IDsT1ce = sorted( glob.glob(os.path.join(self.training_path, '*GG/*/*t1ce.nii.gz'))) list_IDsT2 = sorted( glob.glob(os.path.join(self.training_path, '*GG/*/*t2.nii.gz'))) list_IDsFlair = sorted( glob.glob(os.path.join(self.training_path, '*GG/*/*_flair.nii.gz'))) labels = sorted( glob.glob(os.path.join(self.training_path, '*GG/*/*_seg.nii.gz'))) # TODO shuffle lists self.affine = img_loader.load_affine_matrix(list_IDsT1[0]) if self.mode == 'train': self.list_IDsT1 = list_IDsT1[:split_idx] self.list_IDsT1ce = list_IDsT1ce[:split_idx] self.list_IDsT2 = list_IDsT2[:split_idx] self.list_IDsFlair = list_IDsFlair[:split_idx] self.labels = labels[:split_idx] # Generates datasets with non-empty sub-volumes! self.create_sub_volumes() elif self.mode == 'val': self.list_IDsT1 = list_IDsT1[split_idx:] self.list_IDsT1ce = list_IDsT1ce[split_idx:] self.list_IDsT2 = list_IDsT2[split_idx:] self.list_IDsFlair = list_IDsFlair[split_idx:] self.labels = labels[split_idx:] self.create_sub_volumes() # TODO # self.get_viz_set() elif self.mode == 'test': self.list_IDsT1 = sorted( glob.glob(os.path.join(self.testing_path, '*GG/*/*t1.nii.gz'))) self.list_IDsT1ce = sorted( glob.glob(os.path.join(self.testing_path, '*GG/*/*t1ce.nii.gz'))) self.list_IDsT2 = sorted( glob.glob(os.path.join(self.testing_path, '*GG/*/*t2.nii.gz'))) self.list_IDsFlair = sorted( glob.glob( os.path.join(self.testing_path, '*GG/*/*_flair.nii.gz'))) self.labels = None
def __init__(self, mode, dataset_path='./datasets', crop_dim=(32, 32, 32), fold_id=1, samples=1000, save=True): """ :param mode: 'train','val','test' :param dataset_path: root dataset folder :param crop_dim: subvolume tuple :param fold_id: 1 to 10 values :param samples: number of sub-volumes that you want to create """ self.mode = mode self.root = str(dataset_path) self.training_path = self.root + '/iseg_2017/iSeg-2017-Training/' self.testing_path = self.root + '/iseg_2017/iSeg-2017-Testing/' self.save = save self.CLASSES = 4 self.full_vol_dim = (144, 192, 256) # slice, width, height self.crop_size = crop_dim self.fold = str(fold_id) self.list = [] self.samples = samples self.full_volume = None subvol = '_vol_' + str(crop_dim[0]) + 'x' + str( crop_dim[1]) + 'x' + str(crop_dim[2]) if self.save: self.sub_vol_path = self.root + '/iseg_2017/generated/' + mode + subvol + '/' utils.make_dirs(self.sub_vol_path) list_IDsT1 = sorted( glob.glob(os.path.join(self.training_path, '*T1.img'))) list_IDsT2 = sorted( glob.glob(os.path.join(self.training_path, '*T2.img'))) labels = sorted( glob.glob(os.path.join(self.training_path, '*label.img'))) self.affine = img_loader.load_affine_matrix(list_IDsT1[0]) training_labels, training_list_IDsT1, training_list_IDsT2, val_list_IDsT1, val_list_IDsT2, val_labels = [], [], [], [], [], [] print("SELECT subject with ID {} for Validation".format(self.fold)) for i in range(len(labels)): subject_id = (labels[i].split('/')[-1]).split('-')[1] if subject_id == self.fold: val_list_IDsT1.append(list_IDsT1[i]) val_list_IDsT2.append(list_IDsT2[i]) val_labels.append(labels[i]) else: training_list_IDsT1.append(list_IDsT1[i]) training_list_IDsT2.append(list_IDsT2[i]) training_labels.append(labels[i]) if self.mode == 'train': self.list_IDsT1 = training_list_IDsT1 self.list_IDsT2 = training_list_IDsT2 self.labels = training_labels # Generates datasets with non-empty sub-volumes! self.create_sub_volumes() elif self.mode == 'val': self.list_IDsT1 = val_list_IDsT1 self.list_IDsT2 = val_list_IDsT2 self.labels = val_labels self.create_sub_volumes() self.get_viz_set() elif self.mode == 'test': self.list_IDsT1 = sorted( glob.glob(os.path.join(self.testing_path, '*T1.img'))) self.list_IDsT2 = sorted( glob.glob(os.path.join(self.testing_path, '*T2.img'))) self.labels = None