在训练用于语义分割的深度学习模型时,处理背景像素 类 (ignore_label) 的最佳方法是什么?

What is the best way to handle the background pixel classes (ignore_label), when training deep learning models for semantic segmentation?

我正在尝试在 cityscapes 数据集上训练一个 UNET 模型,它有 20 'useful' 语义 classes 和一堆可以忽略的背景 classes(例如天空、自我车辆、山脉、路灯)。为了训练模型忽略这些背景像素,我使用了以下互联网上流行的解决方案:

  1. 我为所有人分配了一个公共 ignore_label(例如:ignore_label=255) 属于忽略 classes
  2. 的像素
  3. 使用每个像素预测的 cross_entropy 损失训练模型
  4. cross_entropy损失中提供ignore_label参数,因此 计算的损失忽略了不必要的 classes.
  5. 的像素

但是这种方法有一个问题。训练完成后,模型最终 class 将这些背景像素确认为属于 20 个 class 之一。这是预期的,因为在损失中我们不会因为模型对背景像素所做的任何 class 化而对其进行惩罚。

因此,第二个明显的解决方案是对所有背景像素使用额外的 class。因此它是城市景观中的第 21 class。然而,在这里我担心我会 'waste' 我的模型的能力,通过教它 class 证明这个额外的不必要的 class。

处理背景像素的最准确方法是什么 classes ?

也许你可以尝试使用“Dice loss + Inverted Dice loss”,它同时考虑了前景和背景像素

绝对是第二种解决方案更好。这是最好的解决方案,背景 class 肯定是附加的 class 但不是不必要的,因为这样可以清楚地区分您要检测的 class 和背景。

事实上,这是分割中推荐的标准程序,将 class 分配给背景,其中背景当然代表除您的特定 class 之外的所有其他内容。