Многоклассовая сегментация UNet дает неожиданный вывод - PullRequest
0 голосов
/ 26 сентября 2019

Я пытаюсь сегментировать помеченные объекты (ядра), используя архитектуру UNet в Керасе, и использую набор данных Kaggle DSB18, прежде чем перейти к собственному.Чтобы улучшить разделение между двумя близкими объектами, я генерирую взвешенную карту (реализация jaidevd).Поэтому я получаю метку ввода, которая выглядит следующим образом:

enter image description here

Фон равен 0, 'реальные положительные значения' равны 1, пробелы между объектами равны 2-11, в зависимости от расстояния.Я пытаюсь использовать архитектуру U-Net следующим образом:

# Inputs
X_train # list of all images, shaped (256, 256, 3)
Y_train # list of weighted mask, as shown above
Y_train = to_categorical(Y_train, num_classes=None)

# Dice coefficient
def dice_coef(y_true, y_pred):
    y_true_f = K.flatten(y_true)
    y_pred_f = K.flatten(y_pred)
    intersection = K.sum(y_true_f * y_pred_f)
    return (2. * intersection + 1.) / (K.sum(y_true_f) + K.sum(y_pred_f) + 1.)

# Define model
inputs = Input((256, 256, 3))
s = Lambda(lambda x: x / 255) (inputs)
# ... convolutional etc. layers
outputs = Conv2D(12, (1, 1), activation='softmax') (c9)
model = Model(inputs=[inputs], outputs=[outputs])
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=[dice_coef])

# Train model
ModelCheckpoint('model.hf', verbose=1, save_best_only=True)
results = model.fit(X_train, Y_train, validation_split=0.2, batch_size=10, epochs=15, callbacks=[checkpointer])

# Test
test_image = # test image of shape (256,256,3)
test_image = np.expand_dims(test_image, axis=0)
prediction = model.predict(test_image)
print(prediction.shape)
>>> (1, 256, 256, 12)
imshow(np.sum(prediction[0,:,:,1:], axis=-1)) # or argmax or a single layer 

Все мои прогнозируемые результаты либо пустые, либо выделены границы, как показано здесь.enter image description here

Кто-нибудь видит что-то не так с моим кодом или архитектурой или у кого-то есть идея разделить закрываемые объекты?Как мой первый проект, мне трудно понять, на что обращать внимание.

Гигантское спасибо заранее.BBQuercus

...