Federで逆画像検索を可視化

逆画像検索は、ベクトル検索または近似最近傍検索の最も一般的なアプリケーションの1つです。ユーザーが検索エンジンに画像をアップロードすると、類似画像の束が返される。その過程で、大規模なデータセット、特に10億から1兆スケールのデータセットの検索を高速化するためにインデックスが構築される。
前回のブログ](https://zilliz.com/blog/Visualize-Your-Approximate-Nearest-Neighbor-Search-with-Feder)では、HNSWインデックスの可視化を例に、Federで近似最近傍探索を可視化する方法を紹介しました。今回は、逆画像検索を例にとり、Federを使ってインデックス構築と検索プロセスを可視化する方法を引き続き説明します。この記事では、IVF_FLAT インデックスを使いますが、これは逆画像検索アプリケーションで最もよく使われるインデックスだからです。
Feder を使って画像逆引き検索を可視化する方法
Feder は JavaScript で作られています。Federを可視化のために使うには、まずインデックスを構築し、Faiss か Hnswlibからインデックスファイルを保存する必要があります。それから Feder はアップロードされたファイルを解析してインデックス情報を取得し、可視化の準備をします。ベクトル類似性検索では、ターゲットベクトルと検索パラメーターの設定を提供する必要があります。そして Feder が検索プロセス全体を可視化します。
Feder の使い方については、Feder ユーザーガイド をお読みください。
IVF_FLAT インデックスを使った検索の可視化のユースケース
このユースケースでは、VOC 2012、17,000以上の画像を含む古典的なML画像データセットを使います。
まず、オープンソースのMLパイプラインであるTowheeを用いて、VOC 2012データセットの画像をベクトルにエンコードする。次にFaissでIVF_FLATインデックスを作成し、インデックスファイルを保存する。最後に、可視化のためにFederを使う。
<このリンクは、IVF_FLAT インデックスの可視化を見るためのインタラクティブなユーザー体験を提供します。それでは、各ステップを詳しく見ていきましょう。-->
IVF_FLAT インデックスの構築
インデックスは検索プロセスを高速化するために構築されます。辞書に例えることができます。すべての単語はその頭文字に基づいて整理されています。より具体的には、同じ頭文字を持つ単語は一緒にグループ化されます。そして、それぞれの頭文字の下にある項目の数が不均等であることは誰もが知っている。Eで始まる単語はZで始まる単語より多い。ある単語を調べるとき、同じ頭文字の単語だけを集めたセクションに素早く移動できる。これにより、検索スピードが飛躍的に向上する。
同様に、IVF_FLATインデックスは、ベクトル空間のベクトルをベクトルの距離に基づいて異なるクラスターに分割する。互いに近いベクトルは同じクラスタに入れられる可能性が高くなる。また、ベクトルは必ずしも各クラスタに均等に分布しているわけではありません。したがって、各クラスタには異なる量のベクトルが含まれます。
このユースケースでは、VOC 2012データセットの17,000枚の画像に対して、Faissを用いてIVF_FLATインデックスを構築し、nlistを256とした。17,000の画像ベクトルはK-meansクラスタリング手法に基づいて256のクラスタに分割される。
Federを使えば、高次元ベクトル空間のクラスタリングを2Dビューで可視化できます。Federはインタラクティブなユーザー体験を提供しながら、各クラスタの詳細の表示をサポートします。IVF_FLATインデックスをよりよく理解するために、Federでクラスタの1つをクリックすると、そのクラスタ内のベクトルで表現された最大9つの画像が表示されます。
粗い探索
ターゲット画像を入力し、逆画像検索用のターゲットベクトルに変換すると、システムはまずターゲットベクトルと各クラスターの重心との距離を計算し、最も近いクラスターを見つけます。
この使用例では、nlistは256に等しく、これはベクトル空間全体が265のクラスタ単位に分割されていることを意味する。したがって、粗い探索プロセスでは、システムはターゲットベクトルと256個のクラスタのセントロイド間の距離を比較する。
IVFインデックスでは、ベクトルは互いの相対距離に基づいてクラスタ化される。これは、対象ベクトルの最近傍がその最も近いクラスタに位置する可能性が高いことを意味する。パラメータ nprobe で問い合わせるクラスタ単位の数を制御することができる。このユースケースでは nprobe は 8 で、システムはターゲットベクトルの最近傍を上位8つのクラスタから探します。
下のスクリーンショットは、最も近いクラスターの詳細図である。クラスタ-186(ターゲットのベクトルに8番目に近いクラスタ)には、車の画像のベクトルがいくつか含まれていることがわかります。車はターゲット画像の飛行機には全く似ていませんが、cluster-186の画像の車の軌跡がターゲット画像の空港の滑走路に非常によく似ているため、cluster-186の画像とターゲットの画像には共通点があります。より近いクラスターであるクラスター-96では、空を飛ぶ航空機の画像が含まれていることがわかる。
粗い検索](https://assets.zilliz.com/coarse_827557fcc9.png)
このユースケースのクラスタは、埋め込み中に機械学習モデルがターゲット画像内の航空機、滑走路、空を含む特徴を正確に抽出していることを示しています。そして、これらの特徴に基づいてベクトル空間のベクトルを分割する。クラスタ-186は「滑走路」の特徴を共有し、クラスタ-96は「航空機」の特徴を共有している。
粗い探索
粗い探索の後、細かい探索のためにnprobeクラスタの数を確保することができる。この段階では、システムはターゲットベクトルとnprobeクラスタ内のすべてのベクトルとの距離を比較する。そして、上位K個の最も近いベクトルが最終結果として返される。
この使用例では、システムはターゲット・ベクトルと8クラスタの合計742個のベクトルとの間の距離を、精密探索プロセス中に計算します。
Federは精密探索プロセスに対して2つの可視化モードを提供します。ひとつはクラスタとベクトルの距離に基づく可視化。もう1つは次元削減のための投影モードである。
下のスクリーンショットでは、異なるクラスターが異なる色で表示されています。中央の白い円はターゲット・ベクトルを表しています。Federの助けを借りて、各ベクトルとターゲット・ベクトル間の距離をより明確でわかりやすく見ることができます。各ベクトルをクリックすると、ターゲットベクターとの距離や、そのベクトルが表す画像など、より詳細な情報を見ることができます。
ファインサーチ](https://assets.zilliz.com/fine_dist_ac4f81cec3.png)
下のスクリーンショットは、次元削減モードの投影です。クラスターごとに色が異なっています。現時点では、次元削減の最も一般的な手法の一つであるUMAPのみをサポートしています。Federの将来のリリースでは、より多くのプロジェクト手法がサポートされる予定です。
ファインサーチ](https://assets.zilliz.com/fine_project_67fe9622ab.png)
検索パフォーマンス分析
索引を用いない検索では、対象となるベクトルとデータベース内の 17,000 個のベクトルすべてとの距離を計算する必要がある。しかし、IVF_FLAT インデックスを構築すると、計算量が大幅に削減されるため、検索効率が大幅に向上する(粗い検索では、256 個のクラスタ・セントロイドと対象ベクトル間の距離を計算するだけでよく、細かい検索では、742 個のベクトル間の距離を計算するだけでよい)。
またFederの可視化では、インデックス構築パラメータの値がベクトル空間の分割方法に影響することに気づくだろう。nprobeパラメータは探索効率と精度のトレードオフを実現するために使用できる。nprobeの値が大きいほど、検索範囲は広くなり、検索結果はより正確になる。しかしそれに伴い、計算量が増えるにつれて検索効率は低下する。
次へ
- Attu](https://github.com/zilliztech/attu/releases)を使って、ベクトルデータベースをワンクリックで簡単に管理してみましょう。
- Feder を使って最近傍探索を可視化する](https://zilliz.com/blog/Visualize-Your-Approximate-Nearest-Neighbor-Search-with-Feder) 方法を学びましょう。
読み続けて

1 Table = 1000 Words? Foundation Models for Tabular Data
TableGPT2 automates tabular data insights, overcoming schema variability, while Milvus accelerates vector search for efficient, scalable decision-making.

Empowering Innovation: Highlights from the Women in AI RAG Hackathon
Over the course of the day, teams built working RAG-powered applications using the Milvus vector database—many of them solving real-world problems in healthcare, legal access, sustainability, and more—all within just a few hours.

Vector Databases vs. NewSQL Databases
Use a vector database for AI-powered similarity search; use a NewSQL database for scalable transactional workloads requiring strong consistency and relational capabilities.
