K表示筛选特征的聚类

时间:2014-12-30 11:43:12

标签: python k-means

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

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

例如:

在筛选之前,图像被转换为​​.pgm格式,以下是执行筛选后其中一个图像的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个图像的筛选功能执行k-means聚类,并从中获得一个k-means模型。我打算使用scikit(sklearn)的k-means包。如何在scikit中输入这3000个图像的关键点?请帮忙。

2 个答案:

答案 0 :(得分:1)

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

但是,你的问题还不清楚,你是否已经将python中表示的每个图像的关键点都作为矩阵。您可能需要查看their k-means example

答案 1 :(得分:-2)

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