AstarLight / Satellite-Segmentation

615 stars 233 forks source link

Unet训练完一个Epoch后出现错误 #47

Closed nehSgnaiL closed 5 years ago

nehSgnaiL commented 5 years ago

Could someone help ?

Error: ValueError: Error when checking target: expected conv2d_19 to have 4 dimensions, but got array with shape (5, 256, 256)

Summary : Layer (type) Output Shape Param # Connected to
input_1 (InputLayer) (None, 256, 256, 3) 0
conv2d_1 (Conv2D) (None, 256, 256, 32) 896 input_1[0][0]
conv2d_2 (Conv2D) (None, 256, 256, 32) 9248 conv2d_1[0][0]
max_pooling2d_1 (MaxPooling2D) (None, 128, 128, 32) 0 conv2d_2[0][0]
conv2d_3 (Conv2D) (None, 128, 128, 64) 18496 max_pooling2d_1[0][0]
conv2d_4 (Conv2D) (None, 128, 128, 64) 36928 conv2d_3[0][0]
max_pooling2d_2 (MaxPooling2D) (None, 64, 64, 64) 0 conv2d_4[0][0]
conv2d_5 (Conv2D) (None, 64, 64, 128) 73856 max_pooling2d_2[0][0]
conv2d_6 (Conv2D) (None, 64, 64, 128) 147584 conv2d_5[0][0]
max_pooling2d_3 (MaxPooling2D) (None, 32, 32, 128) 0 conv2d_6[0][0]
conv2d_7 (Conv2D) (None, 32, 32, 256) 295168 max_pooling2d_3[0][0]
conv2d_8 (Conv2D) (None, 32, 32, 256) 590080 conv2d_7[0][0]
max_pooling2d_4 (MaxPooling2D) (None, 16, 16, 256) 0 conv2d_8[0][0]
conv2d_9 (Conv2D) (None, 16, 16, 512) 1180160 max_pooling2d_4[0][0]
conv2d_10 (Conv2D) (None, 16, 16, 512) 2359808 conv2d_9[0][0]
up_sampling2d_1 (UpSampling2D) (None, 32, 32, 512) 0 conv2d_10[0][0]
concatenate_1 (Concatenate) (None, 32, 32, 768) 0 up_sampling2d_1[0][0]
conv2d_8[0][0]
conv2d_11 (Conv2D) (None, 32, 32, 256) 1769728 concatenate_1[0][0]
conv2d_12 (Conv2D) (None, 32, 32, 256) 590080 conv2d_11[0][0]
up_sampling2d_2 (UpSampling2D) (None, 64, 64, 256) 0 conv2d_12[0][0]
concatenate_2 (Concatenate) (None, 64, 64, 384) 0 up_sampling2d_2[0][0]
conv2d_6[0][0]
conv2d_13 (Conv2D) (None, 64, 64, 128) 442496 concatenate_2[0][0]
conv2d_14 (Conv2D) (None, 64, 64, 128) 147584 conv2d_13[0][0]
up_sampling2d_3 (UpSampling2D) (None, 128, 128, 128 0 conv2d_14[0][0]
concatenate_3 (Concatenate) (None, 128, 128, 192 0 up_sampling2d_3[0][0]
conv2d_4[0][0]
conv2d_15 (Conv2D) (None, 128, 128, 64) 110656 concatenate_3[0][0]
conv2d_16 (Conv2D) (None, 128, 128, 64) 36928 conv2d_15[0][0]
up_sampling2d_4 (UpSampling2D) (None, 256, 256, 64) 0 conv2d_16[0][0]
concatenate_4 (Concatenate) (None, 256, 256, 96) 0 up_sampling2d_4[0][0]
conv2d_2[0][0]
conv2d_17 (Conv2D) (None, 256, 256, 32) 27680 concatenate_4[0][0]
conv2d_18 (Conv2D) (None, 256, 256, 32) 9248 conv2d_17[0][0]
conv2d_19 (Conv2D) (None, 256, 256, 1) 33 conv2d_18[0][0]

Total params: 7,846,657 Trainable params: 7,846,657 Non-trainable params: 0

Code: `

def unet(): inputs = Input((img_w, img_h,3))

conv1 = Conv2D(32, (3, 3), activation="relu", padding="same")(inputs)
conv1 = Conv2D(32, (3, 3), activation="relu", padding="same")(conv1)
pool1 = MaxPooling2D(pool_size=(2, 2))(conv1)

conv2 = Conv2D(64, (3, 3), activation="relu", padding="same")(pool1)
conv2 = Conv2D(64, (3, 3), activation="relu", padding="same")(conv2)
pool2 = MaxPooling2D(pool_size=(2, 2))(conv2)

conv3 = Conv2D(128, (3, 3), activation="relu", padding="same")(pool2)
conv3 = Conv2D(128, (3, 3), activation="relu", padding="same")(conv3)
pool3 = MaxPooling2D(pool_size=(2, 2))(conv3)

conv4 = Conv2D(256, (3, 3), activation="relu", padding="same")(pool3)
conv4 = Conv2D(256, (3, 3), activation="relu", padding="same")(conv4)
pool4 = MaxPooling2D(pool_size=(2, 2))(conv4)

conv5 = Conv2D(512, (3, 3), activation="relu", padding="same")(pool4)
conv5 = Conv2D(512, (3, 3), activation="relu", padding="same")(conv5)

up6 = concatenate([UpSampling2D(size=(2, 2))(conv5), conv4], axis=3)
conv6 = Conv2D(256, (3, 3), activation="relu", padding="same")(up6)
conv6 = Conv2D(256, (3, 3), activation="relu", padding="same")(conv6)

up7 = concatenate([UpSampling2D(size=(2, 2))(conv6), conv3], axis=3)
conv7 = Conv2D(128, (3, 3), activation="relu", padding="same")(up7)
conv7 = Conv2D(128, (3, 3), activation="relu", padding="same")(conv7)

up8 = concatenate([UpSampling2D(size=(2, 2))(conv7), conv2], axis=3)
conv8 = Conv2D(64, (3, 3), activation="relu", padding="same")(up8)
conv8 = Conv2D(64, (3, 3), activation="relu", padding="same")(conv8)

up9 = concatenate([UpSampling2D(size=(2, 2))(conv8), conv1], axis=3)
conv9 = Conv2D(32, (3, 3), activation="relu", padding="same")(up9)
conv9 = Conv2D(32, (3, 3), activation="relu", padding="same")(conv9)

conv10 = Conv2D(n_label, (1, 1), activation="sigmoid")(conv9)
#conv10= Conv2D(n_label, (1, 1), activation="softmax")(conv9)

model = Model(inputs=inputs, outputs=conv10)
model.compile(optimizer='Adam', loss='binary_crossentropy', metrics=['accuracy'])
return model

`

nehSgnaiL commented 5 years ago

最后加了conv 1×1 就好了 👍