我正在使用 vlfeat 的 kdtree,它实现了 FLANN 的 kd-tree,据说它可以处理高维数据。但是,现在我有一个从 128x15000 数据集构建的 kdtree,并且对任何内容的 kd 树查询都已减慢到 8 秒。这是kd-trees的极限吗?FLANN 也应该是一个更快优化的 kdtree...
我现在还有什么其他选择?
尝试使用 David M. Mount 和 Sunil Arya ANN(近似最近邻搜索)
真的有那么慢吗?您使用什么参数/设置?
除此之外,我可以推荐FLANN。
VLFeat 实现了 FLANN 建议的算法(多个随机树和分层 k 均值树)。也许对于您的情况,算法选择或参数集(或两者)不正确。尝试原始的 FLANN 或 OpenCV 的 FLANN 实现(好吧,或者基于 VLFeat 实现自己的)以获得正确的算法和参数。
我的猜测是您一次查询一个数据点。也许您想一次将所有查询作为矩阵发送,例如文档中的这个函数调用:
[index, distance] = vl_kdtreequery(kdtree, X, Q, 'NumNeighbors', 10, 'MaxComparisons', 15);
请注意,它将数量限制MaxComparisons
为 15,这是实现快速性能的关键部分。