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

Posted

技术标签:

【中文标题】在为语义分割训练深度学习模型时,处理背景像素类 (ignore_label) 的最佳方法是啥?【英文标题】:What is the best way to handle the background pixel classes (ignore_label), when training deep learning models for semantic segmentation?在为语义分割训练深度学习模型时,处理背景像素类 (ignore_label) 的最佳方法是什么? 【发布时间】:2020-03-23 18:40:40 【问题描述】:

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

    我为所有人分配一个共同的ignore_label(例如:ignore_label=255) 属于忽略类的像素 使用cross_entropy 损失对每个像素预测进行训练 在cross_entropy损失中提供ignore_label参数,因此 计算的损失会忽略具有不必要类别的像素。

但是这种方法有一个问题。一旦经过训练,模型最终会将这些背景像素分类为属于 20 个类别之一。这是可以预期的,因为我们不会因为模型对背景像素所做的任何分类而惩罚模型。

因此,第二个明显的解决方案是为所有背景像素使用一个额外的类。因此,它是城市景观中的第 21 类。但是,在这里我担心我会“浪费”模型的能力,因为我会教它对这个额外的不必要的类进行分类。

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于在为语义分割训练深度学习模型时,处理背景像素类 (ignore_label) 的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

基于深度学习的图像语义分割方法综述

《基于深度学习的图像语义分割方法综述》阅读理解

Keras深度学习实战(18)——语义分割详解

MATLAB深度学习采用 Deeplab v3+ 实现全景分割

MATLAB深度学习采用 Deeplab v3+ 实现全景分割

cs231n---语义分割 物体定位 物体检测