使用正确的损失函数来对抗类别失衡:IoU,Dice还是2类Dice?

时间:2019-08-26 19:37:09

标签: tensorflow keras deep-learning loss-function imbalanced-data

我目前正在攻读学士学位论文,并且在尝试理解关于阶级失衡以及阶级失衡本身的损失函数方面的差异时遇到了一些困难。

我正在研究带有U-Net(https://arxiv.org/pdf/1505.04597.pdf)变体的细分问题。

我的数据集包含11个类别,其中一个类别的频率远远低于其他大多数类别。我网络的输入是输入rgb图像的形状为(700,512,512,3)的np阵列,而地面真值标签的形状为(700,512,512,11)的np阵列。地面实况的11个通道中的每个通道都是二进制编码的(对于存在的特定类,为1个,对于缺少的类,为0个)。因此,每个类别的每个图像只有一个遮罩。在大多数蒙版中,1的数量远小于0的数量。

首先,关于班级失衡:

我还没有找到“阶级失衡”一词的明确定义。我认为可能有以下三种解释:

  1. 在所有700张输入图像中,一类的频率远远低于大多数其他图像。
  2. 在一幅图像的一个蒙版中,0的数量远大于1的数量。
  3. 在所有输入图像中,对于一个类别,0(平均)数远高于1s(数字)

对于每种解释,我都能想象出问题。在谈论阶级失衡时,通常指的是哪一个? 那将如何导致问题?

现在损失功能。我想了解的损失函数是:

在我的研究中,我读到当面对不平衡的数据集时,IoU损失存在问题。我还读到,在这种情况下,Dice Loss的表现更好,但是我找不到解释。它只是被打折为“常识”。我认为2类骰子损失会更好,因为它从两个角度都考虑了二进制问题,从而在某种程度上补偿了类的不平衡。

我主要基于我所行使的示例(见下文)的假设是:

使用IoU,与假阴性相比,假阳性预测的误差较小。但是,对于像素少的类别,接收到误报预测的可能性更高,因此网络可能会解决误报问题。骰子损失对误报和误报的惩罚小于IoU损失,对于骰子损失,误报错误和误报错误之间的差异较小。这将导致性能提高,因为概率的不平衡得到了轻微补偿。对于2类骰子损失,从两个角度都对所有错误进行了惩罚,从而导致假阴性和假阳性错误项之间的差异较小。

这是真的吗?我哪里错了?在这一点上,我真的很困惑,不胜感激。有关我的问题的一些消息来源也有很大帮助。

最后一个问题:关于阶级失衡,哪种损失函数最适合我的情况?

谢谢!

Example with 9 pixels, two 1s, seven 0s:

         all correct | 1 false positive | 1 false negative

IoU     |     1      |        0.33      |      0.5

Dice    |     1      |        0.2       |      0.33

Dice2   |     1      |        0.14      |      0.2

0 个答案:

没有答案