我正在尝试将图像分类为 100 多个类别,不同大小范围从 300 到 4000(平均大小为 1500,标准为 600)。我正在使用一个非常标准的 CNN,其中最后一层输出一个长度为类的向量,并使用 pytorch 的损失函数 CrossEntropyLoss。
我试着用 对于改进未加权版本的交叉熵损失,幅度不大。
我还考虑过复制图像,以使所有类最终都与大类的大小相同。
有没有处理这种不平衡的标准方法?
我正在尝试将图像分类为 100 多个类别,不同大小范围从 300 到 4000(平均大小为 1500,标准为 600)。我正在使用一个非常标准的 CNN,其中最后一层输出一个长度为类的向量,并使用 pytorch 的损失函数 CrossEntropyLoss。
我试着用 对于改进未加权版本的交叉熵损失,幅度不大。
我还考虑过复制图像,以使所有类最终都与大类的大小相同。
有没有处理这种不平衡的标准方法?
如果您只是在寻找替代损失函数:
Imagenet 上显示了 Focal Loss 确实可以帮助解决这个问题。
焦点损失为交叉熵损失增加了一个调节因子,确保负/多数类别/简单决策不会压倒由于少数/困难类别造成的损失。
我会考虑使用它,它似乎真的很有希望。
焦点损失论文链接: https ://arxiv.org/pdf/1708.02002.pdf
要处理类不平衡,什么都不做——使用普通的交叉熵损失,它可以处理类不平衡。确保训练集中每个类都有足够的实例,否则神经网络可能无法学习:神经网络通常需要大量数据。假设您关心全局准确性(而不是每个类别的准确性的平均值,例如),我不会为加权交叉熵损失或复制图像而烦恼。
你的训练听起来很小。为了解决这个问题,您可以尝试从现有的预训练模型开始并微调最后几层。还使用图像增强。