Keras:图像分割中的无效标记像素

Keras: void labeled pixels in image segmentation

我目前有一个 keras 模型,该模型 class 使用完全卷积网络将每个像素确定为属于对象或背景。因为我只有 2 classes(对象或背景),所以我在输出层使用了 sigmoid 激活和 binary_crossentropy 损失。

但是,对于一些图像,我不确定 class 一些像素属于什么,因此我想将这些像素标记为无效,这样网络权重就不会根据预测更新这些像素。 Keras有没有处理空标签的方法?

通常这样做的一种方法是为每个像素指定损失权重,并将空像素的权重设置为 0。(例如, 用于张量流)。我调查了在 Keras 中使用 sample_weights,但我无法让它工作,因为它似乎不是为像素加权而设计的。

原来sample_weight毕竟可以用。由于样本权重只能有 2 个维度(batch_size,没有预测),诀窍是将模型的输出重塑为平坦的。

我的模型定义的最后两行:

model.add(Reshape((-1, 1)))
model.compile(loss='binary_crossentropy', optimizer='adam', sample_weight_mode='temporal', metrics=['binary_accuracy'])

我使用 Reshape((-1,1)) 因为我的输入图像具有可变尺寸。当我训练模型时,我还必须使用扁平标签和 sample_weight.

我找到了答案here