🚀 Zilliz Cloudを無料で試す、完全管理型のMilvus—10倍の高速パフォーマンスを体験しよう!今すぐ試す>>

milvus-logo
LFAI

システム概要

  • Scenarios
August 29, 2020
milvus

その名が示すように、画像による動画検索は、入力画像に類似したフレームを含む動画をリポジトリから検索するプロセスである。重要なステップの一つは、動画を埋め込み画像にすること、つまり、キーとなるフレームを抽出し、その特徴をベクトルに変換することである。さて、好奇心旺盛な読者の中には、画像から動画を検索するのと、画像から画像を検索するのと、何が違うのかと思うかもしれない。実は、動画からキーフレームを探すことは、画像から画像を探すことと同じなのです。

興味のある方は、以前の記事Milvus x VGG: コンテンツベースの画像検索システムの構築を参照していただきたい。

システム概要

以下の図は、このような動画検索システムの典型的なワークフローを示している。

1-video-search-system-workflow.png 1-動画検索システムのワークフロー.png

動画を取り込む際には、OpenCVライブラリを用いて各動画をフレーム単位に切り出し、画像特徴抽出モデルVGGを用いてキーフレームのベクトルを抽出し、抽出したベクトル(エンベッディング)をmilvusに挿入する。元の動画の保存にはMinioを、動画とベクトルの相関関係の保存にはRedisを使用しています。

動画を検索する際には、同じVGGモデルを使って入力画像を特徴ベクトルに変換し、Milvusに挿入して最も類似度の高いベクトルを見つける。そして、Redisの相関関係に従って、Minioのインターフェイス上で対応する動画を検索する。

データの準備

この記事では、動画を検索するエンド・ツー・エンドのソリューションを構築するためのサンプル・データセットとして、Tumblrの約10万個のGIFファイルを使用する。独自の動画リポジトリを使用することもできる。

配置

この記事で紹介する動画検索システムを構築するためのコードは、GitHubにある。

ステップ1:Dockerイメージをビルドする。

動画検索システムには、Milvus v0.7.1ドッカー、Redisドッカー、Minioドッカー、フロントエンド・インターフェース・ドッカー、バックエンドAPIドッカーが必要です。フロントエンドのインターフェース docker とバックエンドの API docker は自分で構築する必要がありますが、他の 3 つの docker は Docker Hub から直接引っ張ってくることができます。

# Get the video search code
$ git clone -b 0.10.0 https://github.com/JackLCL/search-video-demo.git

# Build front-end interface docker and api docker images
$ cd search-video-demo & make all

ステップ2:環境を設定する。

ここでは、docker-compose.ymlを使用して、上記の5つのコンテナを管理します。docker-compose.ymlの設定は以下の表を参照:

2-configure-docker-compose-yml.png 2-configure-docker-compose-yml.png

上表のIPアドレス192.168.1.38は、本記事で特に動画検索システムを構築するためのサーバーアドレスです。あなたのサーバーアドレスに更新する必要があります。

Milvus、Redis、Minio用のストレージ・ディレクトリを手動で作成し、docker-compose.ymlに対応するパスを追加する必要があります。この例では、以下のディレクトリを作成しました:

/mnt/redis/data /mnt/minio/data /mnt/milvus/db

docker-compose.ymlでは、以下のようにMilvus、Redis、Minioを設定できる:

3-configure-milvus-redis-minio-docker-compose-yml.png 3-configure-milvus-redis-minio-docker-compose-yml.png

ステップ3:システムを起動する。

変更したdocker-compose.ymlを使用して、動画検索システムで使用する5つのdockerコンテナを起動する:

$ docker-compose up -d

その後、docker-compose psを実行して、5つのdockerコンテナが正しく起動したかどうかを確認できる。次のスクリーンショットは、正常に起動した後の典型的なインターフェイスを示しています。

4-sucessful-setup.png 4-sucessful-setup.png

これで、データベースには動画がないものの、動画検索システムの構築に成功したことになる。

ステップ 4: 動画のインポート

システムリポジトリのdeployディレクトリに、動画をインポートするスクリプトimport_data.pyがあります。スクリプトを実行するには、動画ファイルへのパスとインポート間隔を更新するだけです。

5-update-path-video.png 5-update-path-video.png

data_path:インポートする動画のパス。

time.sleep(0.5):システムが動画をインポートする間隔。動画検索システムを構築するために使用しているサーバーのCPUコアは96である。そのため、間隔は0.5秒に設定することを推奨する。サーバーのCPUコアが少ない場合は、間隔を大きく設定してください。そうしないと、インポート処理でCPUに負担がかかり、ゾンビプロセスが生成されます。

import_data.pyを実行して動画をインポートします。

$ cd deploy
$ python3 import_data.py

動画のインポートが完了したら、動画検索システムの準備は完了です!

インターフェイスの表示

ブラウザを開き、192.168.1.38:8001と入力すると、以下のように動画検索システムのインターフェイスが表示されます。

6-video-search-interface.png 6-ビデオ検索インターフェース.png

右上の歯車スイッチを切り替えると、リポジトリ内のすべての動画が表示されます。

7-view-all-videos-repository.png 7-すべての動画を見る-リポジトリ.png

左上のアップロードボックスをクリックし、対象画像を入力します。下図のように、最も類似したフレームを含む動画が表示されます。

8-enjoy-recommender-system-cats.png 8-enjoy-recommender-system-cats.png

次に、動画検索システムを楽しんでみましょう!

自分で作る

この記事では、Milvusを使って、画像から動画を検索するシステムを構築しました。これは、非構造化データ処理におけるMilvusの応用例を示すものである。

Milvusは複数のディープラーニングフレームワークと互換性があり、数十億規模のベクトルに対してmilvusを使えばミリ秒での検索が可能だ。Milvusは、https://github.com/milvus-io/milvus、より多くのAIシナリオに自由に活用できる。

Twitterをフォローするか、Slackに参加してください!👇🏻

Like the article? Spread the word

続けて読む