LoginSignup
1
0

近似最近傍探索ライブラリvoyagerのお試しメモ

Last updated at Posted at 2024-03-28

近傍探索お試し

spotifyさんが新しく公開した近傍探索ライブラリのvoyagerを使用した類似画像検索を試してみます。

とりあえずパパっと動かしたメモなので詳細な性能検証ではないです。

https://spotify.github.io/voyager/
https://github.com/spotify/voyager

先に結論いろいろ

前提

  • 約57万枚の画像を使用
  • 画像を768次元の埋め込みベクトルにして利用

結果

  • 57万のデータからインデックスを作成 → 約82.7秒 (修正・再計測中)
  • クエリとなる画像を渡しtop15を取得 → 約0.23秒
    • 検索部分のみの時間です。実際の検索はクエリ画像をエンコードしたりでもう少しかかる
  • 実際に検索した例は後述

追記:
ミス発見。
検索時間はもう少し速かったです。上記の0.23秒は近傍探索+必要な情報の付与(テーブルのjoin処理)を行ったものでした。
実際に利用する場合はこんなもん、という程度で見ていただければ。

結論

簡単。速い。すごい。

リソース関連メモ

画像生成周りの情報も残しておきます。
案外、このへんの「個人向けPCでやると実際どのくらいかかるの?」という情報少ないので。

PCスペック

CPU: Core i7-13700
Mem: 64GB
GPU: RTX-4070(VRAM:12GB)

2024年時点の個人向けPCとしては最高スペックではないがそこそこモリモリぐらいの性能でどうなったかの記録です。

画像生成

SDXL-turboを使用します。

SDXLでは1024pxの画像を生成しますが、SDXL-turboは512pxのサイズになります。
そして生成速度はめちゃくちゃ速くなります。
SDXLでは一枚あたり10~20秒程度で画像を生成できましたが、turboでは↓ぐらい。

step数の設定

SDXLは徐々に画像を生成していく動きをしますが、その生成ステップを何回行うか、の数字

A single step is enough to generate high quality images.

SDXLでは20stepぐらい。SDXL-turboでは1ステップで十分とのこと

今回は1~5をランダムに設定(数字を増やすと比例して時間はかかる)しました

生成速度

  • 3枚/秒ぐらい =1時間で1万枚ぐらい生成できた
  • GPUはVRAMを8~9G程度使用
  • 画像の質
    • SDXLよりは荒れる印象

ベクトル化

CLIPの画像エンコーダを使用。
20秒/100枚ぐらい処理できました。

voyager

インデックス作成

検索用のインデックスを作成&ファイルに保存をデータ量ごとに比較。

データ量 処理時間 ファイル
1k 0.12s 2.1M
10k 0.49s 21M
100k 9.83s 207M
575k 82.7s 1.2G

検索速度

top15の検索を5回やって平均

データ量 検索時間
1k 0.092s
10k 0.097s
100k 0.11s
575k 0.24s

検索結果

目視で評価。
対象に入っていない画像をクエリにして検索実験。
上側がクエリ画像、下側に9つ見えているのが検索結果です。

  • 近未来っぽい車

うまく車、特に黄色っぽいのが検索できています。

image.png

  • カラフルなオウム

image.png

  • 宇宙服

宇宙っぽい雰囲気を捉えた検索になってそう。

image.png

  • 犬のロボット
    検索対象の画像に同じような機械の犬っぽい画像はないです。
    そのためロボットっぽいのが検索できるかどうかを見たところうまくできてそう。

image.png

  • スマホ

スマホ内の絵柄の方が強く反応したパターン
検索対象の画像の中にも似た構図(スマホを持っている画像)もあったが、宇宙っぽいイラストが優先された。

image.png

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0