OpenAI CLIPとMeta FAISSを使用したセマンティック画像検索
はじめに
このガイドでは、OpenAI CLIP、Meta FAISS、およびFlaskを使用してセマンティック画像検索エンジンを構築する方法を説明します。CLIPの強力な視覚言語埋め込みとFAISSの効率的な最近傍探索を組み合わせることで、自然言語クエリを使用して関連画像を検索できる、完全に機能するWebインターフェイスを作成できます。
見る: 類似性検索の仕組み | OpenAI CLIP、META FAISS、Ultralyticsパッケージを使用したビジュアル検索 🎉
セマンティック画像検索のビジュアルプレビュー
仕組み
- CLIPは、画像用のビジョンエンコーダ(ResNetやViTなど)と言語用のテキストエンコーダ(Transformerベース)を使用して、両方を同じマルチモーダル埋め込み空間に投影します。これにより、コサイン類似度を使用してテキストと画像を直接比較できます。
- FAISS (Facebook AI Similarity Search) は、画像埋め込みのインデックスを作成し、指定されたクエリに最も近いベクトルを高速かつスケーラブルに検索できるようにします。
- Flask は、自然言語クエリを送信し、インデックスから意味的に一致する画像を表示するためのシンプルなWebインターフェースを提供します。
このアーキテクチャは、ゼロショット検索をサポートしています。つまり、ラベルやカテゴリは必要なく、画像データと適切なプロンプトだけが必要です。
Ultralytics Pythonパッケージを使用したセマンティック画像検索
画像パスの警告
独自の画像を使用する場合は、画像ディレクトリへの絶対パスを必ず指定してください。そうしないと、Flaskのファイル提供の制限により、画像がWebページに表示されないことがあります。
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
class
このクラスは、すべてのバックエンド操作を実行します。
- ローカル画像からFAISSインデックスをロードまたは構築します。
- CLIPを使用して、画像とテキストの埋め込みを抽出します。
- コサイン類似度を用いて類似性検索を実行します。
類似画像検索
画像パスの警告
独自の画像を使用する場合は、画像ディレクトリへの絶対パスを必ず指定してください。そうしないと、Flaskのファイル提供の制限により、画像がWebページに表示されないことがあります。
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を使用して独自のセマンティック画像検索システムを構築すると、いくつかの魅力的な利点があります。
-
Zero-Shot Capabilities: 特定のデータセットでモデルをトレーニングする必要はありません。CLIPのzero-shot学習を使用すると、自由形式の自然言語を使用して、任意の画像データセットで検索クエリを実行できるため、時間とリソースの両方を節約できます。
-
人間のような理解: キーワードベースの検索エンジンとは異なり、CLIPはセマンティックなコンテキストを理解します。「自然の中の幸せな子供」や「夜の未来的な都市のスカイライン」のような抽象的、感情的、または関係的なクエリに基づいて画像を検索できます。
-
ラベルやメタデータは不要: 従来の画像検索システムでは、注意深くラベル付けされたデータが必要です。このアプローチでは、生の画像のみが必要です。CLIPは、手動で注釈を付ける必要なく埋め込みを生成します。
-
柔軟でスケーラブルな検索:FAISSを使用すると、大規模なデータセットでも高速な最近傍探索が可能です。速度とメモリが最適化されており、数千(または数百万)の埋め込みがあってもリアルタイム応答が可能です。
-
クロスドメインアプリケーション: 個人的な写真アーカイブ、創造的なインスピレーションツール、製品検索エンジン、またはアートレコメンデーションシステムを構築する場合でも、このスタックは最小限の調整で多様なドメインに適応します。
よくある質問
CLIPは画像とテキストの両方をどのように理解しますか?
CLIP(Contrastive Language Image Pretraining)は、視覚情報と言語情報を結びつけることを学習するOpenAIによって開発されたモデルです。自然言語キャプションとペアになった画像の膨大なデータセットでトレーニングされています。このトレーニングにより、画像とテキストの両方を共有の埋め込み空間にマッピングできるため、ベクトルの類似性を使用して直接比較できます。
CLIPがAIタスクで非常に強力であると考えられる理由
CLIPが際立っているのは、その汎用性です。特定のラベルやタスクのためだけにトレーニングされるのではなく、自然言語そのものから学習します。これにより、「ジェットスキーに乗る男性」や「シュールな夢の風景」のような柔軟なクエリを処理でき、再トレーニングなしで、分類から創造的なセマンティック検索まで、あらゆることに役立ちます。
FAISSはこのプロジェクト(セマンティック検索)で具体的に何をするのですか?
FAISS (Facebook AI Similarity Search) は、高次元ベクトルを非常に効率的に検索できるツールキットです。CLIPが画像を埋め込みに変換すると、FAISSはテキストクエリに最も近い一致を迅速かつ簡単に見つけられるようにし、リアルタイムの画像検索に最適です。
CLIPとFAISSがOpenAIとMetaによるものである場合、Ultralytics 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フレーム)、それらをスタンドアロンの画像として扱い、システムに入力します。こうすることで、検索エンジンは動画からの視覚的な瞬間を意味的にインデックス化できます。