| | |
| | 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 |
| |
|
| |
|
| | @DATASETS.register_module() |
| | 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. |
| | """ |
| | |
| | |
| | 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: |
| | |
| | |
| | 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()] |
| | |
| | |
| | |
| | for k, v in metainfo.items(): |
| | self._metainfo.setdefault(k, v) |
| |
|
| | return data_list |
| |
|