OpenAI CLIPとMeta FAISSによる意味画像検索
はじめに
このガイドでは、OpenAI CLIP、Meta FAISS、Flaskを使ったセマンティック画像検索エンジンの構築について説明します。CLIPの強力なビジュアル言語エンベッディングとFAISSの効率的な最近傍検索を組み合わせることで、自然言語クエリを使用して関連する画像を取得できる、完全に機能的なウェブインターフェースを作成することができます。
セマンティック画像検索ビジュアルプレビュー
仕組み
- CLIPは、画像にはビジョンエンコーダ(ResNetやViTなど)を、言語にはテキストエンコーダ(Transformerベース)を使い、両者を同じマルチモーダル埋め込み空間に投影する。これにより、余弦類似度を用いてテキストと画像を直接比較することができる。
- FAISS(FacebookAI Similarity Search)は、画像埋め込みインデックスを構築し、与えられたクエリに最も近いベクトルの高速でスケーラブルな検索を可能にする。
- Flaskは、自然言語クエリを送信し、インデックスからセマンティックにマッチした画像を表示するためのシンプルなウェブインターフェースを提供します。
このアーキテクチャはゼロショット検索をサポートしている。つまり、ラベルやカテゴリは必要なく、画像データと優れたプロンプトがあればいい。
Ultralytics Python パッケージを使ったセマンティック画像検索
画像パスの警告
独自の画像を使用する場合は、画像ディレクトリへの絶対パスを指定してください。そうしないと、Flask のファイル提供の制限により、画像がウェブページに表示されないことがあります。
from ultralytics import solutions
app = solutions.SearchApp(
# data = "path/to/img/directory" # Optional, build search engine with your own images
device="cpu" # configure the device for processing i.e "cpu" or "cuda"
)
app.run(debug=False) # You can also use `debug=True` argument for testing
VisualAISearch
クラス
このクラスはバックエンドのすべての操作を行う:
- ローカル画像からFAISSインデックスをロードまたは構築する。
- CLIPを使用して画像とテキストの埋め込みを抽出します。
- コサイン類似度を用いて類似度検索を行う。
類似画像検索
画像パスの警告
独自の画像を使用する場合は、画像ディレクトリへの絶対パスを指定してください。そうしないと、Flask のファイル提供の制限により、画像がウェブページに表示されないことがあります。
from ultralytics import solutions
searcher = solutions.VisualAISearch(
# data = "path/to/img/directory" # Optional, build search engine with your own images
device="cuda" # configure the device for processing i.e "cpu" or "cuda"
)
results = searcher("a dog sitting on a bench")
# Ranked Results:
# - 000000546829.jpg | Similarity: 0.3269
# - 000000549220.jpg | Similarity: 0.2899
# - 000000517069.jpg | Similarity: 0.2761
# - 000000029393.jpg | Similarity: 0.2742
# - 000000534270.jpg | Similarity: 0.2680
VisualAISearch
パラメータ
以下の表は、以下のパラメータで使用可能な概要です。 VisualAISearch
:
議論 | タイプ | デフォルト | 説明 |
---|---|---|---|
data |
str |
images |
類似検索に使用する画像ディレクトリへのパス。 |
議論 | タイプ | デフォルト | 説明 |
---|---|---|---|
device |
str |
None |
推論を行うデバイスを指定する(例. cpu , cuda:0 または 0 ).CPU 、特定のGPU 、またはモデル実行用の他のコンピュート・デバイスを選択することができます。 |
CLIPとFAISSによるセマンティック画像検索の利点
CLIPとFAISSを使って独自のセマンティック画像検索システムを構築すると、いくつかの魅力的な利点があります:
-
ゼロショット機能:特定のデータセットでモデルをトレーニングする必要はありません。CLIPのゼロショット学習により、自由形式の自然言語を使用してあらゆる画像データセットに対して検索クエリを実行できるため、時間とリソースの両方を節約できます。
-
人間のような理解:キーワードベースの検索エンジンとは異なり、CLIPは意味的な文脈を理解します。自然の中の幸せそうな子供」や「夜の未来的な都市のスカイライン」のような抽象的、感情的、または関係的なクエリに基づいて画像を検索することができます。
-
ラベルもメタデータも不要:従来の画像検索システムは、注意深くラベル付けされたデータを必要としていた。このアプローチでは、生の画像だけが必要です。CLIPは、手動によるアノテーションを必要とせずに埋め込みデータを生成します。
-
柔軟でスケーラブルな検索FAISSは大規模なデータセットでも高速な最近傍探索を可能にします。スピードとメモリに最適化されており、数千(数百万)の埋め込みデータでもリアルタイムに応答できます。
-
クロスドメインアプリケーション:個人のフォト・アーカイブ、クリエイティブなインスピレーション・ツール、商品検索エンジン、あるいはアート・レコメンデーション・システムなど、このスタックは最小限の調整でさまざまなドメインに適応する。
よくあるご質問
CLIPは画像とテキストの両方をどのように理解するのですか?
CLIP(ContrastiveLanguage Image Pretraining)はOpenAIが開発したモデルで、視覚情報と言語情報の結びつきを学習する。自然言語のキャプションとペアになった画像の膨大なデータセットで学習される。このトレーニングにより、画像とテキストの両方を共有埋め込み空間にマッピングすることができるため、ベクトルの類似性を使って直接比較することができます。
なぜCLIPはAIタスクに強力だと考えられているのか?
CLIPが際立っているのは、その汎化能力だ。特定のラベルやタスクのためだけにトレーニングされるのではなく、自然言語そのものから学習する。これにより、「ジェットスキーに乗っている男性」や「超現実的な夢の風景」といった柔軟なクエリを扱うことができ、再トレーニングなしで、分類から創造的な意味検索まで、あらゆる用途に使えるようになる。
FAISSはこのプロジェクト(セマンティック検索)で具体的に何をするのですか?
FAISS(Facebook AI Similarity Search)は、高次元ベクトルを効率的に検索するツールキットです。CLIPが画像をエンベッディングに変換すると、FAISSはリアルタイム画像検索に最適な、テキストクエリに最も近いマッチを高速かつ簡単に見つけることができます。
なぜ UltralyticsCLIPとFAISSがOpenAIとMetaのものなのに、なぜPython パッケージを使うのですか?
CLIPとFAISSはそれぞれOpenAIとMetaによって開発されましたが、Ultralytics Python パッケージは、2行で動作するワークフローで、完全なセマンティック画像検索パイプラインへの統合を簡素化します:
類似画像検索
from ultralytics import solutions
searcher = solutions.VisualAISearch(
# data = "path/to/img/directory" # Optional, build search engine with your own images
device="cuda" # configure the device for processing i.e "cpu" or "cuda"
)
results = searcher("a dog sitting on a bench")
# Ranked Results:
# - 000000546829.jpg | Similarity: 0.3269
# - 000000549220.jpg | Similarity: 0.2899
# - 000000517069.jpg | Similarity: 0.2761
# - 000000029393.jpg | Similarity: 0.2742
# - 000000534270.jpg | Similarity: 0.2680
この高レベルの実装では、以下の処理を行う:
- CLIPベースの画像とテキストの埋め込み生成。
- FAISSインデックスの作成と管理
- コサイン類似度を用いた効率的な意味検索。
- ディレクトリベースの画像読み込みと視覚化。
このアプリのフロントエンドをカスタマイズできますか?
はい、もちろん可能です。現在のセットアップでは、基本的なHTMLフロントエンドとFlaskを使用していますが、独自のHTMLに置き換えたり、ReactやVue、その他のフロントエンドフレームワークを使ってよりダイナミックなものを構築することも自由です。FlaskはカスタムインターフェイスのバックエンドAPIとして簡単に利用できます。
静止画像の代わりに動画で検索することは可能ですか?
直接ではないが、簡単な回避策がある。動画から個々のフレームを抽出し(たとえば、1秒ごとに1つ)、それを独立した画像として扱い、システムに送り込むことができる。こうすることで、検索エンジンは動画の視覚的瞬間を意味的にインデックス化することができる。