【问题标题】:Kmeans clustering for sift features筛选特征的 Kmeans 聚类
【发布时间】:2015-02-26 17:50:30
【问题描述】:

注意:这是我的第一个 stackexchange 问题。如果我提出问题的方式不符合预期,我很抱歉。所以,这是我的疑问。

我有一个包含大约 3000 张图像的数据集。我对所有这些图像进行了筛选(尺度不变特征变换)(使用 David Lowe 的筛选演示)并获得了图像各自的(3000)关键点特征。现在我必须对 3000 张图像的关键点特征执行 k-means 聚类。每个图像都有自己的关键点(从图像到图像的变化),它们位于 128 维矩阵中。现在我要执行 k-means,这 3000 个 sift 向量必须放在一起,并且应该训练它们从中获得一个 k-means 模型。

例如:

图像在 sift 之前转换为 .pgm 格式,以下是其中一张图像在执行 sift 后的 226 个关键点:

74 128

98.20 126.13 16.47 2.776

0 0 0 0 0 0 0 0 9 12 1 0 0 0 0 0 39 9 0 0

0 15 24 12 29 1 0 0 0 27 92 33 13 1 0 0 0 0 0 20

83 90 19 1 2 6 3 19 165 86 2 0 1 8 44 88 24 0 3 21

8 24 165 64 3 1 4 0 0 1 1 18 116 23 10 0 1 14 11 51

165 101 9 20 5 1 5 84 38 24 28 157 40 5 10 14 0 3 5 0

0 0 0 0 45 101 16 0 0 0 0 1 114 165 17 8 1 0 0 1

7 56 17 46 26 0 0 0

(同样剩余的关键点及其 128 个维度一直持续到第 226 个关键点特征)。

同样,其余 2999 张图像具有各自的关键点特征。

现在我必须对整个 3000 张图像的 sift 特征执行 k-means 聚类,并从中获得一个 k-means 模型。我打算使用 scikit (sklearn) 中的 k-means 包。如何在 scikit 中输入这 3000 张图像的关键点?请帮忙。

【问题讨论】:

    标签: python k-means


    【解决方案1】:

    您必须实例化一个sklearn.cluster.KMeans 对象并调用fit(X),其中X 是一个矩阵,所有图像的所有关键点都堆叠在一起。例如,如果不是您的 3000 张图像,而是只有两张图像,分别具有 100 和 50 个关键点,则 X 将是 150 x 128。运行fit 后,您应该查看对象的属性cluster_centers_,这将对应到你会训练的 k-means 模型。

    不过,您的问题不清楚的是,您是否已经将每个图像的关键点用 python 表示为矩阵。你可能想看看their k-means example

    【讨论】:

      【解决方案2】:

      我在一个 16 核的 EC2 c3.4xlarge 集群上训练了大约 64000x128 个关键点。我将 Ipython 与 Scikit learn 并行使用,集群大约需要 120 个小时。这可能是一种解决方案。基本上,拟合函数的 X 应该是形状为 (number_of_features X 128) 的 numpy 数组。

      【讨论】:

        猜你喜欢
        • 2019-11-19
        • 2019-08-05
        • 2019-12-01
        • 2020-07-14
        • 2014-12-27
        • 2014-07-23
        • 2014-03-17
        • 2012-04-10
        • 2014-05-20
        相关资源
        最近更新 更多