【问题标题】:Binary Cross Entropy Loss for Image Segmentation图像分割的二元交叉熵损失
【发布时间】:2018-09-12 16:00:29
【问题描述】:

我在 Keras 中使用 CNN (U-Net) 来分割 8 位图像以获得二进制掩码。尽管达到 0.9999 的准确度,但我仍然得到一些介于 0 和 255 之间的值,但希望完全删除这些值,使其只有 0 或 255。到目前为止,我一直在使用二元交叉熵损失函数,结合 sigmoid激活函数最后一个卷积层。有人可以告诉我是否有其他损失函数可以解决这个问题。

【问题讨论】:

  • 你能解释一下你是净多一点吗?你的输出的形状是什么?你的标签是什么?您的二进制掩码是否有标签,这似乎不是您当前的输出?

标签: deep-learning keras image-segmentation unet


【解决方案1】:

最好使用 0 - 1 之间的值。

NN 很难在 0-255 获得好的结果,这样二元交叉熵会更好地工作

【讨论】:

  • 我对这一点很困惑,因为他说他已经使用了 sigmoid 激活函数,它产生了 0 到 1 之间的输出
  • 您的输出将在 0 - 1 之间,但您的输入将保持在 0 - 255 并且它在图像识别和此类领域中存在很多问题。如果没有标准化,您将在节点处获得很大的价值,并且只有在最后它会变成 0 或 1,因此模型很难产生真正的结果
  • 是的,但是好像输出在0到255之间,如果他用sigmoid就没意义了。你是对的归一化(像等频分箱可能会更好)
  • 我的输入图像像素值确实是 0 表示背景或 255 表示感兴趣的信号,但我在加载训练数据之前将所有像素值除以 255。
【解决方案2】:

您可以设置阈值以仅获取您想要的两个值。例如:

y = model.predict(input_image) # your result image
y = 255 * (y > 128)

【讨论】:

  • 我正在考虑这个,但只是想知道是否还有其他选择。谢谢!
  • 您可以使用 dice loss,它产生的二进制图像或阈值几乎与本工作中观察到的一样 (arxiv.org/pdf/1608.04117.pdf)
猜你喜欢
  • 2020-03-03
  • 2017-06-26
  • 2021-11-25
  • 2020-12-08
  • 2019-07-13
  • 2020-03-16
  • 2020-01-03
  • 2021-08-25
  • 2018-09-03
相关资源
最近更新 更多