「LLaVAと一緒にあなたのビジョンチャットアシスタントを作りましょう」

「LLaVAと一緒にあなたの美容とファッションのビジョンチャットアシスタントを作りましょう」

オープンソースのLLaVAモデルを使ったマルチモーダル対話モデルの始め方

Izabela Krausによる写真、Unsplashから

イントロダクション

大規模言語モデルは、革命的な技術としてその価値を証明してきました。その能力を活用した多くのアプリケーションが既に開発され、さらに多くのアプリケーションが今後も期待されています。大規模言語モデルの中でも特に注目されているのは、ヒューマンフィードバックの指示調整と強化学習によってトレーニングされたチャットモデルであり、ヒューマンの指示に従いタスクを遂行するという非常に有望な機能を持っています。ただし、これらのモデルは言語のみのタスクには適用できるものの、他のモダリティを組み合わせる問題には制限があります。

マルチモーダル対話モデルは、自然言語と他のモダリティを組み合わせて解決する必要がある問題に大規模言語モデルのパワーを解き放つことを目指しています。特に、ビジョン言語モデルは、ビジョン機能をGPT-4Vに導入してから注目を集めています。GPT-4の自然言語の能力を画像理解と組み合わせることで、ビジョンと言語理解の両方を必要とするタスクにユーザーを支援する強力なチャットアシスタントが実現しました。GPT-4Vのビジョン機能は素晴らしいですが、クローズドソースのモデルはこの素晴らしい技術に対する研究と実験の潜在能力を制限してしまいます。幸いなことに、いくつかのオープンソースのモデルが登場し、ビジョン言語モデルのパワーをコミュニティで簡単にアクセス可能で透明性のある形で活用できるようになりました。これらのモデルは、オープンソースの大規模言語モデルの場合にも既に見られた計算とメモリの効率性に焦点を当てたトレンドを継続しています。この特徴は、これらのモデルの広範な採用を容易にする重要な特徴です。

このチュートリアルでは、Visual Instruction Tuning論文で紹介されたLLaVA(Large Language and Vision Assistant)モデルを使用したビジョンチャットアシスタントの作成手順を解説します。まず、LLaVAモデルとその改良点について簡単に紹介し、公式リポジトリで提供されているコードを使用したビジョンチャットアシスタントの簡単なコード実装について説明します。その後、モデルの能力と制限を示すために作成したいくつかの例を紹介します。

LLaVA

LLaVAモデルは、Visual Instruction Tuning論文で紹介され、さらにImproved Baselines with Visual Instruction Tuning(LLaVA-1.5とも呼ばれる)で改良されました。このモデルのアイデアは、言語トークンからの埋め込みと同じように、画像からビジュアル埋め込みを取得し、それらを大規模言語モデルにフィードすることです。直感的には、モデルが回答を生成するために「言葉」で画像を記述すると考えることができます。適切な「言葉」を選ぶために、モデルは事前にトレーニングされたCLIPビジュアルエンコーダを使用してビジュアル埋め込みを抽出し、それを言語モデルの単語埋め込み空間に投影します。後者の操作は、最初の論文Visual Instruction Tuningでは単純な線形層になっていましたが、後にImproved Baselines with Visual Instructionでより表現力のある多層パーセプトロン(MLP)に置き換えられました。モデルのアーキテクチャは以下のように描かれています。

LLaVAモデルのアーキテクチャ。射影Wは、LLaVAの単純な線形層またはLLaVA-1.5のMLPです。画像は、論文「Visual Instruction Tuning」からのものです。

この方法の利点の一つは、事前学習済みのビジョンエンコーダと言語モデルを使用することで、軽量なビジョン-言語接続モジュールのみをゼロから学習する必要がある点です。具体的には、LLaVAのトレーニングは2つのステージで行われます:

  • 特徴の整合性のための事前トレーニング:事前学習済みのビジョンエンコーダと言語モデルの重みを固定し、ビジョン-言語接続モジュールの重みのみを更新します。トレーニングサンプルは、テキスト-イメージのペアを単一のターンの会話にまとめたものです。このステージでは、ビジョンエンコーダの埋め込みを言語モデルのテキスト埋め込みと整合させるために、ビジョン-言語接続モジュールのトレーニングを行います。
  • ビジュアル指示のファインチューニング:このステージでは、ビジョンエンコーダの重みのみを固定し、ビジョン-言語接続モジュールと言語モデルを同時にファインチューニングします。モデルは、画像ベースの指示に従うタスクでファインチューニングされます。興味深いことに、このデータの一部は、画像のキャプションと図示されたエンティティのバウンディングボックスの座標を使用して、言語のみのGPT4を使用して指示に従うサンプルを作成するために作成されました。

ビジョンチャットボットの実装

公式リポジトリで提供されているコードを使用してビジョンチャットボットを作成するのは非常に簡単です。リポジトリはまた、入力を正しい形式で解析するために使用できる標準化されたチャットテンプレートも提供しています。モデルが生成する回答の品質のために、トレーニングで使用される正しい形式に従うことが重要です。正確なテンプレートは使用される言語モデルに依存します。事前学習済みのVicuna言語モデルを使用するLLaVA-1.5のテンプレートは次のようになります:

好奇心のあるユーザーと人工知能アシスタントとのチャット。アシスタントはユーザーの質問に対して、役に立つ、詳細な、丁寧な回答を提供します。ユーザー:<im_start><image><im_end> ユーザーのプロンプトアシスタント:アシスタントの回答ユーザー:別のプロンプト

最初の数行はモデルが使用する一般的なシステムプロンプトです。特別なトークン<im_start>、<image>、および<im_end>は、イメージを表す埋め込みの場所を示すために使用されます。

このチャットボットは、簡単なPythonクラスで定義することができます。

class LLaVAChatBot:    def __init__(self,                 model_path: str = 'liuhaotian/llava-v1.5-7b',                 device_map: str = 'auto',                 load_in_8_bit: bool = True,                 **quant_kwargs) -> None:        self.model = None        self.tokenizer = None        self.image_processor = None        self.conv = None        self.conv_img = None        self.img_tensor = None        self.roles = None        self.stop_key = None        self.load_models(model_path,                         device_map=device_map,                         load_in_8_bit=load_in_8_bit,                         **quant_kwargs)    def load_models(self, model_path: str,                    device_map: str,                    load_in_8_bit: bool,                    **quant_kwargs) -> None:        """モデル、プロセッサ、およびトークナイザをロードします。"""        quant_cfg = BitsAndBytesConfig(**quant_kwargs)        self.model = LlavaLlamaForCausalLM.from_pretrained(model_path,                                                           low_cpu_mem_usage=True,                                                           device_map=device_map,                                                           load_in_8bit=load_in_8_bit,                                                           quantization_config=quant_cfg)        self.tokenizer = AutoTokenizer.from_pretrained(model_path,                                                       use_fast=False)        vision_tower = self.model.get_vision_tower()        vision_tower.load_model()        vision_tower.to(device='cuda')        self.image_processor = vision_tower.image_processor        disable_torch_init()    def setup_image(self, img_path: str) -> None:        """イメージをロードして処理します。"""        if img_path.startswith('http') or img_path.startswith('https'):            response = requests.get(img_path)            self.conv_img = Image.open(BytesIO(response.content)).convert('RGB')        else:            self.conv_img = Image.open(img_path).convert('RGB')        self.img_tensor = self.image_processor.preprocess(self.conv_img,                                                          return_tensors='pt'                                                          )['pixel_values'].half().cuda()    def generate_answer(self, **kwargs) -> str:        """現在の会話から回答を生成します。"""        raw_prompt = self.conv.get_prompt()        input_ids = tokenizer_image_token(raw_prompt,                                          self.tokenizer,                                          IMAGE_TOKEN_INDEX,                                          return_tensors='pt').unsqueeze(0).cuda()        stopping = KeywordsStoppingCriteria([self.stop_key],                                            self.tokenizer,                                            input_ids)        with torch.inference_mode():            output_ids = self.model.generate(input_ids,                                             images=self.img_tensor,                                             stopping_criteria=[stopping],                                             **kwargs)        outputs = self.tokenizer.decode(            output_ids[0, input_ids.shape[1]:]        ).strip()        self.conv.messages[-1][-1] = outputs        return outputs.rsplit('</s>', 1)[0]    def get_conv_text(self) -> str:        """完全な会話テキストを返します。"""        return self.conv.get_prompt()    def start_new_chat(self,                       img_path: str,                       prompt: str,                       do_sample=True,                       temperature=0.2,                       max_new_tokens=1024,                       use_cache=True,                       **kwargs) -> str:        """新しい画像で新しいチャットを開始します。"""        conv_mode = "v1"        self.setup_image(img_path)        self.conv = conv_templates[conv_mode].copy()        self.roles = self.conv.roles        first_input = (DEFAULT_IM_START_TOKEN + DEFAULT_IMAGE_TOKEN +                       DEFAULT_IM_END_TOKEN + '\n' + prompt)  # f"{self.roles[0]}: {prompt}")        self.conv.append_message(self.roles[0], first_input)        self.conv.append_message(self.roles[1], None)        if self.conv.sep_style == SeparatorStyle.TWO:            self.stop_key = self.conv.sep2        else:            self.stop_key = self.conv.sep        answer = self.generate_answer(do_sample=do_sample,                                      temperature=temperature,                                      max_new_tokens=max_new_tokens,                                      use_cache=use_cache,                                      **kwargs)        return answer    def continue_chat(self,                      prompt: str,                      do_sample=True,                      temperature=0.2,                      max_new_tokens=1024,                      use_cache=True,                      **kwargs) -> str:        """既存のチャットを続けます。"""        if self.conv is None:            raise RuntimeError("既存の会話が見つかり

transformers ライブラリに慣れている方なら、通常の機能や操作は簡単に理解できるでしょう。ここでは、上記で定義された LLaVAChatBot クラスのメソッドを簡単に説明します。

  • load_models: このメソッドは、指定したパラメータを使用して言語モデル、トークナイザー、およびイメージプロセッサを BitsAndBytes ライブラリを使用して読み込みます。コードは、Hugging Face transformers モデルで使用される from_pretrained メソッドを影にします。BitsAndBytes を使用すると、モデルを8ビットまたは4ビットに量子化して、GPUのメモリ要件を削減することができます。
  • setup_image: このメソッドは、ローカルパスまたはURLからイメージを読み込み、イメージプロセッサを使用してテンソルに変換します。
  • generate_answer: このメソッドは、提供されたイメージに関する現在の会話を継続するモデルの回答を返します。LLaVa モデルの generate メソッドは、再度 Hugging Face transformers モデルの generate メソッドに類似しています。
  • get_conv_text: このメソッドは、これまでの会話の生のテキストを返します。
  • start_new_chat: これはチャットボットの2つの主要なメソッドの1つで、モデルとの新しいチャットを開始するために使用されます。モデルに渡すためのイメージと初期のプロンプトに基づいて新しい会話を作成します。このメソッドでは、リポジトリで定義されたテンプレートを使用して会話の設定を行い、前のセクションで説明した形式に従います。
  • continue_chat: これはもう1つの主要なメソッドで、イメージに関する既存の会話を続けます。

このColabノートブックには、コードの全体が提供されており、自分で試すことができます。

このセクションでは、モデルの能力をテストする中で得られたいくつかの興味深い例をまとめています。この投稿で紹介するすべての例は、8ビット量子化を使用したモデル llava-v1.5–7b を使用して作成されました。

まずはじめに、モデルがイメージの説明や理解を行う能力を見てみましょう。以下では、白いトラの写真を説明するようにモデルに頼んでいます。

Photo by Joshua J. Cotten on Unsplash
ユーザーと人工知能アシスタントの質問によるチャット。アシスタントはユーザーの質問に対して役に立つ、詳細で礼儀正しい回答を提供します。ユーザー: <im_start><image><im_end>画像を詳しく説明してください。 アシスタント: 画像は白いトラが岩盤や岩で横たわっているのが特徴であります。トラは環境にリラックスし快適である様子がうかがえます。トラの位置はイメージの左側からほぼ右側全体までをカバーしています。岩盤はこのシーンに自然で頑丈な背景を提供します。</s></s>ユーザー: このトラの特徴は何ですか? アシスタント: このトラは白いトラで、非常に珍しい目に鮮やかな変異体です。白いトラは遺伝子の変異により、毛皮が主に白く、体の他の部分はオレンジと黒のストライプの混合となるものです。この特徴的な外見は一般的なオレンジと黒のストライプ模様のトラとは異なります。</s></s>

モデルは画像を詳細に説明し、画像の主題についても理解する能力を持っているようです。白いトラが珍しい存在であると正しく判断しています。

次に、モデルがさまざまなタスクを実行するための実用的な手順をユーザーに提供できるかどうかをテストしました。これが「キャプション」モデルと真のビジョンチャットアシスタントの違いです。例えば、モデルが画像に含まれる材料からレシピを提供できるでしょうか?以下に結果を報告します。

Photo by ThermoPro on Unsplash
ユーザーと人工知能アシスタントとのやり取りのチャットです。アシスタントはユーザーの質問に対して、役に立つ、詳細で礼儀正しい回答を提供します。

ユーザー: <im_start><image><im_end>これらの材料で料理は何ができますか?
アシスタント: テーブルに表示されている材料で、おいしいローストディナーを準備することができます。大きな牛肉の一切れである肉は、オーブンで調味して焼くことができます。にんじん、ジャガイモ、たまねぎなどの野菜も肉と一緒にローストすることができます。また、ジャガイモ、にんじん、たまねぎで副菜を用意することもできます。この副菜はローストディナーと一緒に供されることができます。ソースの入ったボウルがあることから、それをディッピングソースとして使ったり、ローストや野菜の風味を引き立てるために使用することができます。材料の組み合わせ全体として、家族や友人と一緒に楽しむことができる、ハートフルで味わい深い食事が提供されます。</s></s>

ユーザー: 提案されたレシピはベジタリアンダイエットに含めることができますか?
アシスタント: 私が提案したレシピは、大きな牛肉と野菜を焼くものであり、ベジタリアンダイエットには適していません。この料理で牛肉が主要なタンパク源であり、肉を摂取しないベジタリアンには適していません。ただし、テーブルにある野菜とソースを使用して、ベジタリアン向けの食事を作ることはできます。たとえば、にんじん、ジャガイモ、たまねぎで野菜のローストを作り、添え物としてマッシュポテトや野菜ベースのソースを添えることができます。これにより、肉を含まない料理の風味と食感を楽しむことができます。</s></s>

ユーザー: 描かれた材料を最小限の変更でベジタリアンのレシピを提案してもらえますか?
アシスタント: もちろんです!テーブルにある材料を使って作ることができるベジタリアンのレシピを提案します。
ソース付きロースト野菜の盛り合わせ
材料:
- にんじん
- ジャガイモ
- たまねぎ
- オリーブオイル
- 塩
- コショウ
- ハーブ(タイム、ローズマリー、パセリなど)
- ソース(任意)

作り方:
1. オーブンを400°F(200°C)に予熱します。
2. にんじん、ジャガイモ、たまねぎを洗って皮をむき、一口サイズに切ります。
3. 大きなボウルで野菜をオリーブオイル、塩、コショウで和えます。
4. 焼き紙で覆った天板に野菜を均等に広げます。
5. 予熱したオーブンで20-25分間焼きます。野菜が柔らかく、少し焦げた色合いになるまで焼きます。
6. 必要に応じて、トマト、ニンニク、ハーブなどの材料を組み合わせてソースを作ります。このソースは野菜の味を引き立てるためにディッピングソースとして使用することができます。
7. 焼き野菜の盛り合わせをマッシュポテトや野菜ベースのソースと一緒に提供します。

このベジタリアンのレシピでは、牛肉を含まないで野菜の風味と食感を楽しむことができます。ソースは好みに合わせて簡単にカスタマイズすることができ、マッシュポテトや野菜ベースのソースなど、様々な添え物と一緒に提供することができます。</s></s>

このモデルは、画像に含まれる材料を理解しており、肉を含む料理がベジタリアンではないことなど、個々の単語をより抽象的な概念に関連付ける能力も備えているようです。

次に、このモデルをアドバイスを得るために使用する方法を見てみましょう。ブレインストーミング時に新しいアイデアを得るのに役立ち、ユーザーに実際の価値を提供することができる有用な機能です。以下の会話では、私はモデルにカフェの見た目を変えるための提案を求めました。
Photo by Michał Mancewicz on Unsplash
ユーザー: <im_start><image><im_end>このカフェをどのようにリノベーションすれば、よりヴィンテージな雰囲気になりますか?
アシスタント: カフェをよりヴィンテージな雰囲気にするために、以下の変更を考慮することができます:
1. 照明の更新:現在の照明をヴィンテージスタイルのランプやランタンに置き換えることで、温かく居心地の良い雰囲気を作り出します。
2. ヴィンテージの装飾品の追加:ヴィンテージ時計、アートワーク、デコラティブプレートなどのアンティークアイテムを取り入れることで、ノスタルジックな雰囲気を作り出します。
3. ヴィンテージ家具の使用:現在のスツールをヴィンテージスタイルの椅子やバースツールに置き換えることで、スペースに個性と魅力を加えることができます。
4. 緑の取り入れ:ポットやつる性植物などのより多くの緑を取り入れることで、豊かで魅力的な雰囲気を作り出します。
5. バーカウンターの更新:現在のバーカウンターをヴィンテージスタイルのものに交換し、ヴィンテージ風のバックスプラッシュとカウンタートップを完備したものにします。
6. ヴィンテージスタイルのグラスの使用:現在のグラス類をワイングラス、ビールジョッキ、カクテルシェーカーなどのヴィンテージスタイルのものに置き換えます。
7. ヴィンテージスタイルの看板の追加:現在の看板をヴィンテージスタイルのメニューボードや黒板に置き換えることで、スペースにノスタルジックな要素を加えます。
8. ヴィンテージスタイルの壁紙や塗装の使用:壁にヴィンテージスタイルの壁紙や塗装を施すことで、ユニークで魅力的な雰囲気を作り出します。

これらの変更を実行することで、カフェはよりヴィンテージで魅力的になり、客に忘れられない体験を提供することができます。</s></s>

アドバイスは的を射ているように見えますが、かなり一般的で、よりビンテージスタイルにするために変更できる要素を特定しています。

さて、日常の活動を支援する実用的なものについて続けましょう。モデルは広告やリスト作成のお手伝いができるでしょうか?

Eugene Chystiakov氏による写真(Unsplash)
私たちの好奇心旺盛なユーザーと人工知能アシスタントとのチャット。アシスタントはユーザーの質問に対して有益で詳細な礼儀正しい回答を提供します。ユーザー: <im_start><image><im_end>この椅子についての広告を書いてください。 アシスタント:モダンでスタイリッシュなブラックウッドチェアをご紹介します。どんな現代的な環境にもピッタリです。この椅子はシックなブラックの座面と木製のベースを備えており、どんな背景とも鮮やかな対比を作り出します。そのミニマリストデザインは、ダイニングチェア、サイドテーブル、またはリビングスペースのアイコンとして、どんな部屋にも適したアイテムです。このスタイリッシュで機能的な椅子は、日常の使用に耐える頑丈な作りと、すっきりとした外観により、どんな空間にも洗練を加えます。今日、このスタイリッシュで機能的な椅子でリビングスペースをアップグレードしましょう。</s></s>ユーザー: 同じ椅子について、カフェをターゲットにした広告を今すぐ書いてください。 アシスタント: カフェオーナーやデザイン愛好家の皆様へ!黒と木製の椅子をご紹介します。カフェの座席エリアに完璧なアイテムです。このスタイリッシュで機能的な椅子は、どんな背景とも鮮やかな対比を作り出すシックな黒い座面と木製ベースを提供します。そのミニマリストデザインは、ダイニングチェア、サイドテーブル、またはラウンジエリアのアイコンとして、どんなカフェにも適しています。この椅子は頑丈な作りなので、日常の使用に耐えられます。すっきりとした外観により、どんな部屋にも洗練をもたらします。今日、このスタイリッシュで機能的な椅子でカフェの雰囲気をアップグレードしましょう。</s></s>

モデルは、椅子の特徴を正確に把握し、異なるターゲットに対して要求された際に適切な回答をカスタマイズすることができます。

最後のテストとして、大規模言語モデルに優れた効果が示されているプロンプト技術をLLaVAでも使用できるかどうかを見てみましょう。以下はゼロショットの思考連鎖プロンプティングの例です。

Arnold Middelkoop氏による写真(Unsplash)
私たちの好奇心旺盛なユーザーと人工知能アシスタントとのチャット。アシスタントはユーザーの質問に対して有益で詳細な礼儀正しい回答を提供します。ユーザー: <im_start><image><im_end>画像に描かれている魚は水に投げ込むと浮くでしょうか?ステップバイステップで考えてください。 アシスタント:画像に描かれている魚は、水の中にあるレンガの歩道に横たわる大きな白い魚の彫像または像です。水に投げ込まれた場合、この魚は浮かびません。なぜなら、それは固体であり、無機物であるためです。その構成とサイズのため、浮力がなく、水の底に沈むでしょう。魚の位置と浮力の欠如により、水中で浮かぶことは不可能です。</s></s>ユーザー: 水上に浮かぶ魚の彫像を作るためにどのような材料が使用されるでしょうか? アシスタント: 水上に浮かぶ魚の彫像を作るためには、発泡スチロールやポリエチレンフォームなどの軽量で浮力がある材料を使用することができます。これらの材料は、救命胴衣、浮力具、釣り浮きなどの浮力物体の製作に一般的に使用されています。フォームを魚の形に成形することで、実際の魚の挙動をシミュレートし、水の表面に浮かぶことができます。</s></s>

モデルは、魚が浮かない理由を説明し、それが実際の魚ではないことを正しく識別しています。また、最終的な回答を提供する前にステップバイステップで考えるよう指示に従っています。比較のために、同じ会話の「ステップバイステップで考える」プロンプトなしの例も以下に示します。

ユーザーとAIアシスタントの間のチャット。アシスタントはユーザーの質問に対して役に立ち、詳細で礼儀正しい回答を提供します。

ユーザー: <im_start><image><im_end>画像に描かれた魚は水に投げ込むと浮くでしょうか?
アシスタント: いいえ、画像に描かれた魚は水に投げ込んでも浮きません。それは大きくて白い石でできた魚の彫刻であり、実際の魚ではなく天然魚の浮力特性を持っていません。

最終的な答えは正しいですが、この場合の説明は詳細ではなく、答えが文の先頭で提供されます。LLaVAが使用する生成言語モデルは因果関係があるため、提供された回答は後続の説明に依存しません。Chain of Thought (CoT)が、Large Language ModelsにおけるChain-of-Thought Prompting Elicits Reasoning in Large Language ModelsとLarge Language Models are Zero-Shot Reasonersで観察されているような複雑な推論タスクにおいて、ビジョン-言語モデルのパフォーマンスを一般的に改善できるかどうかを検証するために、より広範な実験を行うことは興味深いでしょう。

制約
非常に強力ですが、LLaVAにはいくつかの制約があります。例えば、モデルはチャットごとに1つの画像のみを使用するように訓練されているため、複数の画像との対話を必要とするより複雑な会話に対応することはできません。ただし、この制限はモデルのアーキテクチャに固有のものではなく、訓練中に複数の画像チャットデータを含めることで修正できます。

テスト中に、モデル(8ビット量子化されたバージョンの1.5 7bモデル)は、画像内の要素のカウントや一般的な数字の処理に苦労していることがわかりました。以下に例を示します。

ユーザー: <im_start><image><im_end>駐車場内にはいくつの車がありますか?
アシスタント: 駐車場内にはいくつかの車が駐車しています。
ユーザー: 駐車スポットの数をリストアップして、車がどこに駐車しているか教えてください。
アシスタント: 車が駐車している場所は66、67、68、69、70、71です。

モデルは、すべてのLarge Language Modelsと同様に幻覚を起こし、適切なプロンプトを使用して簡単に間違いを犯す可能性があります。例えば、砂漠の写真を提供して、画像内の魚の種類を尋ねると、砂漠の魚と幻覚を見ることがあります。

結論

LLaVAは、ビジョンと言語の理解において印象的な能力を示しています。これは、マルチモーダルオープンソースのビジョン言語モデルにおいて、明確な進歩を示しています。LLaVAの最大の利点の1つは、トレーニングと微調整が容易であることです。たとえば、LLaVA 1.5 13bの完全なトレーニングには、わずか1.2Mのデータと1日程度の時間が、単一の8-A100ノードで必要でした。そのため、特定のドメインでの微調整に適しており、専門のアシスタントを得るために使用されました。詳細はLLaVA-Med:1日でバイオ医学のための大規模な言語とビジョンのアシスタントをトレーニングするで確認できます。

ビジョンの機能をチャットアシスタントに追加することで、これらのモデルの適用範囲が広がり、より複雑で微妙なタスクにも革命的な可能性をもたらすことができます。画像特徴を言語トークンとして扱うことで、テキストのみの言語モデルで使用される先進的なプロンプティング技術を使用する可能性も広がります。たとえば、会話に関連するテキストと画像の両方を検索して、Retrieval Augmented Generationの能力を拡張することができます。実際、CLIPの共有画像テキスト埋め込み空間を使用すると、入力テキストや画像から外部ドキュメントや外部画像を検索することが可能です!

モデルの能力を拡張するもう一つの興味深い方向性は、LLaVA-Interactive:画像チャット、セグメンテーション、生成、編集のためのオールインワンデモで紹介されています。主なアイデアは、ビジョン-言語チャットモデル、テキスト-画像生成モデル、および他のビジョンモデル(画像セグメンテーションモデルなど)のさまざまな能力を組み合わせて、マルチモーダルな入力を処理し、マルチモーダルな出力を生成するアシスタントを作成することです。

結論として、LLaVAは印象的な能力を持ち、多くの関心を集めるオープンソースのマルチモーダル生成モデルにおいて重要な進歩を遂げました。オープンソースモデルのより広範な採用に伴い、これらのパワフルなモデルの新しい応用の急速な増加を目の当たりにすることができると信じています。

お読みいただきありがとうございました!コードをご自分で試してみたい場合は、このColabノートブックをご覧ください。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more