Tensorflow 用正确的损失功能对抗等级失衡:借条、骰子还是2级骰子?

Tensorflow 用正确的损失功能对抗等级失衡:借条、骰子还是2级骰子?,tensorflow,keras,deep-learning,loss-function,imbalanced-data,Tensorflow,Keras,Deep Learning,Loss Function,Imbalanced Data,我目前正在写我的学士学位论文,在试图理解关于阶级不平衡的损失函数的差异以及阶级不平衡本身时遇到了一些困难 我正在研究一个U-Net()变体的分段问题 我的数据集包含11个类,其中一个类的频率远远低于大多数其他类。我的网络的输入是一个np数组,其中形状(700512512,3)用于输入rgb图像,形状(700512512,11)用于地面真相标签。基本真相的11个通道中的每一个都是二进制编码的(1表示存在的特定类别,0表示缺少该类别)。因此,每个类每个图像有一个掩码。在大多数掩模中,1的数量远小于0

我目前正在写我的学士学位论文,在试图理解关于阶级不平衡的损失函数的差异以及阶级不平衡本身时遇到了一些困难

我正在研究一个U-Net()变体的分段问题

我的数据集包含11个类,其中一个类的频率远远低于大多数其他类。我的网络的输入是一个np数组,其中形状(700512512,3)用于输入rgb图像,形状(700512512,11)用于地面真相标签。基本真相的11个通道中的每一个都是二进制编码的(1表示存在的特定类别,0表示缺少该类别)。因此,每个类每个图像有一个掩码。在大多数掩模中,1的数量远小于0的数量

首先,关于阶级不平衡:

我还没有找到“阶级不平衡”一词的明确定义。在我看来,有三种解释是可能的:

  • 在所有700个输入图像中,一个类的频率远远低于大多数其他类
  • 在一幅图像的一个遮罩中,0的数量远远高于1
  • 在所有输入图像中,对于一个类,0的(平均)数量远远高于1
  • 对于每一种解释,我都能想象出问题。在谈论阶级不平衡时,通常指哪一个? 这会导致什么问题呢

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

    • IoU近似损失()
    • 骰子损失()
    • 二级骰子损失()
    在我的研究中,我读到当面对不平衡的数据集时,IoU丢失会有问题。我也读过骰子损失在这种情况下表现更好,但我找不到解释。它只是被打了个“常识”的折扣。我假设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
    

    关于损失函数,请看这里的讨论,对于多类图像分割,为unet计算骰子损失。关于损失函数,请看这里的讨论,对于多类图像分割,为unet计算骰子损失。