根据图像的相似性对图像进行聚类

Clustering images based on their similarity

我在不知道聚类数量的情况下面临基于相似性的图像聚类问题。理想情况下,我想实现类似于此的东西 http://cs231n.github.io/assets/cnnvis/tsne.jpeg (http://cs231n.github.io/understanding-cnn/ 此图片是卷积神经网络的结果,它代表它学习的组)

因为我对它们的分类不感兴趣(我不知道类),所以我最感兴趣的是它们的'visual'属性:颜色、形状、渐变等。 我发现有很多文章建议使用 DBSCAN、t-SNE 甚至 k-means 等算法,但是否有更好的解决方案?有人建议使用 HOG 转换,但老实说,不知道如何将它们拼接在一起。

所以,总结一下,我如何根据图像的颜色和形状属性将(在二维平面上,分成组、文件夹等)图像?

t-SNE 实际上非常适合您正在尝试做的事情。

t-Distributed Stochastic Neighbor Embedding (t-SNE) is a (prize-winning) technique for dimensionality reduction that is particularly well suited for the visualization of high-dimensional datasets.

您可以阅读更多相关信息 here

一如既往,sklearn 有一个非常用户友好的 TSNE object 可以快速试用。

希望对您有所帮助...

我想我明白为什么人们对这个问题投反对票了:因为多年的相关帖子几乎没有什么好的答案,而且问题很复杂。更重要的是:

不幸的是图像语义维数比2D高得多。甚至可能无限高。你link的照片只是高维space到一个平面的投影,并不一定代表真实信息space的样子。这个特定的投影在视觉上似乎主要是关于颜色的。

解决方案是关注特定的相似性度量。

例如:“这张图片是否包含圆圈?”,并为此进行优化。但是如果你想要一个“正方形”,你已经在另一个维度了。如果针对颜色进行优化,您可以查看“整体发红”或其他颜色。添加的指标越多,聚类维度越高。

我们的认知是这样的。我们针对特定的汇总指标,可能是一个标量值,它是不同维度的加权指标之和。这是一个排名问题。

例如,如果你想要有“眼睛”的照片,你不关心颜色变化。但是如果你更在意颜色,那么形状就不那么重要了。

根据我的经验,当每个聚类中的图片在一个指标上非常相似并且该指标在聚类之间不模糊时,聚类会更容易。

例如,一个集群是“腿”,另一个集群是“脸”。但是,如果你有任何可能主题的非常不同的图像,即使有纯噪声,解决方案也很棘手,除非你指定你想要分组的确切内容。

这同样适用于将簇压缩到文件夹中:如果定义不明确,则会失败。