我正在尝试按照此处发表的论文实施 U-Net CNN 。
我已经尽可能地遵循了论文架构,但是在尝试执行第一个连接时遇到了错误:
从图中可以看出,第 8 个 Conv2D 应该与第一个 UpSampling2D 操作的结果合并,但是该Concatenate()操作会引发形状不匹配的异常:
def model(image_size = (572, 572) + (1,)):
# Input / Output layers
input_layer = Input(shape=(image_size), 32)
""" Begin Downsampling """
# Block 1
conv_1 = Conv2D(64, 3, activation = 'relu')(input_layer)
conv_2 = Conv2D(64, 3, activation = 'relu')(conv_1)
max_pool_1 = MaxPool2D(strides=2)(conv_2)
# Block 2
conv_3 = Conv2D(128, 3, activation = 'relu')(max_pool_1)
conv_4 = Conv2D(128, 3, activation = 'relu')(conv_3)
max_pool_2 = MaxPool2D(strides=2)(conv_4)
# Block 3
conv_5 = Conv2D(256, 3, activation = 'relu')(max_pool_2)
conv_6 = Conv2D(256, 3, activation = 'relu')(conv_5)
max_pool_3 = MaxPool2D(strides=2)(conv_6)
# Block 4
conv_7 = Conv2D(512, 3, activation = 'relu')(max_pool_3)
conv_8 = Conv2D(512, 3, activation = 'relu')(conv_7)
max_pool_4 = MaxPool2D(strides=2)(conv_8)
""" Begin Upsampling """
# Block 5
conv_9 = Conv2D(1024, 3, activation = 'relu')(max_pool_4)
conv_10 = Conv2D(1024, 3, activation = 'relu')(conv_9)
upsample_1 = UpSampling2D()(conv_10)
# Connect layers
merge_1 = Concatenate()([conv_8, upsample_1])
错误:
Exception has occurred: ValueError
A `Concatenate` layer requires inputs with matching shapes except for the concat axis. Got inputs shapes: [(32, 64, 64, 512), (32, 56, 56, 1024)]
请注意,这些值64与56架构正确对齐。
我不明白如何实现论文中的模型。如果我更改我的代码以接受形状图像(256, 256)并添加padding='same'到 Conv2D 图层,则代码将在大小对齐时起作用。
这似乎违背了作者在其实施中具体陈述的内容:
有人可以为我指出正确实施该模型的正确方向吗?



