首页 > 解决方案 > 用正确的损失函数对抗类别不平衡:IoU、Dice 还是 2-class Dice?

问题描述

我目前正在写我的学士论文,并在试图了解损失函数在类不平衡和类不平衡本身方面的差异时遇到了一些困难。

我正在使用 U-Net ( https://arxiv.org/pdf/1505.04597.pdf ) 的变体解决分割问题。

我的数据集包含 11 个类,其中一个类的频率远低于大多数其他类。我的网络的输入是一个 np 数组,形状为 (700,512,512,3),用于输入 rgb 图像,形状为 (700,512,512,11),用于地面实况标签。地面实况的 11 个通道中的每一个都经过二进制编码(1 表示存在特定类别,0 表示不存在)。因此,每个图像的每个类都有一个掩码。在大多数掩码中,1 的数量远远少于 0 的数量。

首先关于类不平衡:

我还没有找到术语“类不平衡”的任何明确定义。在我看来,三种解释是可能的:

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

对于这些解释中的每一个,我都可以想象出问题。在谈论阶级不平衡时,通常指的是哪一个?那将如何导致问题?

现在损失函数。我试图理解的损失函数是:

在我的研究中,我读到 IoU Loss 在面对不平衡的数据集时会出现问题。我也读过 Dice Loss 在这种情况下表现更好,但我找不到解释。它只是被贬低为“常识”。我假设 2-class Dice loss 会更好,因为它从两个角度考虑二元问题,在一定程度上补偿了类不平衡。

我的假设主要基于我练习的一个例子(见下文)是:

使用 IoU,与假阴性相比,假阳性预测的误差更小。但是,对于具有少量像素的类别,接收到误报预测的概率更高,因此网络可能会接受误报。Dice Loss 对假阴性和假阳性的惩罚比 IoU Loss 少,并且假阳性错误和假阴性错误之间的差异对于 Dice loss 更小。这应该会提高性能,因为概率的不平衡得到了轻微的补偿。使用 2-class Dice Loss,所有错误都会从两个角度受到惩罚,从而减少假阴性和假阳性错误项之间的差异。

这是真的吗?我哪里错了?在这一点上,我真的很困惑,并希望有任何迹象。关于我的问题的一些消息来源也会有很大帮助。

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

提前致谢!

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

标签: tensorflowkerasdeep-learningloss-functionimbalanced-data

解决方案


推荐阅读