我试图使用Keras中的UNet体系结构分割标记对象(核),并在更改为自己的数据集之前使用Kaggle DSB18数据集。为了改进两个封闭对象之间的分离,我生成了一个加权映射(jaidevd的实现)。因此,我最终得到一个输入标签,如下所示:

背景为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 我所有的预测输出要么是空白的,要么是突出显示的边框,如下图所示。

有没有人看到我的代码或架构有什么问题,或者有另一个想法来分离关闭对象?作为我的第一个项目,我很难弄清楚该注意什么。
非常感谢。BBQuercus
发布于 2019-10-17 07:11:31
我不确定,但是"outputs = Conv2D(12,(1,1),activation='softmax') (c9)“不是正确的方式。结论: 1类= 0.1,2类= 0.001,3类= 0.3 ->求和:1,你的结果是有意义的。软件告诉你每堂课的概率。
我想你可以把它改成“乙状结肠”,跳起来会有帮助。
诚挚的问候
更新:现在我遇到了同样的问题。
https://stackoverflow.com/questions/58119099
复制相似问题