FLANN如何选择要使用的算法和参数?

问题描述

FLANN(近似最近邻居的快速库)是用于在高维空间中执行快速近似最近邻居搜索的库。它包含一组我们发现最适合最邻近搜索的算法,以及一个根据数据集自动选择最佳算法和最佳参数的系统。 FLANN用C ++编写,包含以下语言的绑定:C,MATLAB,Python和Ruby。 https://github.com/mariusmuja/flann

FLANN有哪些可用的算法?它如何选择要使用的算法和参数?

我问是因为,在使用FLANN之前,我注意到使用体素滤镜的速度降低了10倍,并希望弄清楚该归因于什么。体素过滤器删除了数据中70%的点,但速度下降的幅度似乎要大得多。

解决方法

FLANN使用以下算法(defines.h):

FLANN_INDEX_LINEAR
FLANN_INDEX_KDTREE          
FLANN_INDEX_KMEANS 
FLANN_INDEX_COMPOSITE 
FLANN_INDEX_KDTREE_SINGLE
FLANN_INDEX_HIERARCHICAL
FLANN_INDEX_LSH     

FAST APPROXIMATE NEAREST NEIGHBORS WITH AUTOMATIC ALGORITHM CONFIGURATION,Mins,Lowe,2009页的第2节,其中提到:

在我们的实验中,取决于数据集和所需的精度,两种算法之一获得了最佳性能。这些算法使用层次结构 k-均值树多个随机kd-树

第3.3节回答了有关FLANN如何选择(从样本中)看起来最好的算法的问题。这是其中的一半:

enter image description here