注意:这是我的第一个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个图像的关键点?请帮忙。
答案 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)。