如何使用 FLANN 进行标记和聚类?
Posted
技术标签:
【中文标题】如何使用 FLANN 进行标记和聚类?【英文标题】:How to use FLANN for labeling and clustering? 【发布时间】:2018-08-19 03:31:39 【问题描述】:我读过一篇论文,他们的检索系统基于 SIFT 描述符和fast approximate k-means clustering。我安装了pyflann
。如果我没记错的话,以下命令只会找到特定样本的接近数据点的索引(例如,这里是从dataset
到 testset
的 5 个最近点的索引)
from pyflann import *
from numpy import *
from numpy.random import *
dataset = rand(10000, 128)
testset = rand(1000, 128)
flann = FLANN()
result,dists = flann.nn(dataset,testset,5,algorithm="kmeans",
branching=32, iterations=7, checks=16)
我浏览了用户手册,但是,可以找到如何使用FLANN
进行k-means
clusterin。以及如何根据集群中心拟合测试。因为我们可以在scikitlearn 中使用kmeans++
聚类,然后我们根据模型拟合数据集:
kmeans=KMeans(n_clusters=100,init='k-means++',random_state = 0, verbose=0)
kmeans.fit(dataset)
稍后我们可以使用KDTree
为测试集分配标签。
kdt=KDTree(kmeans.cluster_centers_)
Q=testset #query
kdt_dist,kdt_idx=kdt.query(Q,k=1) #knn
test_labels=kdt_idx #knn=1 labels
有人可以帮助我如何对FLANN
使用相同的程序吗? (我的意思是对数据集进行聚类(找到聚类中心并量化特征),然后根据上一步找到的聚类中心量化测试集。
【问题讨论】:
【参考方案1】:您将无法使用 FLANN 进行最佳变体,因为它们同时使用两个索引,并且难以实现。
但是您可以为每次迭代在中心上建立一个新索引。但除非你有 k > 1000,否则它可能不会有太大帮助。
【讨论】:
感谢您的评论。请问FLANN有什么用?flann.nn()
函数到底在做什么?我将它用于数据集中点的坐标 (x,y),并通过 thisflann.nn(dataset,testset, 5, algorithm="kdtree")
进行测试集,以获得 5 个最近点。是正确的还是我的理解有误?
我是否可以使用设置kmeans
算法的 FLANN 并通过分配 2000 作为簇数来量化 SIFT 特征?谢谢
非常感谢您分享您的知识。以上是关于如何使用 FLANN 进行标记和聚类?的主要内容,如果未能解决你的问题,请参考以下文章
使用 IF NOT EXISTS 使用主键和聚类列进行唯一插入
使用 SciKit-Image 和 SciKit-Learn 进行图像预处理和聚类 - 需要一些建议