【问题标题】:Implement UNet in Tensorflow在 TensorFlow 中实现 UNet
【发布时间】:2019-12-08 15:37:28
【问题描述】:

我正在尝试使用 Keras API 在 TensorFlow 2 中实现 UNet 进行图像分割,但我不确定如何实现 Concatenate 层。这是我尝试过的:

def create_model_myunet(depth, start_f, output_channels, encoder_kernel_size):

    # Encoder
    model = tf.keras.Sequential()

    for i in range(0, depth):

        if i == 0:
            print("Specifying an input shape")
            input_shape = [config.img_h, config.img_w, 3]
        else:
            input_shape = [None]

        model.add(tf.keras.layers.Conv2D(filters=2**(start_f+i), 
                                         kernel_size=(encoder_kernel_size, encoder_kernel_size),
                                         strides=(1, 1),
                                         padding='same',
                                         input_shape=input_shape,
                                         name = "enc_conv2d_" + str(i)))
        model.add(tf.keras.layers.ReLU(name = "enc_relu_" + str(i)))
        model.add(tf.keras.layers.MaxPool2D(pool_size=(2, 2), name="enc_maxpool2d_" + str(i)))

    # Decoder
    initializer = tf.random_normal_initializer(0., 0.02)

    for i in range(depth, 1, -1):

        model.add(
        tf.keras.layers.Conv2DTranspose(2**(start_f+i),
                                        encoder_kernel_size,
                                        strides=2,
                                        padding='same',
                                        kernel_initializer=initializer,
                                        use_bias=False)
        )

        model.add(tf.keras.layers.BatchNormalization())

        model.add(tf.keras.layers.ReLU(name="dec_relu_"+str(i)))

        model.add(tf.keras.layers.Concatenate([
            model.get_layer(name="dec_relu_"+str(i)).output,  
            model.get_layer(name="enc_relu_"+str(i-1)).output
        ] ))
        pass

    last = tf.keras.layers.Conv2DTranspose(
      output_channels, 3, strides=2,
      padding='same', activation='softmax')  #64x64 -> 128x128

    model.add(last)

    return model

它给了我以下错误:

ValueError: A Concatenate 层应该在列表中调用 at 至少 2 个输入

【问题讨论】:

    标签: python tensorflow image-segmentation tensorflow2.0 tf.keras


    【解决方案1】:

    你需要改变

    model.add(tf.keras.layers.Concatenate([
        model.get_layer(name="dec_relu_"+str(i)).output,  
        model.get_layer(name="enc_relu_"+str(i-1)).output
    ] ))
    

    model.add(tf.keras.layers.Concatenate()([  # Sequential api
        model.get_layer(name="dec_relu_"+str(i)).output,  
        model.get_layer(name="enc_relu_"+str(i-1)).output
    ] ))
    

    model.add(tf.keras.layers.concatenate([  # Functional api
        model.get_layer(name="dec_relu_"+str(i)).output,  
        model.get_layer(name="enc_relu_"+str(i-1)).output
    ] ))
    

    【讨论】:

      猜你喜欢
      • 2018-01-15
      • 1970-01-01
      • 2020-08-12
      • 2017-02-24
      • 2017-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多