def __init__(self,
                 name,
                 volume_config,
                 slicing_config,
                 defect_augmentation_config,
                 master_config=None):
        assert isinstance(volume_config, dict)
        assert isinstance(slicing_config, dict)
        assert isinstance(defect_augmentation_config, dict)
        assert 'raw' in volume_config
        assert 'segmentation' in volume_config

        volume_config = deepcopy(volume_config)
        self.scaling_factors = volume_config.pop("scaling_factors")

        # Get kwargs for raw volume
        raw_volume_kwargs = dict(volume_config.get('raw'))

        # check if we have special dict entries for names in the defect augmentation
        # slicing config
        augmentation_config = deepcopy(defect_augmentation_config)
        for slicing_key, slicing_item in augmentation_config[
                'artifact_source']['slicing_config'].items():
            if isinstance(slicing_item, dict):
                new_item = augmentation_config['artifact_source'][
                    'slicing_config'][slicing_key][name]
                augmentation_config['artifact_source']['slicing_config'][
                    slicing_key] = new_item

        raw_volume_kwargs.update(
            {'defect_augmentation_config': augmentation_config})
        raw_volume_kwargs.update(slicing_config)
        # Build raw volume
        self.raw_volume = RawVolumeWithDefectAugmentation(name=name,
                                                          **raw_volume_kwargs)

        # Get kwargs for segmentation volume
        segmentation_volume_kwargs = dict(volume_config.get('segmentation'))
        segmentation_volume_kwargs.update(slicing_config)
        self.affinity_config = segmentation_volume_kwargs.pop(
            'affinity_config', None)
        # Build segmentation volume
        self.segmentation_volume = SegmentationVolume(
            name=name, **segmentation_volume_kwargs)

        rejection_threshold = volume_config.get('rejection_threshold', 0.92)
        super().__init__(self.raw_volume,
                         self.segmentation_volume,
                         sync=True,
                         rejection_dataset_indices=1,
                         rejection_criterion=RejectSingleLabelVolumes(
                             1.0, 0.95))
        # Set master config (for transforms)
        self.master_config = {} if master_config is None else master_config
        # Get transforms
        self.transforms = self.get_transforms()
Esempio n. 2
0
    def __init__(self,
                 name,
                 volume_config,
                 slicing_config,
                 defect_augmentation_config,
                 master_config=None):
        assert isinstance(volume_config, dict)
        assert isinstance(slicing_config, dict)
        assert isinstance(defect_augmentation_config, dict)
        assert 'raw' in volume_config
        assert 'segmentation' in volume_config

        volume_config = deepcopy(volume_config)

        # Get kwargs for raw volume
        raw_volume_kwargs = dict(volume_config.get('raw'))

        # check if we have special dict entries for names in the defect augmentation
        # slicing config
        augmentation_config = deepcopy(defect_augmentation_config)
        for slicing_key, slicing_item in augmentation_config[
                'artifact_source']['slicing_config'].items():
            if isinstance(slicing_item, dict):
                new_item = augmentation_config['artifact_source'][
                    'slicing_config'][slicing_key][name]
                augmentation_config['artifact_source']['slicing_config'][
                    slicing_key] = new_item

        raw_volume_kwargs.update(
            {'defect_augmentation_config': augmentation_config})
        raw_volume_kwargs.update(slicing_config)
        # Build raw volume
        ignore_slice_list = deepcopy(
            augmentation_config.get("ignore_slice_list", None))
        if isinstance(ignore_slice_list, dict):
            ignore_slice_list = ignore_slice_list.get(name, [])
        self.raw_volume = RawVolumeWithDefectAugmentation(
            name=name,
            ignore_slice_list=ignore_slice_list,
            **raw_volume_kwargs)

        # Get kwargs for segmentation volume
        segmentation_volume_kwargs = dict(volume_config.get('segmentation'))
        segmentation_volume_kwargs.update(slicing_config)
        self.affinity_config = segmentation_volume_kwargs.pop(
            'affinity_config', None)
        # Build segmentation volume
        self.segmentation_volume = SegmentationVolume(
            name=name, **segmentation_volume_kwargs)

        volumes_to_load = [self.raw_volume, self.segmentation_volume]

        # Load additional masks:
        self.extra_masks_volume = None
        if volume_config.get('extra_masks', False):
            extra_masks_kwargs = dict(volume_config.get('extra_masks'))
            extra_masks_kwargs.update(slicing_config)
            self.extra_masks_volume = SegmentationVolume(name=name,
                                                         **extra_masks_kwargs)
            volumes_to_load.append(self.extra_masks_volume)

        rejection_threshold = volume_config.get('rejection_threshold', 0.5)
        super().__init__(*volumes_to_load,
                         sync=True,
                         rejection_dataset_indices=1,
                         rejection_criterion=RejectSingleLabelVolumes(
                             1.0,
                             rejection_threshold,
                             defected_label=master_config.get(
                                 'duplicate_GT_defected_slices',
                                 {}).get('defect_label', -1)))
        # Set master config (for transforms)
        self.master_config = {} if master_config is None else deepcopy(
            master_config)
        # Get transforms
        self.transforms = self.get_transforms()
    def __init__(self,
                 name,
                 volume_config,
                 slicing_config,
                 defect_augmentation_config,
                 master_config=None):
        raise DeprecationWarning("Use newer version in segmfriends")
        assert isinstance(volume_config, dict)
        assert isinstance(slicing_config, dict)
        assert isinstance(defect_augmentation_config, dict)
        assert 'raw' in volume_config
        assert 'segmentation' in volume_config
        assert 'various_masks' in volume_config

        volume_config = deepcopy(volume_config)

        # Get kwargs for raw volume
        raw_volume_kwargs = dict(volume_config.get('raw'))

        # check if we have special dict entries for names in the defect augmentation
        # slicing config
        augmentation_config = deepcopy(defect_augmentation_config)
        for slicing_key, slicing_item in augmentation_config[
                'artifact_source']['slicing_config'].items():
            if isinstance(slicing_item, dict):
                new_item = augmentation_config['artifact_source'][
                    'slicing_config'][slicing_key][name]
                augmentation_config['artifact_source']['slicing_config'][
                    slicing_key] = new_item

        raw_volume_kwargs.update(
            {'defect_augmentation_config': augmentation_config})
        raw_volume_kwargs.update(slicing_config)
        # Build raw volume
        self.raw_volume = RawVolumeWithDefectAugmentation(name=name,
                                                          **raw_volume_kwargs)

        # Get kwargs for segmentation volume
        segmentation_volume_kwargs = dict(volume_config.get('segmentation'))
        segmentation_volume_kwargs.update(slicing_config)
        self.affinity_config = segmentation_volume_kwargs.pop(
            'affinity_config', None)
        # Build segmentation volume
        self.segmentation_volume = SegmentationVolume(
            name=name, **segmentation_volume_kwargs)

        # Load additional masks:
        various_masks_kwargs = dict(volume_config.get('various_masks'))
        various_masks_kwargs.update(slicing_config)
        self.mask_volume = SegmentationVolume(name=name,
                                              **various_masks_kwargs)

        rejection_threshold = volume_config.get('rejection_threshold', 0.5)
        super().__init__(self.raw_volume,
                         self.segmentation_volume,
                         self.mask_volume,
                         sync=True,
                         rejection_dataset_indices=1,
                         rejection_criterion=RejectSingleLabelVolumes(
                             1.0,
                             rejection_threshold,
                             defected_label=master_config.get(
                                 'duplicate_GT_defected_slices',
                                 {}).get('defect_label', -1)))
        # Set master config (for transforms)
        self.master_config = {} if master_config is None else deepcopy(
            master_config)
        # Get transforms
        self.transforms = self.get_transforms()