【问题标题】:Sort out bad pictures of a dataset (k-means, clustering, sklearn) [closed]整理出数据集的不良图片(k-means,聚类,sklearn)[关闭]
【发布时间】:2013-09-14 07:09:08
【问题描述】:

我正在测试图像检索中的一些东西,并且我正在考虑如何整理数据集的不良图片。例如,只有房屋的照片,而在两者之间有一张人和一些汽车的照片。所以最后我只想得到房子。 目前我的方法如下:

  • 计算所有图片的描述符 (Sift)
  • 使用 k-means 聚类所有描述符
  • 通过计算聚类中心与图片描述符之间的欧几里德距离来创建图片的直方图
  • 再次聚类直方图。

此时我得到了第一类(这不是很好)。现在我的想法是用len(center) > 1将所有聚集到一个中心的照片一次又一次地聚集在一起。这样的结果是,在一个中心的特定图片将被整理出来。也许它足以再次将结果拟合到相同的 k-means 而无需再次聚类?!

结果并不令人满意,所以也许有人有一个好主意。

对于聚类等。我正在使用 scikit learn 的 k-means。

【问题讨论】:

  • 出于好奇,您的语料库中有多少张图片,您为每张图片提取了多少描述符,以及您为描述符的聚类计算了多少中心(视觉词词汇的大小)?
  • “数据集”的大小在 100 - 1000 之间变化。目前该项目最多有 150 张图片,每张图片在 1000 到 4500 desc 之间 => 大约 250 000 desc -> k-的子采样表示为 25 000。K 设置为 sqrt(n/2),其中 n = 数据点(第一步)=> K 介于 100 和 300 之间),然后创建直方图和聚类直方图。 (第二步)大约有 6 到 10 个中心。我会尝试你的答案并发布它是如何工作的......我正在考虑使用 scipy 的“scipy.cluster.hierarchy”。
  • 您可能需要更多数据。

标签: python computer-vision cluster-analysis scikit-learn k-means


【解决方案1】:

我没有解决您的问题的方法,但这里是在最终聚类之前执行的健全性检查,以检查您提取的特征类型是否适合您的问题:

  • 提取数据集中所有图片的直方图特征
  • 使用直方图特征计算数据集中所有图片的成对距离(可以使用sklearn.metrics.pairwise_distance

np.argsort raveled 距离矩阵,根据您的特征找到最接近的 20 对不同图片的索引(您必须过滤掉距离矩阵的零值对角线元素)并执行相同的操作以提取根据您的直方图特征,前 20 对最昂贵的图片。

可视化(例如使用plt.imshow)最接近的配对的图片,并检查它们是否都是您期望非常相似的配对。

可视化最高票价对的图片并检查它们是否都非常不同。

如果这两项检查中的一项失败,则意味着 SIFT 词袋直方图不适合您的任务。也许您需要提取其他类型的特征(例如 HoG 特征)或重新组织提取 SIFT 描述符簇的方式,可能使用金字塔池化结构来提取各种尺度下图片的全局布局信息。

【讨论】:

  • 好吧,我已经尝试过了,并根据 k-means 获得了结果。有时它会失败,有时它很好......取决于随机集群。我从 VLFeat 得到了描述,所以改变一些东西会有点困难。我会试试sklearn.cluster.DBSCAN
【解决方案2】:

K-means 对噪声不是很健壮;而你的“坏照片”可能也可以这样认为。此外,k-means 对 sparse 数据不太适用;因为手段不会稀疏。

您可能想尝试其他更现代的聚类算法,以更好地处理这种情况。

【讨论】:

  • 你认为是 UPGMC 还是 WPGMC ?
  • 这些是层次聚类的变体,大约与 k-means 一样古老。不,我在考虑 DBSCAN、OPTICS 和“刚刚” 15 年而不是 50 年的此类算法。以及本世纪发布的任何内容。
猜你喜欢
  • 2018-04-22
  • 2013-08-08
  • 2013-02-07
  • 2020-09-10
  • 2013-04-28
  • 2018-09-30
  • 2015-04-11
  • 2012-11-08
  • 2020-10-26
相关资源
最近更新 更多