【问题标题】:Binary semantic Segmentation with Deeplabv3+ keras (designed for multiclass semantic segmentation)使用 Deeplabv3+ keras 进行二元语义分割(专为多类语义分割而设计)
【发布时间】:2021-11-19 10:20:17
【问题描述】:

我是 Keras 的新手,如果这个问题很愚蠢,我很抱歉。

我在这里https://keras.io/examples/vision/deeplabv3_plus/ 找到了用于执行多类语义分割的 deeplabv3+ 模型。 我需要将此代码调整到另一个目的,因为我需要对医学图像执行二进制语义分割。 换成是对的吗

NUM_CLASSES = 20

到 NUM_CLASSES = 1 个?

如果我设置 NUM_CLASSES = 2,我会收到关于 logits 和标签不匹配的错误。

关于损失函数, 代码行是 loss = keras.losses.SparseCategoricalCrossentropy(from_logits=True)

我想改成

损失 = keras.losses.BinaryCrossentropy(from_logits=True)

但损失变为负数。 我应该添加其他内容吗?

谢谢!

编辑:用于多类语义分割的 deeplabv3+ 在最后一层使用 keras.activations.linear(x)。 出于我的目的,我应该使用 softmax 而不是 keras.activations.linear(x) 和 BinaryCrossEntropy 并输入 from_logits=False?

【问题讨论】:

    标签: python tensorflow keras image-segmentation


    【解决方案1】:

    我解决了这个问题,如果有人需要答案: “...对于二进制分割,最好保持 NUM_CLASS = 1,因为您正在尝试预测代表单个类别的二进制掩码。如果您希望预测单热编码分割掩码(在当前上下文,设置 NUM_CLASS = 2),然后才使用 softmax 激活和稀疏分类交叉熵损失,否则使用 sigmoid 激活和二元交叉熵。"

    https://github.com/keras-team/keras-io/issues/648

    【讨论】:

      猜你喜欢
      • 2019-01-06
      • 1970-01-01
      • 2019-12-20
      • 2019-07-15
      • 2018-01-12
      • 2021-04-15
      • 2016-09-02
      • 2020-10-09
      • 2018-08-29
      相关资源
      最近更新 更多