单个 class 中没有标签的语义分割

Semantic segmentation without labels in a single class

我对语义分割有点陌生。我正在尝试对有缺陷的图像进行分割。 我使用注释工具对缺陷图像进行了注释,并为每个图像创建了遮罩。我想预测图像是否有缺陷以及它的确切位置。但我的问题是我的缺陷在所有图像中看起来都不一样。示例:钢材缺陷 - 钢材破损、表面腐蚀等。我只是想对图像是否存在缺陷以及缺陷所在的位置进行分类。那么用这些所有类型都被视为缺陷的神经网络来训练神经网络是错误的吗?

我想对缺陷和无缺陷进行二进制分割。如果我不正确,我该如何对缺陷和非缺陷图像进行分割?

你首先要明确你的问题和目标:

  • 如果您只想检测图像是否有缺陷,这是一个二元分类问题,您会影响每个图像的标签(0 或 1)。
  • 如果您想近似定位缺陷(如边界框),这是一个 对象检测 问题,可以用一个或多个 类 来实现。
  • 如果你想精确定位缺陷(例如为了执行措施)最好是语义分割实例分割 .
  • 如果要对缺陷进行分类,则需要为每个要分类的缺陷创建 类。

没有神奇的解决方案,因为它取决于您的项目目标。我可以给你以下建议,因为我在类似的项目上实习过:

  • 仔细查看您的数据,如果您有数千张图像,则创建语义分割数据集需要很长时间。使用 data augmentation techniques.
  • 变得更聪明
  • 如果要对缺陷进行分类,请确保每种类型都有足够的缺陷来训练您的网络。如果您的网络每个时期只能看到一种缺陷类型,它就无法学习检测它。
  • 确保您的网络可以检测到您提供的缺陷(例如,不是两个像素的划痕或对齐缺陷)。

执行语义分割以仅知道是否存在缺陷似乎有点矫枉过正,因为这是一个漫长而复杂的过程(重建图像、Unet 中中间图像的记忆、大量计算)。如果你真的想应用这个方法,你可以创建一个阈值来检测检测到的像素数量是否允许将图像分类为'presenting a defect'。

一个 class 应该足以满足您的用例。但是,如果您希望能够区分不同类型的缺陷,您可以尝试为该 class 创建属性。所以 class 是像素是否有缺陷,属性是破损、像素被侵蚀等。然后你可以训练一个模型来检测语义 class 上的裂缝和另一个一个来识别它是哪种类型的缺陷。

确保使用支持创建属性的注释工具。就个人而言,我使用 hasty.ai 因为他们的自动化助手很棒!不过我想大多数工具应该都能做到。