視覚的 Q&A (VQA)

視覚的 Q&A (VQA) は、1 枚の画像に基づいたオープンエンドの質問に回答するタスクです。このタスクをサポートしているモデルでは通常、入力は画像と質問の組み合わせ、出力は自然言語で表現される回答となります。
VQA の注目すべきユースケースとして、以下のような例が挙げられます。

•視覚障がいのあるユーザーの利便性を高めるアプリケーション。

•教育: 講義や教科書で紹介された視覚教材についての質問。博物館の展示や史跡名所でのインタラクティブなガイドにも VQA は活用されています。

•顧客サービス、e コマース: VQA を使用して製品に関する質問をできるようにすることで、ユーザー体験を向上。

•画像検索: 特定の特徴を持つ画像の検索に VQA モデルを活用。例えば、ユーザーが「犬はいますか？」と質問すると、複数の画像の中から犬が写っている画像すべてを見つけることができます。

VQA の汎用アーキテクチャー:
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/13059371-06c0-f441-d06f-bfb720781612.png)

こちらは GenAIComps で定義されているコンポーネント・レベルのマイクロサービスを使用して実装した VisualQnA の例です。以下のフローチャートは、この実装例でのマイクロサービス間の情報の流れを示しています。
https://github.com/opea-project/GenAIComps

![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/e3aa8e5f-015b-1d08-7ecf-06c42ae30baf.png)

この例では、LLaVA-NeXT モデル (オープンソースの大規模マルチモーダル・モデル) をインテル® Gaudi® 2 アクセラレーターとインテル® Xeon® スケーラブル・プロセッサーに実装する方法を説明します。インテルは OPEA エコシステムを拡大するために、ハードウェア・ベンダー各社からの協力を募りました。
https://github.com/LLaVA-VL/LLaVA-NeXT
https://www.intel.co.jp/content/www/jp/ja/products/details/processors/ai-accelerators/gaudi-overview.html
https://www.intel.co.jp/content/www/jp/ja/products/details/processors/xeon.html
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/45e47601-f679-1e5b-f91c-db68e45028f6.png)

![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/cccaef2a-2d70-7003-1eb1-3dbe778ed27a.png)

【必要なモデル】
デフォルトでは llava-hf/llava-v1.6-mistral-7b-hf モデルに設定されています。別のモデルを使用する場合は、set_env.sh ファイル内の LVM_MODEL_ID 変数を更新してください。
https://github.com/opea-project/GenAIExamples/blob/main/VisualQnA/docker_compose/intel/hpu/gaudi/set_env.sh
![４２.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/aff85e2b-88f7-e380-0b78-12beee463b38.png)
必要に応じて、llava-hf/llava-v1.6-vicuna-13b-hf など、ほかの llava-next モデルを選択することも可能です。

【VisualQnA サービスの実装】
インテル® Gaudi® 2 アクセラレーターまたはインテル® Xeon® スケーラブル・プロセッサーのどちらでも、VisualQnA サービスを簡単に実装することができます。
現在サポートしているのは Docker Compose を使用した VisualQnA サービスの実装です。

【環境変数の設定】
VisualQnA サービスを実装するための環境変数の設定は、以下の手順で行います。
1.必要な環境変数を設定する
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/7df1e539-6535-3317-d330-79897f8a99be.png)

2.プロキシー環境の場合は、プロキシー関連の環境変数も設定する
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/28bb7965-570f-dece-3454-3cc529e8b448.png)

3.その他の環境変数を設定する
ハードウェアに合わせて環境を設定するには、以下のコマンドの中から 1 つしか選択できない点に注意してください。また、ポート番号が正しく設定されない可能性があります。
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/a2cd7212-b37b-c45f-4003-903edf5e2ce8.png)

【VisualQnA のインテル® Gaudi® アクセラレーターへの実装】
ソースから Docker イメージをビルドする方法については、インテル® Gaudi® アクセラレーターのガイドを参照してください。
https://github.com/opea-project/GenAIExamples/blob/main/VisualQnA/docker_compose/intel/hpu/gaudi/README.md
該当の compose.yaml を検索します。
https://github.com/opea-project/GenAIExamples/blob/main/VisualQnA/docker_compose/intel/hpu/gaudi/compose.yaml

![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/3789748e-ba7b-1c80-2c87-c4b0bb97a82f.png)

【VisualQnA のインテル® Xeon® プロセッサーへの実装】
ソースから Docker イメージをビルドする詳しい手順については、インテル® Xeon® プロセッサーのガイドを参照してください。
https://github.com/opea-project/GenAIExamples/blob/main/VisualQnA/docker_compose/intel/cpu/xeon/README.md

該当の compose.yaml を検索します。
https://github.com/opea-project/GenAIExamples/blob/main/VisualQnA/docker_compose/intel/cpu/xeon/compose.yaml

![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/3bf1efe0-2cc5-f51f-ad2e-fbe12e9639a5.png)