def __init__(self, num_channels, num_classes, num_conv_layers=2, kernel_size=(3, 3, 3), nonlinearity='relu', use_batchnorm=True, dropout_rate=0.25, use_spatial_dropout=True, data_format='channels_last', name="vnet"): super(VNet, self).__init__(name=name) self.conv_1 = Conv3D_Block(num_channels,num_conv_layers,kernel_size,nonlinearity,use_batchnorm=use_batchnorm,data_format=data_format) self.conv_2 = Conv3D_Block(num_channels*2,num_conv_layers,kernel_size,nonlinearity,use_batchnorm=use_batchnorm,data_format=data_format) self.conv_3 = Conv3D_Block(num_channels*4,num_conv_layers,kernel_size,nonlinearity,use_batchnorm=use_batchnorm,data_format=data_format) self.conv_4 = Conv3D_Block(num_channels*8,num_conv_layers,kernel_size,nonlinearity,use_batchnorm=use_batchnorm,use_dropout=True,dropout_rate=dropout_rate,use_spatial_dropout=use_spatial_dropout,data_format=data_format) self.conv_5 = Conv3D_Block(num_channels*16,num_conv_layers,kernel_size,nonlinearity,use_batchnorm=use_batchnorm,use_dropout=True,dropout_rate=dropout_rate,use_spatial_dropout=use_spatial_dropout,data_format=data_format) self.up_5 = Up_Conv3D(num_channels*8,(2,2,2),nonlinearity,use_batchnorm=use_batchnorm,data_format=data_format) self.up_6 = Up_Conv3D(num_channels*4,(2,2,2),nonlinearity,use_batchnorm=use_batchnorm,data_format=data_format) self.up_7 = Up_Conv3D(num_channels*2,(2,2,2),nonlinearity,use_batchnorm=use_batchnorm,data_format=data_format) self.up_8 = Up_Conv3D(num_channels,(2,2,2),nonlinearity,use_batchnorm=use_batchnorm,data_format=data_format) self.up_conv4 = Conv3D_Block(num_channels*8,num_conv_layers,kernel_size,nonlinearity,use_batchnorm=use_batchnorm,data_format=data_format) self.up_conv3 = Conv3D_Block(num_channels*4,num_conv_layers,kernel_size,nonlinearity,use_batchnorm=use_batchnorm,data_format=data_format) self.up_conv2 = Conv3D_Block(num_channels*2,num_conv_layers,kernel_size,nonlinearity,use_batchnorm=use_batchnorm,data_format=data_format) self.up_conv1 = Conv3D_Block(num_channels,num_conv_layers,kernel_size,nonlinearity,use_batchnorm=use_batchnorm,data_format=data_format) # convolution num_channels at the output self.conv_output = tf.keras.layers.Conv3D(2, kernel_size, activation=nonlinearity, padding='same', data_format=data_format) self.conv_1x1 = tf.keras.layers.Conv3D(num_classes, kernel_size, padding='same', data_format=data_format)
def __init__(self, num_channels, num_classes, num_conv_layers=2, kernel_size=(3, 3, 3), nonlinearity='relu', use_batchnorm=True, dropout_rate=0.25, use_spatial_dropout=True, data_format='channels_last', merge_connections=False, output_activation=None, name="vnet_tiny"): super(VNet_Tiny, self).__init__(name=name) self.merge_connections = merge_connections self.num_classes = num_classes self.conv_1 = Conv3D_Block(num_channels, num_conv_layers, kernel_size, nonlinearity, use_batchnorm=use_batchnorm, data_format=data_format) self.conv_2 = Conv3D_Block(num_channels * 2, num_conv_layers, kernel_size, nonlinearity, use_batchnorm=use_batchnorm, data_format=data_format) self.up_2 = Up_Conv3D(num_channels, (2, 2, 2), nonlinearity, use_batchnorm=use_batchnorm, data_format=data_format) self.up_conv1 = Conv3D_Block(num_channels, num_conv_layers, kernel_size, nonlinearity, use_batchnorm=use_batchnorm, data_format=data_format) # convolution num_channels at the output self.conv_output = tf.keras.layers.Conv3D(num_classes, kernel_size, activation=nonlinearity, padding='same', data_format=data_format) if output_activation is None: output_activation = 'sigmoid' if num_classes > 1: output_activation = 'softmax' if num_classes == 1: self.conv_1x1_binary = tf.keras.layers.Conv3D(num_classes, (1, 1, 1), activation='sigmoid', padding='same', data_format=data_format) else: self.conv_1x1 = tf.keras.layers.Conv3D(num_classes, kernel_size=(1, 1, 1), activation='softmax', padding='same', data_format=data_format)
def __init__(self, num_channels, num_classes, num_conv_layers=2, kernel_size=(3, 3, 3), nonlinearity='relu', use_batchnorm=True, dropout_rate=0.25, use_spatial_dropout=True, data_format='channels_last', merge_connections=False, num_compressors=3, compressor_filters=3, action='add', output_activation=None, name="vnet_small_relative"): super(VNet_Small_Relative, self).__init__(name=name) self.merge_connections = merge_connections self.num_classes = num_classes self.action = action assert self.action in ['add', 'multiply'], f"{self.action} not in action list" self.conv_1 = Conv3D_Block(num_channels, num_conv_layers, kernel_size, nonlinearity, use_batchnorm=use_batchnorm, data_format=data_format, name="c1") self.conv_2 = Conv3D_Block(num_channels * 2, num_conv_layers, kernel_size, nonlinearity, use_batchnorm=use_batchnorm, data_format=data_format, name="c2") self.conv_3 = Conv3D_Block(num_channels * 4, num_conv_layers, kernel_size, nonlinearity, use_batchnorm=use_batchnorm, data_format=data_format, name="c3") self.up_3 = Up_Conv3D(num_channels * 2, (2, 2, 2), nonlinearity, use_batchnorm=use_batchnorm, data_format=data_format, name="cu3") self.up_2 = Up_Conv3D(num_channels, (2, 2, 2), nonlinearity, use_batchnorm=use_batchnorm, data_format=data_format, name="cu2") self.up_conv2 = Conv3D_Block(num_channels * 2, num_conv_layers, kernel_size, nonlinearity, use_batchnorm=use_batchnorm, data_format=data_format, name="upc2") self.up_conv1 = Conv3D_Block(num_channels, num_conv_layers, kernel_size, nonlinearity, use_batchnorm=use_batchnorm, data_format=data_format, name="upc1") # compression section self.compressors = [] for idx, i in enumerate(range(num_compressors)): cfilters = compressor_filters if num_compressors == (idx + 1): cfilters = 1 self.compressors.append( tf.keras.layers.Conv3D(cfilters, kernel_size=3, strides=2, padding="valid", activation=nonlinearity, data_format=data_format, name=f"compessor_{idx}")) self.comp_dense_1 = tf.keras.layers.Dense(16, activation="relu") self.comp_dense_2 = tf.keras.layers.Dense(4, activation="relu") self.comp_dense_3 = tf.keras.layers.Dense(1, activation="tanh") # convolution num_channels at the output self.conv_output = tf.keras.layers.Conv3D(num_classes, kernel_size, activation=nonlinearity, padding='same', data_format=data_format) if output_activation is None: output_activation = 'sigmoid' if num_classes > 1: output_activation = 'softmax' if num_classes == 1: self.conv_1x1_binary = tf.keras.layers.Conv3D( num_classes, (1, 1, 1), activation='sigmoid', padding='same', data_format=data_format) else: self.conv_1x1 = tf.keras.layers.Conv3D(num_classes, kernel_size=(1, 1, 1), activation='softmax', padding='same', data_format=data_format)
def __init__(self, num_channels, num_classes, num_conv_layers=2, kernel_size=(3, 3, 3), nonlinearity='relu', use_batchnorm=True, dropout_rate=0.25, use_spatial_dropout=True, data_format='channels_last', merge_connections=True, output_activation=None, noise=0.0001, use_res_connect=False, use_stride_2=False, name="vnet_small"): self.params = str(inspect.currentframe().f_locals) super(VNet_Small, self).__init__(name=name) self.merge_connections = merge_connections self.num_classes = num_classes self.noise = noise self.use_res_connect = use_res_connect self.use_stride_2 = use_stride_2 self.conv_1 = Conv3D_Block(num_channels, num_conv_layers, kernel_size, nonlinearity, use_batchnorm=use_batchnorm, data_format=data_format, name="c1") if self.use_stride_2: self.conv_1_stride = tf.keras.layers.Conv3D( num_channels, kernel_size=kernel_size, strides=2, activation="selu", padding="same") self.conv_2 = Conv3D_Block(num_channels * 2, num_conv_layers, kernel_size, nonlinearity, use_batchnorm=use_batchnorm, data_format=data_format, name="c2") if self.use_stride_2: self.conv_2_stride = tf.keras.layers.Conv3D( num_channels, kernel_size=kernel_size, strides=2, activation="selu", padding="same") self.conv_3 = Conv3D_Block(num_channels * 4, num_conv_layers, kernel_size, nonlinearity, use_batchnorm=use_batchnorm, data_format=data_format, name="c3") self.up_3 = Up_Conv3D(num_channels * 2, (2, 2, 2), nonlinearity, use_batchnorm=use_batchnorm, data_format=data_format, name="cu3") self.up_2 = Up_Conv3D(num_channels, (2, 2, 2), nonlinearity, use_batchnorm=use_batchnorm, data_format=data_format, name="cu2") self.up_conv2 = Conv3D_Block(num_channels * 2, num_conv_layers, kernel_size, nonlinearity, use_batchnorm=use_batchnorm, data_format=data_format, name="upc2") self.up_conv1 = Conv3D_Block(num_channels, num_conv_layers, kernel_size, nonlinearity, use_batchnorm=use_batchnorm, data_format=data_format, name="upc1") # convolution num_channels at the output self.conv_output = tf.keras.layers.Conv3D(num_classes, kernel_size, activation=nonlinearity, padding='same', data_format=data_format) if output_activation is None: output_activation = 'sigmoid' if num_classes > 1: output_activation = 'softmax' if num_classes == 1: self.conv_1x1_binary = tf.keras.layers.Conv3D( num_classes, (1, 1, 1), activation='sigmoid', padding='same', data_format=data_format) else: self.conv_1x1 = tf.keras.layers.Conv3D(num_classes, kernel_size=(1, 1, 1), activation='softmax', padding='same', data_format=data_format)
def __init__(self, num_channels, num_classes, num_conv_layers=3, start_kernel_size=(5, 5, 5), kernel_size=(3, 3, 3), nonlinearity='relu', use_batchnorm=True, dropout_rate=0.25, use_spatial_dropout=True, data_format='channels_last', merge_connections=True, action='add', output_activation=None, use_res_connect=False, use_stride_2=False, name="vnet_large_relative"): self.params = str(inspect.currentframe().f_locals) super(VNet_Large_Relative, self).__init__(name=name) self.merge_connections = merge_connections self.num_classes = num_classes self.action = action assert self.action in ['add', 'multiply'], f"{self.action} not in action list" self.use_res_connect = use_res_connect self.use_stride_2 = use_stride_2 self.conv_1 = Conv3D_Block(num_channels, num_conv_layers, start_kernel_size, nonlinearity, use_batchnorm=use_batchnorm, data_format=data_format, name="c1") if self.use_stride_2: self.conv_1_stride = tf.keras.layers.Conv3D( num_channels, kernel_size=kernel_size, strides=2, activation="selu", padding="same") self.conv_2 = Conv3D_Block(num_channels * 2, num_conv_layers, kernel_size, nonlinearity, use_batchnorm=use_batchnorm, data_format=data_format, name="c2") if self.use_stride_2: self.conv_2_stride = tf.keras.layers.Conv3D( num_channels, kernel_size=kernel_size, strides=2, activation="selu", padding="same") self.conv_3 = Conv3D_Block(num_channels * 4, num_conv_layers, kernel_size, nonlinearity, use_batchnorm=use_batchnorm, data_format=data_format, name="c3") if self.use_stride_2: self.conv_3_stride = tf.keras.layers.Conv3D( num_channels, kernel_size=kernel_size, strides=2, activation="selu", padding="same") self.conv_4 = Conv3D_Block(num_channels * 8, num_conv_layers, kernel_size, nonlinearity, use_batchnorm=use_batchnorm, data_format=data_format, name="c4") if self.use_stride_2: self.conv_4_stride = tf.keras.layers.Conv3D( num_channels, kernel_size=kernel_size, strides=2, activation="selu", padding="same") self.conv_5 = Conv3D_Block(num_channels * 16, num_conv_layers, kernel_size, nonlinearity, use_batchnorm=use_batchnorm, data_format=data_format, name="c5") self.up_5 = Up_Conv3D(num_channels * 8, (2, 2, 2), nonlinearity, use_batchnorm=use_batchnorm, data_format=data_format, name="cu5") self.up_4 = Up_Conv3D(num_channels * 4, (2, 2, 2), nonlinearity, use_batchnorm=use_batchnorm, data_format=data_format, name="cu4") self.up_3 = Up_Conv3D(num_channels * 2, (2, 2, 2), nonlinearity, use_batchnorm=use_batchnorm, data_format=data_format, name="cu3") self.up_2 = Up_Conv3D(num_channels, (2, 2, 2), nonlinearity, use_batchnorm=use_batchnorm, data_format=data_format, name="cu2") self.up_conv4 = Conv3D_Block(num_channels * 8, num_conv_layers, kernel_size, nonlinearity, use_batchnorm=use_batchnorm, data_format=data_format, name="upc4") self.up_conv3 = Conv3D_Block(num_channels * 4, num_conv_layers, kernel_size, nonlinearity, use_batchnorm=use_batchnorm, data_format=data_format, name="upc3") self.up_conv2 = Conv3D_Block(num_channels * 2, num_conv_layers, kernel_size, nonlinearity, use_batchnorm=use_batchnorm, data_format=data_format, name="upc2") self.up_conv1 = Conv3D_Block(num_channels, num_conv_layers, kernel_size, nonlinearity, use_batchnorm=use_batchnorm, data_format=data_format, name="upc1") self.pos_dense_1 = tf.keras.layers.Dense(16, activation="relu") self.pos_dense_2 = tf.keras.layers.Dense(4, activation="relu") self.pos_dense_3 = tf.keras.layers.Dense(1, activation="tanh") # convolution num_channels at the output self.conv_output = tf.keras.layers.Conv3D(num_classes, kernel_size, activation=nonlinearity, padding='same', data_format=data_format) if output_activation is None: output_activation = 'sigmoid' if num_classes > 1: output_activation = 'softmax' if num_classes == 1: self.conv_1x1_binary = tf.keras.layers.Conv3D( num_classes, (1, 1, 1), activation='sigmoid', padding='same', data_format=data_format) else: self.conv_1x1 = tf.keras.layers.Conv3D(num_classes, kernel_size=(1, 1, 1), activation='softmax', padding='same', data_format=data_format)