高次元データを処理すると思われる FLANN の kd-tree を実装する vlfeat の kdtree を使用しています。ただし、現在、128x15000 のデータセットから構築された kdtree があり、kd ツリーのクエリは、1 回のクエリで 8 秒まで遅くなりました。これはkd-treesの限界ですか?FLANNは、より高速に最適化されたkdtreeでもあるはずでした...
他にどのようなオプションがありますか?
David M. Mount と Sunil Arya ANN (Approximate Nearest Neighbor Searching) を使用してみてください
本当に遅いですか?どのパラメータ/設定を使用していますか?
それに加えて、私はFLANNをお勧めすることができます。
VLFeat は、FLANN が推奨するアルゴリズム (複数のランダム化されたツリーと階層的な k-mean ツリー) の両方を実装しています。おそらく、あなたの場合、アルゴリズムの選択またはパラメーターセット (またはその両方) が正しくありません。元の FLANN または OpenCV の FLANN 実装 (まあ、または VLFeat に基づいて独自に実装) を試して、適切なアルゴリズムとパラメーターを取得してください。
私の推測では、一度に 1 つのデータ ポイントをクエリしていたと思われます。ドキュメントからのこの関数呼び出しのように、すべてのクエリを一度にマトリックスとして送信したい場合があります。
[index, distance] = vl_kdtreequery(kdtree, X, Q, 'NumNeighbors', 10, 'MaxComparisons', 15);
の数が 15 に制限されていることに注意してくださいMaxComparisons
。これは、高速なパフォーマンスを達成するための重要な部分です。