【问题标题】:Keras: void labeled pixels in image segmentationKeras:图像分割中的无效标记像素
【发布时间】:2018-05-12 03:38:40
【问题描述】:

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

但是,对于一些图像,我不确定某些像素属于哪一类,因此我想将这些像素标记为 void,这样网络权重就不会根据这些像素的预测进行更新。 Keras中是否有处理空标签的方法?

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

【问题讨论】:

  • > 该功能似乎不是为此目的而设计的。如果它有效,它就有效。我会使用它,但请确保您清楚地评论它。
  • 对不起。我不够清楚。我无法使用 sample_weights 功能进行图像分割。而且我认为这是不可能的。我已经编辑了文本。

标签: python keras image-segmentation


【解决方案1】:

所以事实证明,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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-19
    • 2019-09-24
    • 2018-09-23
    • 2018-02-16
    • 2019-04-24
    • 2017-07-24
    • 2018-05-18
    • 2017-12-24
    相关资源
    最近更新 更多