Esempio n. 1
0
    def load(self, kwargs):
        """ Parameters
            ----------
            depth : int, optional
                Specified the layers deep the proposed U-Net should go.
                Layer depth is symmetric on both upsampling and downsampling
                arms.
            max_filter: int, optional
                Specifies the number of filters at the bottom level of the U-Net.

        """

        add_parameter(self, kwargs, 'same_mask', True)
        add_parameter(self, kwargs, 'reference_channel', [0, 1])
        add_parameter(self, kwargs, 'model',
                      None)  # TODO: Replace with load(skull_strip_model)

        add_parameter(self, kwargs, 'name', 'SkullStrip_Model')
        add_parameter(self, kwargs, 'preprocessor_string', '_SkullStripped')

        self.array_input = True

        self.mask_string = '_Skullstrip_Mask'
        self.mask_filename = None

        if type(self.reference_channel) is not list:
            self.reference_channel = [self.reference_channel]
Esempio n. 2
0
    def load(self, kwargs):

        super(ZeroMeanNormalization, self).load(kwargs)

        # Naming Parameters
        add_parameter(self, kwargs, 'name', 'ZeroMeanNormalization')
        add_parameter(self, kwargs, 'preprocessor_string', '_ZeroNorm')
Esempio n. 3
0
    def load(self, kwargs):
        """ Parameters
            ----------
            name : str, optional
                Preprocessor name for internal use. Default is 'SkullStrip_Model'
            preprocessor_string: str, optional
                Appended suffix to filenames saved out from this preprocessor.
                Default is '_SkullStripped'
            reference_channel: int or list, optional
                
            model: DeepNeuroModel, optional
                DeepNeuroModel from which to run inference in this preprocessor.

        """

        add_parameter(self, kwargs, 'reference_channel', [0, 1])
        add_parameter(self, kwargs, 'model', None)

        # Data Output Parameters
        add_parameter(self, kwargs, 'output_filename',
                      'skullstrip_mask.nii.gz')

        add_parameter(self, kwargs, 'name', 'SkullStrip_Model')
        add_parameter(self, kwargs, 'preprocessor_string', '_SkullStripped')

        self.array_input = True

        self.mask_string = '_Skullstrip_Mask'
        self.mask_filename = None
        self.mask_numpy = None

        if type(self.reference_channel) is not list:
            self.reference_channel = [self.reference_channel]
    def load(self, kwargs):
        """ Parameters
            ----------
            depth : int, optional
                Specified the layers deep the proposed U-Net should go.
                Layer depth is symmetric on both upsampling and downsampling
                arms.
            max_filter: int, optional
                Specifies the number of filters at the bottom level of the U-Net.

        """

        super(PGGAN, self).load(kwargs)

        add_parameter(self, kwargs, 'initial_size', (4, 4))

        if type(self.initial_size) not in [list, tuple]:
            self.initial_size = (4, ) * self.dim

        # PGGAN Parameters
        self.starting_depth = 1
        self.transition_dict = {True: '_Transition', False: ''}

        if self.dim == 3:
            raise NotImplementedError
Esempio n. 5
0
    def load(self, kwargs):

        # Naming Parameters
        add_parameter(self, kwargs, 'name', 'Merge')

        # Dropping Parameters
        add_parameter(self, kwargs, 'channels', [0, 1, 2, 3])

        self.output_shape = {}
        self.array_input = True
Esempio n. 6
0
    def load(self, kwargs):
        """
        """

        # Flip and Rotate options
        add_parameter(self, kwargs, 'rotation_axes', [1, 2, 3])

        # Derived Parameters
        self.rotation_generator = {}
        self.augmentation_num = 0
Esempio n. 7
0
    def load(self, kwargs):

        super(BinaryNormalization, self).load(kwargs)

        add_parameter(self, kwargs, 'intensity_range', [-1, 1])
        add_parameter(self, kwargs, 'threshold', 0)
        add_parameter(self, kwargs, 'single_value', None)

        # Naming Parameters
        add_parameter(self, kwargs, 'name', 'BinaryNormalization')
        add_parameter(self, kwargs, 'preprocessor_string', '_Binary')
Esempio n. 8
0
    def __init__(self, **kwargs):

        # Default Variables
        add_parameter(self, kwargs, 'verbose', False)
        add_parameter(self, kwargs, 'raw_data', None)
        add_parameter(self, kwargs, 'ground_truth', 'ground_truth')

        # Naming Variables
        add_parameter(self, kwargs, 'name', 'Postprocesser')
        add_parameter(self, kwargs, 'postprocessor_string', '_postprocess')

        self.load(kwargs)
Esempio n. 9
0
    def load(self, kwargs):

        # Naming Parameters
        add_parameter(self, kwargs, 'name', 'MaskValues')
        add_parameter(self, kwargs, 'preprocessor_string', 'Masked')

        # Masking Parameters
        add_parameter(self, kwargs, 'mask_threshold', 0)
        add_parameter(self, kwargs, 'mask_value', 0)
        add_parameter(self, kwargs, 'mask_mode', 'lower')

        self.array_input = True
Esempio n. 10
0
    def load(self, kwargs):

        super(RangeNormalization, self).load(kwargs)

        add_parameter(self, kwargs, 'intensity_range', [-1, 1])
        add_parameter(self, kwargs, 'input_intensity_range', None)

        add_parameter(self, kwargs, 'outlier_percent', None)  # Not Implemented

        # Naming Parameters
        add_parameter(self, kwargs, 'name', 'RangeNormalization')
        add_parameter(self, kwargs, 'preprocessor_string', '_Range')
Esempio n. 11
0
    def load(self, kwargs):

        # Naming Parameters
        add_parameter(self, kwargs, 'name', 'ReorderAxes')

        # Dropping Parameters
        add_parameter(self, kwargs, 'axis_ordering', None)

        assert self.axis_ordering is not None, 'You must provide an axis ordering for ReorderAxes.'

        self.output_shape = {}
        self.array_input = True
Esempio n. 12
0
    def load(self, kwargs):

        # Naming Parameters
        add_parameter(self, kwargs, 'name', 'OneHotClasses')

        # Dropping Parameters
        add_parameter(self, kwargs, 'channels', None)
        add_parameter(self, kwargs, 'output_data_group', None)
        add_parameter(self, kwargs, 'max_centroid', 1)
        add_parameter(self, kwargs, 'aggregate_centroid', False)

        self.output_shape = {}
        self.array_input = True
Esempio n. 13
0
    def load(self, kwargs):

        # Naming Parameters
        add_parameter(self, kwargs, 'name', 'SqueezeAxes')

        # Dropping Parameters
        add_parameter(self, kwargs, 'axes', None)

        if type(self.axes) is not list and self.axes is not None:
            self.axes = [self.axes]

        self.output_shape = {}
        self.array_input = True
Esempio n. 14
0
    def load(self, kwargs):

        # A lot of this functionality is vague and messy, revisit

        # Downsample Parameters
        add_parameter(self, kwargs, 'channel', 0)
        add_parameter(self, kwargs, 'axes', {})
        add_parameter(self, kwargs, 'factor', 2)
        add_parameter(self, kwargs, 'random_sample', True)
        add_parameter(self, kwargs, 'num_downsampled', 1)

        self.input_shape = {}
        self.augmentation_string = '_resample_'
Esempio n. 15
0
    def load(self, kwargs):

        # Flip and Rotate options
        add_parameter(self, kwargs, 'flip', True)
        add_parameter(self, kwargs, 'rotate', True)
        add_parameter(self, kwargs, 'flip_axis', 2)
        add_parameter(self, kwargs, 'rotate_axis', (1, 2))

        # TODO: This is incredibly over-elaborate, return to fix.
        self.transforms_list = []

        if self.flip:
            self.flip_list = [False, True]
        else:
            self.flip_list = [False]

        if self.rotate:
            self.rotations_90 = [0, 1, 2, 3]
        else:
            self.rotations_90 = [0]

        self.available_transforms = np.array(
            np.meshgrid(self.flip_list, self.rotations_90)).T.reshape(-1, 2)
        self.total_transforms = self.available_transforms.shape[0]
        self.augmentation_string = '_rotate2D_'
Esempio n. 16
0
    def load(self, kwargs):
        """ Parameters
            ----------
            depth : int, optional
                Specified the layers deep the proposed U-Net should go.
                Layer depth is symmetric on both upsampling and downsampling
                arms.
            max_filter: int, optional
                Specifies the number of filters at the bottom level of the U-Net.

        """

        # Evaluation Params
        add_parameter(self, kwargs, 'ground_truth', None)

        # Saving Params
        add_parameter(self, kwargs, 'postprocessor_string',
                      '_pseudoprobability')

        # Model Parameters
        add_parameter(self, kwargs, 'channels_first', False)
        add_parameter(self, kwargs, 'input_channels', None)

        if 'channels_dim' in kwargs:
            self.channels_dim = kwargs.get('channels_dim')
        elif self.channels_first:
            self.channels_dim = 1
        else:
            self.channels_dim = -1
Esempio n. 17
0
    def __init__(self, case_list=None, verbose=False, **kwargs):

        # Data sources
        add_parameter(self, kwargs, 'data_sources', None)
        self.data_types = ['directories', 'filepaths', 'csv', 'numpy', 'hdf5']

        # File location variables
        add_parameter(self, kwargs, 'source', 'directories')
        add_parameter(self, kwargs, 'recursive', False)
        add_parameter(self, kwargs, 'file_identifying_chars', None)

        self.open_hdf5 = None
        self.case_list = case_list
        self.verbose = verbose

        # Special behavior for augmentations
        self.augmentations = []
        self.preprocessors = []
        self.multiplier = 1

        # Empty vars
        self.cases = []
        self.total_cases = 0
        self.current_case = None

        # Data group variables
        self.data_groups = {}

        if self.data_sources is not None:

            for data_type in self.data_types:
                if data_type not in list(self.data_sources.keys()):
                    self.data_sources[data_type] = None

            self.fill_data_groups()
Esempio n. 18
0
    def load(self, kwargs):

        # Flip and Rotate options
        add_parameter(self, kwargs, 'shift', True)
        add_parameter(self, kwargs, 'squeeze', True)
        add_parameter(self, kwargs, 'shift_amount', [-.5, .5])
        add_parameter(self, kwargs, 'squeeze_factor', [.7, 1.3])

        # TODO: This is incredibly over-elaborate, return to fix.
        self.transforms_list = []

        if self.shift:
            self.shift_list = [False, True]
        else:
            self.shift_list = [False]

        if self.squeeze:
            self.squeeze_list = [False, True]
        else:
            self.squeeze_list = [False]

        self.available_transforms = np.array(
            np.meshgrid(self.shift_list, self.squeeze_list)).T.reshape(-1, 2)
        self.total_transforms = self.available_transforms.shape[0]
        self.augmentation_string = '_shift_squeeze_'
Esempio n. 19
0
    def load(self, kwargs):
        """ Parameters
            ----------
            depth : int, optional
                Specified the layers deep the proposed U-Net should go.
                Layer depth is symmetric on both upsampling and downsampling
                arms.
            max_filter: int, optional
                Specifies the number of filters at the bottom level of the U-Net.

        """

        super(MinimalKerasCNN, self).load(kwargs)

        add_parameter(self, kwargs, 'filter_size', 1)
Esempio n. 20
0
    def load(self, kwargs):
        """ Parameters
            ----------
            depth : int, optional
                Specified the layers deep the proposed U-Net should go.
                Layer depth is symmetric on both upsampling and downsampling
                arms.
            max_filter: int, optional
                Specifies the number of filters at the bottom level of the U-Net.
        """

        add_parameter(self, kwargs, 'sess', None)
        add_parameter(self, kwargs, 'saver', None)

        self.tensorflow_optimizer_dict = {'Adam': tf.train.AdamOptimizer}
Esempio n. 21
0
    def load(self, kwargs):

        # Naming parameter
        add_parameter(self, kwargs, 'name', 'Binarization')
        add_parameter(self, kwargs, 'postprocessor_string', 'largest_components')

        add_parameter(self, kwargs, 'component_number', 1)
        add_parameter(self, kwargs, 'connectivity', 2)
Esempio n. 22
0
    def load(self, kwargs):

        # Naming parameter
        add_parameter(self, kwargs, 'name', 'Rescale')
        add_parameter(self, kwargs, 'postprocessor_string', 'rescaled')

        add_parameter(self, kwargs, 'input_intensity_range', None)
        add_parameter(self, kwargs, 'output_intensity_range', [0, 255])
Esempio n. 23
0
    def load(self, kwargs):

        super(KerasModel, self).load(kwargs)

        # Basic Keras Model Params
        add_parameter(self, kwargs, 'output_activation', True)

        # Specific Cost Function Params
        add_parameter(self, kwargs, 'categorical_weighting', {0: 0.1, 1: 3.0})

        self.keras_optimizer_dict = {'Nadam': Nadam, 'Adam': Adam, 'SGD': SGD}

        if self.input_tensor is None:
            self.inputs = Input(self.input_shape)
        else:
            self.inputs = self.input_tensor
Esempio n. 24
0
    def load(self, kwargs):

        # Naming Parameters
        add_parameter(self, kwargs, 'name', 'OneHotEncode')

        # Class Parameters
        add_parameter(self, kwargs, 'num_classes', 3)
        add_parameter(self, kwargs, 'input_classes', None)
        add_parameter(self, kwargs, 'class_dictionary', {})

        self.output_shape = {}
        self.array_input = True
Esempio n. 25
0
    def load(self, kwargs):
        """ Parameters
            ----------
            depth : int, optional
                Specified the layers deep the proposed U-Net should go.
                Layer depth is symmetric on both upsampling and downsampling
                arms.
            max_filter: int, optional
                Specifies the number of filters at the bottom level of the U-Net.

        """

        super(UNet, self).load(kwargs)

        add_parameter(self, kwargs, 'num_blocks', 2)
        add_parameter(self, kwargs, 'block_type', 'basic')
        add_parameter(self, kwargs, 'block_filter_growth_ratio', 2)
        add_parameter(self, kwargs, 'depth', 4)
        add_parameter(self, kwargs, 'output_channels', 1)
Esempio n. 26
0
    def load(self, kwargs):

        # Evaluation Params
        add_parameter(self, kwargs, 'ground_truth', None)

        # Saving Params
        add_parameter(self, kwargs, 'postprocessor_string', '_inference')

        # Model Parameters
        add_parameter(self, kwargs, 'input_channels', None)
        add_parameter(self, kwargs, 'output_channels', None)

        add_parameter(self, kwargs, 'channels_dim', None)

        if self.channels_dim is None:
            if self.channels_first:
                self.channels_dim = 1
            else:
                self.channels_dim = -1
Esempio n. 27
0
    def load(self, kwargs):

        # Add functionality for masking multiples axes.

        # Mask Parameters
        add_parameter(self, kwargs, 'mask_channels', {})
        add_parameter(self, kwargs, 'num_masked', 1)
        add_parameter(self, kwargs, 'masked_value', -10)
        add_parameter(self, kwargs, 'random_sample', True)

        # Derived Parameters
        self.input_shape = {}
        self.augmentation_string = '_mask_'
Esempio n. 28
0
    def load(self, kwargs):

        # Add functionality for choosing multiple axes

        # Choose Parameters
        add_parameter(self, kwargs, 'axis', {})
        add_parameter(self, kwargs, 'choices', None)
        add_parameter(self, kwargs, 'num_chosen', 1)
        add_parameter(self, kwargs, 'random_sample', True)

        # Derived Parameters
        self.input_shape = {}
        self.augmentation_string = '_choose_'
Esempio n. 29
0
    def load(self, kwargs):

        # Naming parameter
        add_parameter(self, kwargs, 'name', 'Binarization')
        add_parameter(self, kwargs, 'postprocessor_string', 'binarized')

        add_parameter(self, kwargs, 'binarization_threshold', 0.5)
Esempio n. 30
0
    def __init__(self, data_directory=None, data_storage=None, data_group_dict=None, spreadsheet_dict=None, value_dict=None, case_list=None, verbose=False, **kwargs):

        # Input vars
        self.data_directory = data_directory
        self.data_storage = data_storage
        self.data_group_dict = data_group_dict
        self.spreadsheet_dict = spreadsheet_dict
        
        # File location variables
        add_parameter(self, kwargs, 'source', 'directories')
        add_parameter(self, kwargs, 'recursive', False)
        add_parameter(self, kwargs, 'file_identifying_chars', None)

        self.value_dict = value_dict
        self.case_list = case_list
        self.verbose = verbose

        # Special behavior for augmentations
        self.augmentations = []
        self.preprocessors = []
        self.multiplier = 1

        # Empty vars
        self.cases = []
        self.preprocessed_cases = {}
        self.total_cases = 0
        self.current_case = None

        # Data group variables
        self.data_groups = {}

        if data_group_dict is not None or data_storage is not None:
            self.fill_data_groups()