Esempio n. 1
0
    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)
Esempio n. 2
0
    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)
Esempio n. 3
0
    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)
Esempio n. 4
0
    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)