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]
def load(self, kwargs): super(ZeroMeanNormalization, self).load(kwargs) # Naming Parameters add_parameter(self, kwargs, 'name', 'ZeroMeanNormalization') add_parameter(self, kwargs, 'preprocessor_string', '_ZeroNorm')
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
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
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
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')
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)
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
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')
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
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
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
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_'
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_'
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
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()
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_'
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)
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}
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)
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])
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
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
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)
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
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_'
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_'
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)
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()