通过图切割使用单点类注释进行分段?

And*_*ing 12 python opencv image-processing computer-vision image-segmentation

我有一个我试图分割的图像数据集.对于数据集中的每个图像,专家随机选择单个像素/点,并添加类注释,以确定该像素属于哪个类.换句话说,每个图像将标记约60个点:

x,y,class

如何才能最好地利用这些单个像素注释的知识来执行良好的语义分割?

之前曾问过一个类似的问题,回应是使用图形切割:

用python进行图像分割的"硬"监督

理论上的图形切割似乎是一个很好的候选者,但是图形切割可以用单个像素注释工作吗?还有哪些方法可以使用多类数据集?如果是这样,是否有一个很好的库实现或一些好的资源呢?

如果没有,最适合这种情况的方法是什么?我玩了一些随机漫步,但结果分割的边缘定位很差(边缘非常圆).

您可以给予任何帮助,资源或示例非常感谢(最好使用python库,但我可以真正使用任何东西).

编辑:我的数据集有大约10个不同的类,每个图像平均可能有大约5个.注释者不能保证对每个宗教进行注释,但很少会错过一个(一些缺失区域或标记不正确的区域是可以容忍的).每个类对应于纹理均匀的区域,纹理相当恒定(想想天空,泥土,水,山).您无法从单个点获取纹理,但几乎所有区域都应该有多个注释点.

Sha*_*hai 6

一个有趣的问题.由于没有具体的例子可供使用,我只会概述我自己尝试过的算法方法.


方法#1:使用密集描述符

  • 计算密集图像描述符(例如,SIFT/HOG/Gabor甚至更好地使用预训练的深网像VGG).
  • 仅从注释位置的所有图像中获取描述符:您应该拥有带有类标签的~10K描述符.在该集合上训练一个简单的分类器(例如,SVM).
  • 返回图像:应用分类器并输出每个像素的日志概率属于每个类.这应该是图形切割的一元术语(也称为"数据术语").
  • 在本地修改一元术语以强制注释点属于正确的类.
  • 使用简单的成对术语(图像渐变或某些基于边缘的术语).
  • 应用Graph-Cut进行语义分割.

方法#2:训练你自己的深层语义分割模型

为了训练完全卷积模型进行分割,您不一定要为所有像素都有标签.您可能有"ignore_label":标有该标签的像素会被忽略,并且不会造成损失.
您的情况是"ignore_label"的极端情况 - 每张图像只有~60像素标记.然而,看到你可以用这种稀疏信息学到什么可能会很有趣.

想到它,每张图像的信息比标记的点数多:

我的数据集有大约10个不同的类,每个图像平均可能有大约5个

这意味着如果图像具有类1..5的标签,您知道它不包含类6..10(!)您可能在损失中有一个"正项",将极少数标记的像素分配给正确的类,并且否定术语"对于所有其他像素,如果它们被分配给图像中根本不存在的类,则会受到惩罚.

  • 根据注释器放置标记的方式,您可以稍微"扩大"点,以便为每个图像获得一些额外的标记像素.这不足以被视为"涂鸦",但它可能会为此处提出的方法添加一些额外的信息. (2认同)
  • 这很好,我正在寻求方法#2.与@ user2469775建议的类似,我使用超像素进行过度分析,然后使用注释标记某些超像素,从而为我提供更多数据. (2认同)