【问题标题】:Post-process multi-class predictions for image segmentation?用于图像分割的后处理多类预测?
【发布时间】:2019-01-24 15:50:03
【问题描述】:

我的 FCN 被训练来检测 10 个不同的类别,并产生500x500x10 的输出,每个最终维度都是不同类别的预测概率。

通常,我看到使用统一阈值(例如0.5)来二值化概率矩阵。然而,在我的情况下,这并没有完全削减它,因为当阈值为0.3 时,某些类的 IoU 会增加,而对于其他类,它是0.8

因此,我不必为每个类别任意选择阈值,而是使用概率更高的方法来最终确定阈值。我曾想过使用 CRF,但这也需要已经完成阈值处理。关于如何进行的任何想法?

示例:考虑一张有 5 种不同鸟类的森林图像。现在我试图输出一个分割了森林和五只鸟的图像,6 个类别,每个类别都有一个单独的标签。网络输出 6 个混淆矩阵,指示像素属于特定类别的置信度。现在,像素的正确答案并不总是具有最高置信度值的类别。因此,一刀切的方法或最大值方法将不起作用。

【问题讨论】:

  • 您是否正在寻找 "Otsu Thresholding",您可以在其中计算分离两个类的最佳阈值,以使它们的组合分布(类内方差)最小... en.wikipedia.org/wiki/Otsu%27s_method
  • 有 10 个不同的类,但最终输出的通道数是 3(500X500height X width)。假设每个频道代表每个班级,那不是500X500X10吗?
  • 是的,你是对的,我修好了。

标签: image-processing machine-learning neural-network computer-vision


【解决方案1】:

CRF 后处理方法

您无需设置阈值即可使用 CRF。我不熟悉任何用于 CRF 的 python 库,但原则上,您需要定义的是:

  1. 每个节点的 10 个类别的概率分布 (像素),这只是网络的输出。
  2. 成对势:10*10 矩阵,其中元素 Aij 表示一个像素属于 i 类而另一个像素属于 j 类的配置的“强度”。如果您将势能设置为在对角线中具有值 alpha (alpha >> 1) 而在其他位置具有值 1,则 alpha 是为您提供预测一致性的正则化力(如果像素 X 属于 Y 类,则相邻像素X 更有可能属于同一类)。

这只是如何定义 CRF 的一个示例。

端到端神经网络方法

为您的网络添加一个损失,该损失将惩罚具有不同类别邻居的像素。请注意,对于新的正则化损失的权重,您仍然会得到一个可调参数。

【讨论】:

  • 但我不明白如何使用 otsu 将 500x500x10 减少到 500x500x1 矩阵。如果我弄错了,请纠正我,但是 otsu 将图像分成两组,但是如果一个像素可以属于 10 个不同的组,并且具有最高置信度值的类并不总是正确的,那么 otsu 将无法工作。我已经用一个例子更新了问题
  • 你是对的 - Otsu 是用于二进制分割的,这就是为什么我建议将其视为 10 个不同的二进制分割任务。但那是由于误解了你的问题。这个例子澄清了一切。将尝试相应地更新我的答案。
猜你喜欢
  • 2017-04-12
  • 1970-01-01
  • 2019-09-26
  • 2021-04-15
  • 2021-03-20
  • 1970-01-01
  • 1970-01-01
  • 2021-07-23
  • 2020-04-08
相关资源
最近更新 更多