def dense_decoder_fusion4(self, decoder5_feature, encoder4, name=None):#1/16, 1/16
     with tf.variable_scope(name):
         output_channel = 512
         decoder5_feature = Conv_BN_Relu(decoder5_feature, [3, 3, 512, output_channel], "dec5")
         encoder4 = Conv_BN_Relu(encoder4, [3, 3, 512, output_channel], "enc4")
         output = tf.add(decoder5_feature, encoder4)
         return output
 def dense_decoder_fusion2(self,
                           decoder5_feature,
                           decoder4_feature,
                           decoder3_feature,
                           encoder2,
                           name=None):  #1/16, 1/8, 1/4, 1/4
     with tf.variable_scope(name):
         output_channel = 128
         decoder5_feature = Conv_BN_Relu(decoder5_feature,
                                         [3, 3, 512, output_channel],
                                         "dec5")
         decoder5_feature = Upsampling(decoder5_feature,
                                       tf.shape(encoder2),
                                       ksize=8,
                                       stride=4,
                                       output_channel=output_channel,
                                       name="up_dec5")
         decoder4_feature = Conv_BN_Relu(decoder4_feature,
                                         [3, 3, 256, output_channel],
                                         "dec4")
         decoder4_feature = Upsampling(decoder4_feature,
                                       tf.shape(encoder2),
                                       ksize=4,
                                       stride=2,
                                       output_channel=output_channel,
                                       name="up_dec4")
         decoder3_feature = Conv_BN_Relu(decoder3_feature,
                                         [3, 3, 128, output_channel],
                                         "dec3")
         encoder2 = Conv_BN_Relu(encoder2, [3, 3, 128, output_channel],
                                 "enc2")
         output = tf.add(decoder5_feature, decoder4_feature)
         output = tf.add(output, decoder3_feature)
         output = tf.add(output, encoder2)
         return output
Example #3
0
 def dense_decoder_fusion1(self,
                           decoder2_feature,
                           encoder1,
                           name=None):  #1/2, 1/2
     with tf.variable_scope(name):
         output_channel = 64
         decoder2_feature = Conv_BN_Relu(decoder2_feature,
                                         [3, 3, 64, output_channel], "dec2")
         encoder1 = Conv_BN_Relu(encoder1, [3, 3, 64, output_channel],
                                 "enc1")
         output = tf.add(decoder2_feature, encoder1)
         return output
Example #4
0
 def dense_decoder_fusion2(self,
                           decoder3_feature,
                           encoder2,
                           name=None):  #1/4, 1/4
     with tf.variable_scope(name):
         output_channel = 128
         decoder3_feature = Conv_BN_Relu(decoder3_feature,
                                         [3, 3, 128, output_channel],
                                         "dec3")
         encoder2 = Conv_BN_Relu(encoder2, [3, 3, 128, output_channel],
                                 "enc2")
         output = tf.add(decoder3_feature, encoder2)
         return output
Example #5
0
 def dense_decoder_fusion3(self,
                           decoder4_feature,
                           encoder3,
                           name=None):  #1/8, 1/8
     with tf.variable_scope(name):
         output_channel = 256
         decoder4_feature = Conv_BN_Relu(decoder4_feature,
                                         [3, 3, 256, output_channel],
                                         "dec4")
         encoder3 = Conv_BN_Relu(encoder3, [3, 3, 256, output_channel],
                                 "enc3")
         output = tf.add(decoder4_feature, encoder3)
         return output
Example #6
0
    def build(self, input, input_channel, class_num=2):
        self.pool_size = [1,2,2,1]
        self.pool_stride = [1,2,2,1]
        
        # encoder

        # encoder 1
        self.conv1_1 = Conv_BN_Relu(input, [3, 3, input_channel, 64], "conv1_1")
        self.conv1_2 = Conv_BN_Relu(self.conv1_1, [3, 3, 64, 64], "conv1_2")
        self.pooling1 = tf.nn.max_pool(self.conv1_2, self.pool_size, self.pool_stride, padding="SAME", name="pooling1")
        # encoder 2
        self.conv2_1 = Conv_BN_Relu(self.pooling1, [3, 3, 64, 128], "conv2_1")
        self.conv2_2 = Conv_BN_Relu(self.conv2_1, [3, 3, 128, 128], "conv2_2")
        self.pooling2 = tf.nn.max_pool(self.conv2_2, self.pool_size, self.pool_stride, padding="SAME", name="pooling2")
        # encoder 3
        self.conv3_1 = Conv_BN_Relu(self.pooling2, [3, 3, 128, 256], "conv3_1")
        self.conv3_2 = Conv_BN_Relu(self.conv3_1, [3, 3, 256, 256], "conv3_2")
        self.conv3_3 = Conv_BN_Relu(self.conv3_2, [3, 3, 256, 256], "conv3_3")
        self.pooling3 = tf.nn.max_pool(self.conv3_3, self.pool_size, self.pool_stride, padding="SAME", name="pooling3")
        # encoder 4
        self.conv4_1 = Conv_BN_Relu(self.pooling3, [3, 3, 256, 512], "conv4_1")
        self.conv4_2 = Conv_BN_Relu(self.conv4_1, [3, 3, 512, 512], "conv4_2")
        self.conv4_3 = Conv_BN_Relu(self.conv4_2, [3, 3, 512, 512], "conv4_3")
        self.pooling4 = tf.nn.max_pool(self.conv4_3, self.pool_size, self.pool_stride, padding="SAME", name="pooling4")
        # encoder 5
        self.conv5_1 = Conv_BN_Relu(self.pooling4, [3, 3, 512, 512], "conv5_1")
        self.conv5_2 = Conv_BN_Relu(self.conv5_1, [3, 3, 512, 512], "conv5_2")
        self.conv5_3 = Conv_BN_Relu(self.conv5_2, [3, 3, 512, 512], "conv5_3")
        self.pooling5 = tf.nn.max_pool(self.conv5_3, self.pool_size, self.pool_stride, padding="SAME", name="pooling5")

        # decoder

        # decoder 5
        self.upsample5 = Upsampling(self.pooling5, tf.shape(self.pooling4), ksize=4, stride=2, output_channel=512, name="upsample5")
        self.deconv5_3 = Conv_BN_Relu(self.upsample5, [3, 3, 512, 512], "deconv5_3")
        self.deconv5_2 = Conv_BN_Relu(self.deconv5_3, [3, 3, 512, 512], "deconv5_2")
        self.deconv5_1 = Conv_BN_Relu(self.deconv5_2, [3, 3, 512, 512], "deconv5_1")
        # decoder 4
        self.upsample4 = Upsampling(self.deconv5_1, tf.shape(self.pooling3), ksize=4, stride=2, output_channel=512, name="upsample4")
        self.deconv4_3 = Conv_BN_Relu(self.upsample4, [3, 3, 512, 512], "deconv4_3")
        self.deconv4_2 = Conv_BN_Relu(self.deconv4_3, [3, 3, 512, 512], "deconv4_2")
        self.deconv4_1 = Conv_BN_Relu(self.deconv4_2, [3, 3, 512, 256], "deconv4_1")
        # decoder 3
        self.upsample3 = Upsampling(self.deconv4_1, tf.shape(self.pooling2), ksize=4, stride=2, output_channel=256, name="upsample3")
        self.deconv3_3 = Conv_BN_Relu(self.upsample3, [3, 3, 256, 256], "deconv3_3")
        self.deconv3_2 = Conv_BN_Relu(self.deconv3_3, [3, 3, 256, 256], "deconv3_2")
        self.deconv3_1 = Conv_BN_Relu(self.deconv3_2, [3, 3, 256, 128], "deconv3_1")
        # decoder 2
        self.upsample2 = Upsampling(self.deconv3_1, tf.shape(self.pooling1), ksize=4, stride=2, output_channel=128, name="upsample2")
        self.deconv2_2 = Conv_BN_Relu(self.upsample2, [3, 3, 128, 128], "deconv2_2")
        self.deconv2_1 = Conv_BN_Relu(self.deconv2_2, [3, 3, 128, 64], "deconv2_1")
        # decoder 1
        self.upsample1 = Upsampling(self.deconv2_1, tf.shape(input), ksize=4, stride=2, output_channel=64, name="upsample1")
        self.deconv1_2 = Conv_BN_Relu(self.upsample1, [3, 3, 64, 64], "deconv1_2")
        self.deconv1_1 = Conv_BN_Relu(self.deconv1_2, [3, 3, 64, class_num], "deconv1_1")
        # deconv1_1 will be processed by softmax and compute loss
        return self.deconv1_1
Example #7
0
    def build(self, input, input_channel, class_num=2):
        self.pool_size = [1, 2, 2, 1]
        self.pool_stride = [1, 2, 2, 1]

        # encoder

        # encoder 1
        self.conv1_1 = Conv_BN_Relu(input, [3, 3, input_channel, 64],
                                    "conv1_1")
        self.conv1_2 = Conv_BN_Relu(self.conv1_1, [3, 3, 64, 64], "conv1_2")
        self.pooling1 = tf.nn.max_pool(self.conv1_2,
                                       self.pool_size,
                                       self.pool_stride,
                                       padding="SAME",
                                       name="pooling1")
        # encoder 2
        self.conv2_1 = Conv_BN_Relu(self.pooling1, [3, 3, 64, 128], "conv2_1")
        self.conv2_2 = Conv_BN_Relu(self.conv2_1, [3, 3, 128, 128], "conv2_2")
        self.pooling2 = tf.nn.max_pool(self.conv2_2,
                                       self.pool_size,
                                       self.pool_stride,
                                       padding="SAME",
                                       name="pooling2")
        # encoder 3
        self.inception_block3_1 = _inception_layer(
            'inception3_1',
            self.pooling2,
            in_c=128,
            out_1=64,
            out_21=64,
            out_22=64,
            out_31=64,
            out_32=128,
            out_33=64,
            out_41=64,
            out_42=128,
            out_43=64)  # output channel 256
        self.inception_block3_2 = _inception_layer(
            'inception3_2',
            self.inception_block3_1,
            in_c=256,
            out_1=64,
            out_21=64,
            out_22=64,
            out_31=64,
            out_32=128,
            out_33=64,
            out_41=64,
            out_42=128,
            out_43=64)  # output channel 256
        self.inception_block3_3 = _inception_layer(
            'inception3_3',
            self.inception_block3_2,
            in_c=256,
            out_1=64,
            out_21=64,
            out_22=64,
            out_31=64,
            out_32=128,
            out_33=64,
            out_41=64,
            out_42=128,
            out_43=64)  # output channel 256
        self.pooling3 = tf.nn.max_pool(self.inception_block3_3,
                                       self.pool_size,
                                       self.pool_stride,
                                       padding="SAME",
                                       name="pooling3")
        # encoder 4
        self.inception_block4_1 = _inception_layer('inception4_1',
                                                   self.pooling3,
                                                   in_c=256,
                                                   out_1=128,
                                                   out_21=128,
                                                   out_22=128,
                                                   out_31=128,
                                                   out_32=256,
                                                   out_33=128,
                                                   out_41=128,
                                                   out_42=256,
                                                   out_43=128)  # output 512
        self.inception_block4_2 = _inception_layer('inception4_2',
                                                   self.inception_block4_1,
                                                   in_c=512,
                                                   out_1=128,
                                                   out_21=128,
                                                   out_22=128,
                                                   out_31=128,
                                                   out_32=256,
                                                   out_33=128,
                                                   out_41=128,
                                                   out_42=256,
                                                   out_43=128)  # output 512
        self.inception_block4_3 = _inception_layer('inception4_3',
                                                   self.inception_block4_2,
                                                   in_c=512,
                                                   out_1=128,
                                                   out_21=128,
                                                   out_22=128,
                                                   out_31=128,
                                                   out_32=256,
                                                   out_33=128,
                                                   out_41=128,
                                                   out_42=256,
                                                   out_43=128)  # output 512
        self.pooling4 = tf.nn.max_pool(self.inception_block4_3,
                                       self.pool_size,
                                       self.pool_stride,
                                       padding="SAME",
                                       name="pooling4")
        # encoder 5
        self.inception_block5_1 = _inception_layer('inception5_1',
                                                   self.pooling4,
                                                   in_c=512,
                                                   out_1=128,
                                                   out_21=128,
                                                   out_22=128,
                                                   out_31=128,
                                                   out_32=256,
                                                   out_33=128,
                                                   out_41=128,
                                                   out_42=256,
                                                   out_43=128)  # output 512
        self.inception_block5_2 = _inception_layer('inception5_2',
                                                   self.inception_block5_1,
                                                   in_c=512,
                                                   out_1=128,
                                                   out_21=128,
                                                   out_22=128,
                                                   out_31=128,
                                                   out_32=256,
                                                   out_33=128,
                                                   out_41=128,
                                                   out_42=256,
                                                   out_43=128)  # output 512
        self.inception_block5_3 = _inception_layer('inception5_3',
                                                   self.inception_block5_2,
                                                   in_c=512,
                                                   out_1=128,
                                                   out_21=128,
                                                   out_22=128,
                                                   out_31=128,
                                                   out_32=256,
                                                   out_33=128,
                                                   out_41=128,
                                                   out_42=256,
                                                   out_43=128)  # output 512
        self.pooling5 = tf.nn.max_pool(self.inception_block5_3,
                                       self.pool_size,
                                       self.pool_stride,
                                       padding="SAME",
                                       name="pooling5")

        # decoder

        # decoder 5
        self.upsample5 = Upsampling(self.pooling5,
                                    tf.shape(self.pooling4),
                                    ksize=4,
                                    stride=2,
                                    output_channel=512,
                                    name="upsample5")
        self.d_inception_block5_1 = _inception_layer('d_inception5_1',
                                                     self.upsample5,
                                                     in_c=512,
                                                     out_1=128,
                                                     out_21=128,
                                                     out_22=128,
                                                     out_31=128,
                                                     out_32=256,
                                                     out_33=128,
                                                     out_41=128,
                                                     out_42=256,
                                                     out_43=128)  # output 512
        self.d_inception_block5_2 = _inception_layer('d_inception5_2',
                                                     self.d_inception_block5_1,
                                                     in_c=512,
                                                     out_1=128,
                                                     out_21=128,
                                                     out_22=128,
                                                     out_31=128,
                                                     out_32=256,
                                                     out_33=128,
                                                     out_41=128,
                                                     out_42=256,
                                                     out_43=128)  # output 512
        self.d_inception_block5_3 = _inception_layer('d_inception5_3',
                                                     self.d_inception_block5_2,
                                                     in_c=512,
                                                     out_1=128,
                                                     out_21=128,
                                                     out_22=128,
                                                     out_31=128,
                                                     out_32=256,
                                                     out_33=128,
                                                     out_41=128,
                                                     out_42=256,
                                                     out_43=128)  # output 512
        # decoder 4
        self.upsample4 = Upsampling(self.d_inception_block5_3,
                                    tf.shape(self.pooling3),
                                    ksize=4,
                                    stride=2,
                                    output_channel=512,
                                    name="upsample4")
        self.d_inception_block4_1 = _inception_layer('d_inception4_1',
                                                     self.upsample4,
                                                     in_c=512,
                                                     out_1=128,
                                                     out_21=128,
                                                     out_22=128,
                                                     out_31=128,
                                                     out_32=256,
                                                     out_33=128,
                                                     out_41=128,
                                                     out_42=256,
                                                     out_43=128)  # output 512
        self.d_inception_block4_2 = _inception_layer('d_inception4_2',
                                                     self.d_inception_block4_1,
                                                     in_c=512,
                                                     out_1=128,
                                                     out_21=128,
                                                     out_22=128,
                                                     out_31=128,
                                                     out_32=256,
                                                     out_33=128,
                                                     out_41=128,
                                                     out_42=256,
                                                     out_43=128)  # output 512
        self.d_inception_block4_3 = _inception_layer('d_inception4_3',
                                                     self.d_inception_block4_2,
                                                     in_c=512,
                                                     out_1=64,
                                                     out_21=64,
                                                     out_22=64,
                                                     out_31=64,
                                                     out_32=128,
                                                     out_33=64,
                                                     out_41=64,
                                                     out_42=128,
                                                     out_43=64)  # output 256
        # decoder 3
        self.upsample3 = Upsampling(self.d_inception_block4_3,
                                    tf.shape(self.pooling2),
                                    ksize=4,
                                    stride=2,
                                    output_channel=256,
                                    name="upsample3")
        self.d_inception_block3_1 = _inception_layer(
            'd_inception3_1',
            self.upsample3,
            in_c=256,
            out_1=64,
            out_21=64,
            out_22=64,
            out_31=64,
            out_32=128,
            out_33=64,
            out_41=64,
            out_42=128,
            out_43=64)  # output channel 256
        self.d_inception_block3_2 = _inception_layer(
            'd_inception3_2',
            self.d_inception_block3_1,
            in_c=256,
            out_1=64,
            out_21=64,
            out_22=64,
            out_31=64,
            out_32=128,
            out_33=64,
            out_41=64,
            out_42=128,
            out_43=64)  # output channel 256
        self.d_inception_block3_3 = _inception_layer(
            'd_inception3_3',
            self.d_inception_block3_2,
            in_c=256,
            out_1=32,
            out_21=64,
            out_22=32,
            out_31=64,
            out_32=128,
            out_33=32,
            out_41=64,
            out_42=128,
            out_43=32)  # output channel 128
        # decoder 2
        self.upsample2 = Upsampling(self.d_inception_block3_3,
                                    tf.shape(self.pooling1),
                                    ksize=4,
                                    stride=2,
                                    output_channel=128,
                                    name="upsample2")
        self.deconv2_2 = Conv_BN_Relu(self.upsample2, [3, 3, 128, 128],
                                      "deconv2_2")
        self.deconv2_1 = Conv_BN_Relu(self.deconv2_2, [3, 3, 128, 64],
                                      "deconv2_1")
        # decoder 1
        self.upsample1 = Upsampling(self.deconv2_1,
                                    tf.shape(input),
                                    ksize=4,
                                    stride=2,
                                    output_channel=64,
                                    name="upsample1")
        self.deconv1_2 = Conv_BN_Relu(self.upsample1, [3, 3, 64, 64],
                                      "deconv1_2")
        self.deconv1_1 = Conv_BN_Relu(self.deconv1_2, [3, 3, 64, class_num],
                                      "deconv1_1")
        # deconv1_1 will be processed by softmax and compute loss
        return self.deconv1_1