首页 > 解决方案 > DICE 损失太低,但预测和标签之间没有重叠

问题描述

我正在尝试使用我在这里找到的 Unet https://github.com/zhixuhao/unet实现对 MRI 图像横截面区域的骨骼分割。标签是一个二进制 png 图像,我打算将其与我的预测进行比较。对于帧,我为我的 DICOM MRI 文件编写了自己的数据加载器

我在 keras 中使用以下骰子损失

def DiceLoss(targets, inputs, smooth=1e-6):

#flatten label and prediction tensors
inputs = K.flatten(inputs)
targets = K.flatten(targets)

intersection = K.sum(K.dot(targets, inputs))
dice = (2*intersection + smooth) / (K.sum(targets) + K.sum(inputs) + smooth)
return 1 - dice

我在 kaggle https://www.kaggle.com/bigironsphere/loss-function-library-keras-pytorch 中看到了它,以及我在那里发现的 Keras 中的其他类似实现。

但是即使预测和标签之间没有重叠,DICE 损失总是太小(10^-4)。为什么是这样?我应该先将我的预测转换为二进制掩码吗?如果是这样,我怎么能在 keras 中做到这一点?我尝试targets通过执行 targets.numpy() 转换为 numpy 数组,然后应用阈值,但它会引发“张量没有属性 numpy”错误。你还有别的想法吗?

谢谢你

标签: pythontensorflowkerasdiceloss

解决方案


推荐阅读