ベクターデータベースを用いた画像関連性検索
目次
こんにちは。
クラウドソリューショングループ2のkongsです。
近年のAIの進歩により、ベクターデータベースはデータを高次元ベクトルとして保存し、類似性に基づく効率的なクエリを可能にする能力から、ますます普及しています。
一般的に保存されるデータの種類としては、画像、テキストデータ、音声ファイル、さらには動画などがあります。
本日は、ベクターデータベースを使用してローカル環境に画像検索エンジンを構築する方法をご紹介します。
ベクターデータベースとは
ベクターデータベースとは、その名の通り、ベクトルを格納するデータベースです。
しかし、なぜベクターデータベースが必要になるのかという理由は、これだけでは明確ではありません。
簡単に言えば、多くの種類のデータはベクトルの集合として表現することができます。
これらのベクトルは、私たちが容易に理解できる三次元空間をはるかに超える、多くの次元を持つことがあります。
簡単な例を挙げると、画像は多次元空間における一点として表され、その各次元はデータの特徴(色、形状、質感など)を示します。
ベクターデータベースを利用する理由
皆さんは、2つの画像の違いを探すゲームをやったことがありますか?
(上記の2つの画像は、違いを比較する例として使用されています)
ほとんど同じ2枚の画像から違いを見つけることはそれほど難しくありませんが、2つの画像の「どれだけ似ているか」を数値で評価することは、実は非常に難しい問題です。
さらに、この問題は、各ピクセルの色を単純に比較するだけでは解決できないという事実によって、より複雑になります。
(ピクセル単位の従来の比較では対応できない、類似した2つの画像の例)
この問題は、画像だけでなく、動画、テキスト、音声など多くの種類のデータにも存在します。
しかし、ベクターデータベースを使用し、これらのファイルをベクトル形式で保存することで、2つの画像がどれだけ似ているかを客観的に評価できる指標を得ることができます。
従来のデータベースが完全一致に依存するのに対し、ベクターデータベースは近似最近傍探索(Approximate Nearest Neighbor、ANN)を可能にし、類似性に基づいた検索に最適です。
これにより、これらのデータファイルに対する検索エンジンを実現することができるのです。
ベクターデータベース入門
ベクターデータベースのホスティングを提供するサービスは、年々増加しています。代表的なサービスには、Weaviate、Pinecone、Milvusなどがあります。
さらに、PostgreSQLやMongoDBのような従来のデータベースプロバイダーでも、現在ではベクターデータベースの統合サービスが提供されています。
本日は、Weaviateを使って独自のベクターデータベースをホスティングしてみます。
Weaviateはオープンソースのベクターデータベースで、高次元データの保存や検索を目的としています。
今回のケースでは、画像をエンベディングの形式で表現して扱います。
Weaviateを利用することで、プロトタイピングのためにローカルでホストされたベクターデータベースを簡単にデプロイできます。
オープンソースであり、高いカスタマイズ性を備えている点が、自由に試行錯誤し、新しいアイデアを試したい開発者にとってWeaviateを魅力的な選択肢にしています。
Weaviateをローカル環境でセットアップ
始める前に注意すべき点として、ベクターデータベースをホスティングする場合、特に画像検索ツールとして使用する際には、パソコンに十分なメモリが搭載されていること、可能であればGPUがあることが望ましいです。
また、Weaviateをコンテナ内でホスティングするためにDockerを使用しますので、Docker Desktopをあらかじめインストールしておくことをおすすめします。
上記のリンクにアクセスすると、Weaviateのホームページ(下記参照)が表示されます。
「Documentation」をクリックし、「Installation」セクションに移動します。
左側のドロップダウンメニューから「How to install」を選択し、その後「Installation methods」で「Docker Compose」を選びます。
次のページでは、下にスクロールすると「Configurator」が表示されます。これは、設定したい項目を簡単に選べるガイドのようなものです。
以下の手順で設定してください(推奨):
- まず、”Weaviate Version”のオプションは提供されている最新バージョンを選択します。
- “Persistent Volume”のオプションは、”Persistent volume with named volume”を選択します。
- “Standalone Or Modules”のオプションは、”With modules”を選択します。
- “Vectorizers & Retrievers Media Type”のオプションは、”Images”を選択します。 (画像検索や分類の用途では、将来的に画像とテキストの組み合わせを使用すると精度が向上します。)
- “Image2Vec Model(Vectorizers & Retrievers)”のオプションは、 “ResNet50(Pytorch)”を選択します。 (現在、GPU 関連機能をサポートしているのはこのオプションのみです。)
- “Ref2Vec-Centroid Vectorizer Module”のオプションは、”Disabled”を選択します。
- このセグメントでは、人気のAIモデル統合機能を含めるかどうかを尋ねられます。すべて”Disabled(無効)”を選択します。(興味があれば後で試すこともできます)
- 最後に”Select Your Desired Runtime”のオプションは”Docker Compose”を選択します。
必要なオプションを選択すると、次の画面が表示されます:
上記のコマンドをコピーし、目的のディレクトリで実行します。このコマンドにより、先ほど選択した設定に基づいた詳細な”docker-compose.yml”ファイルが作成されます。
その後、次のコマンドを使ってコンテナを作成し、起動できます:
docker-compose up -d
注意:この操作ではコンテナ作成に必要なファイル(約 8GB)がダウンロードされます。必要なストレージ容量があることを確認してください。
プロトタイプのデモ
Vue.jsを使って、Weaviateを画像検索エンジンとして利用する方法を示す簡単なページを作成しました。
「Upload」ボタンは、選択した画像をウェブサイトにアップロードし、Weaviate データベースにベクトル化して登録します。
「Search」ボタンは、アップロードされた画像をベクトル化した後、データベース内で最も類似した画像を検索し、ユーザーに提示します。
今回使用する画像セットは以下の通りです:
まずは、クジャクの1枚目の画像をアップロードしてみましょう。
次に、2枚目の画像を使って検索を行います。
ご覧の通り、データベースは最も類似した画像を取得し、以下の画像を返してきました。
3枚目の画像で検索しても同じ結果となり、1枚目の画像が最も類似していることが確認できます。
結論
上記のプロトタイプのデモでは、ベクターデータベースを活用して画像類似検索を実現し、独自の画像検索エンジンを構築できることを示しました。
ベクターデータベースは、膨大な画像ライブラリの管理、EC カタログの運用、さらには AI 駆動型アプリケーションなど、さまざまなユースケースに利用可能です。
このようなシステムの導入をご検討中であれば、ぜひ私たちにご連絡ください。
お客様のビジネスに最適なソリューションを実現するための対話を始めましょう。
