未标记船舶图像的聚类

数据挖掘 机器学习 张量流 聚类 图像分类 图像预处理
2022-02-28 12:18:31

我想从由 4000 张照片(3072*2048)组成的数据集中创建一个船舶检测分类器。

但是我目前拥有的数据集没有标记 ,因此我可以将其提供给cnn。所以我想将此数据集聚类到 2 个标签(或 2 个目录)shipno_ship。我尝试运行 k-means,但结果令人失望。还有其他更实用的方法吗?

3个回答

除了提供的答案之外,您还可以:

1.) 联合训练一个 CNN(或自动编码器)并在您的数据上进行聚类。DCNkmeansNet,..)

2.) 使用对数据的自我监督预训练 CNN。(查看大量的自我监督文献,例如这项工作)。

3.) 使用交替方案在由聚类算法提供的软标签上训练 CNN 分类器,例如 k-means(例如,这项工作)。

这是你可以尝试的。

  1. 找到一个能够检测船舶的预训练网络(一个例子可以是在 ImageNet 上训练的网络)。您只需要图层之前Softmax()或图层之后的Flatten()图层
  2. 如果您要检测多种类型的船舶,我会将船舶和非船舶的多个图像传递到网络中。对于每个船舶/非船舶图像,您将获得一维特征嵌入。然后,您可以对您选择的所有船舶和非船舶图像的嵌入进行平均。这告诉你的是,有/没有船的图片应该有一个看起来像这样的嵌入。
  3. 最后,通过网络传递未标记数据集中的每张图像,并使用距离度量来查看它是否更接近表示船舶的嵌入或表示非船舶的嵌入。您可以使用不同的指标,如下所示:https ://dataaspirant.com/2015/04/11/five-most-popular-similarity-measures-implementation-in-python/

首先,请记住这一点:

毕竟,如果没有任何标签很容易做到这一点,那么,首先需要标签有什么意义呢?

我可以看到两个选项:

  1. 使用预训练的图像分类器来表示您的图像

正如文森特·杨 ( Vincent Young ) 所建议的,您可以找到经过类似检测任务训练的预训练网络。ModelZoo是为您正在使用的框架查找预训练网络的好地方。

  1. 尝试mean-shift而不是K-Means

K-Means 是直截了当的,但有一些流程。它不能很好地处理大小不均匀的集群,并且由于欧几里得距离,它会学习创建圆形集群。

Mean-shift 可以处理任意特征空间并且可以使用任意核函数。您可能最终不会得到 2 个集群,但无论如何您都可以找到有用的集群。关于这一点,如果您尝试使用超过 2 个集群和 K-Means,您可能会发现一些集群是“的”(包含单个类),而有些可能是混合的。这些纯集群可以是一个好的开始。

我在我的网站上写了一章关于 Mean Shift 的章节,包括其他资源,如果你想阅读的话。

在此处输入图像描述