Spaces:
Runtime error
Runtime error
| # Copyright (c) OpenMMLab. All rights reserved. | |
| import copy | |
| import os.path as osp | |
| from typing import List | |
| from mmengine.fileio import load | |
| from mmseg.registry import DATASETS | |
| from .basesegdataset import BaseSegDataset | |
| class DecathlonDataset(BaseSegDataset): | |
| """Dataset for Dacathlon dataset. | |
| The dataset.json format is shown as follows | |
| .. code-block:: none | |
| { | |
| "name": "BRATS", | |
| "tensorImageSize": "4D", | |
| "modality": | |
| { | |
| "0": "FLAIR", | |
| "1": "T1w", | |
| "2": "t1gd", | |
| "3": "T2w" | |
| }, | |
| "labels": { | |
| "0": "background", | |
| "1": "edema", | |
| "2": "non-enhancing tumor", | |
| "3": "enhancing tumour" | |
| }, | |
| "numTraining": 484, | |
| "numTest": 266, | |
| "training": | |
| [ | |
| { | |
| "image": "./imagesTr/BRATS_306.nii.gz" | |
| "label": "./labelsTr/BRATS_306.nii.gz" | |
| ... | |
| } | |
| ] | |
| "test": | |
| [ | |
| "./imagesTs/BRATS_557.nii.gz" | |
| ... | |
| ] | |
| } | |
| """ | |
| def load_data_list(self) -> List[dict]: | |
| """Load annotation from directory or annotation file. | |
| Returns: | |
| list[dict]: All data info of dataset. | |
| """ | |
| # `self.ann_file` denotes the absolute annotation file path if | |
| # `self.root=None` or relative path if `self.root=/path/to/data/`. | |
| annotations = load(self.ann_file) | |
| if not isinstance(annotations, dict): | |
| raise TypeError(f'The annotations loaded from annotation file ' | |
| f'should be a dict, but got {type(annotations)}!') | |
| raw_data_list = annotations[ | |
| 'training'] if not self.test_mode else annotations['test'] | |
| data_list = [] | |
| for raw_data_info in raw_data_list: | |
| # `2:` works for removing './' in file path, which will break | |
| # loading from cloud storage. | |
| if isinstance(raw_data_info, dict): | |
| data_info = dict( | |
| img_path=osp.join(self.data_root, raw_data_info['image'] | |
| [2:])) | |
| data_info['seg_map_path'] = osp.join( | |
| self.data_root, raw_data_info['label'][2:]) | |
| else: | |
| data_info = dict( | |
| img_path=osp.join(self.data_root, raw_data_info)[2:]) | |
| data_info['label_map'] = self.label_map | |
| data_info['reduce_zero_label'] = self.reduce_zero_label | |
| data_info['seg_fields'] = [] | |
| data_list.append(data_info) | |
| annotations.pop('training') | |
| annotations.pop('test') | |
| metainfo = copy.deepcopy(annotations) | |
| metainfo['classes'] = [*metainfo['labels'].values()] | |
| # Meta information load from annotation file will not influence the | |
| # existed meta information load from `BaseDataset.METAINFO` and | |
| # `metainfo` arguments defined in constructor. | |
| for k, v in metainfo.items(): | |
| self._metainfo.setdefault(k, v) | |
| return data_list | |