LLaVA: GPT-4V(ision) のオープンソース代替品

LLaVA: GPT-4V(ision) のオープンソース代替品

LLaVA (Large Language and Vision Assistant) は、画像翻訳における OpenAI GPT-4 の機能の一部を再現する、有望なオープンソース生成 AI モデルです。ユーザーは LLaVA チャット会話に画像を追加して、その画像の内容について話し合ったり、アイデア、コンテキスト、状況を視覚的に説明する手段として使用したりできます。

LLaVA の最も魅力的な機能は、よりシンプルなモデル アーキテクチャと桁違いに少ないトレーニング データを使用しながら、他のオープン ソース ソリューションを改善できることです。これらの機能により、LLaVA はトレーニングがより高速かつ安価になるだけでなく、コンシューマー ハードウェアでの推論にもより適したものになります。

この投稿では、LLaVA の主な機能について具体的に説明します。

  • Web インターフェースから実験を実行する方法と、それをコンピューターまたはラップトップにインストールする方法を示します。
  • 主な技術的特徴を説明します。
  • これを使用したプログラミング方法の例として、Google Colab で HuggingFace ライブラリ (Transformers と Gradio) を使用して簡単なチャットボット アプリケーションを構築します。

LLaVAオンラインの使用

まだ試したことがない場合は、LLaVA を使用する最も簡単な方法は、作成者が提供する Web インターフェイス (https://llava.hliu.cc/) にアクセスすることです。以下のスクリーンショットは、ユーザーが冷蔵庫の中身の写真を見ながら食べ物の食べ方を尋ねるインターフェースの動作を示しています。インターフェースの左側にあるウィジェットを使用して画像を読み込むことができ、チャット インターフェースでは質問してテキスト形式で回答を得ることができます。

LLaVA ウェブインターフェース

この例では、LLaVA は、ブルーベリー、イチゴ、ニンジン、ヨーグルト、牛乳など、冷蔵庫にある材料を正しく識別し、フルーツサラダ、ミルクセーキ、ケーキなどの関連するアイデアを提案しました。

LLaVA との会話の他の例は、プロジェクトの Web サイト (https://llava-vl.github.io/) で公開されています。これらの例では、LLaVA が画像を記述できるだけでなく、画像内の要素に基づいて推論および推論できることが示されています (写真の手がかりを使用して映画や人物を識別したり、絵に基づいて Web サイトをエンコードしたり、ユーモラスな状況を解釈したりするなど)。

LLaVA をローカルで実行する

LLaVA は、Ollama (https://ollama.ai/) または Mozilla の「llamafile」(https://github.com/Mozilla-Ocho/llamafile) を使用してローカル マシンにインストールすることもできます。ツールは CPU のみを使用してほとんどのコンシューマー グレードのマシンで実行できます。また、モデルに必要なのは 8 GB の RAM と 4 GB の空きディスク領域のみなので、Raspberry Pi でも正常に実行できます。 Ollama プロジェクトを中心に開発されたツールとインターフェースの中で、注目すべきアプローチの 1 つが Ollama WebUI (https://github.com/ollama-webui/ollama-webui、以下を参照) です。これは、OpenAI ChatGPT ユーザー インターフェースのルック アンド フィールを再現します。

Ollama Web UI — OpenAI ChatGPT にインスパイアされた

LLaVAの主な機能の概要

LLaVA はウィスコンシン大学マディソン校、マイクロソフト リサーチ、コロンビア大学の研究者によって設計され、最近 NeurIPS 2023 で発表されました。プロジェクトのコードと技術仕様は、Github リポジトリ (https://github.com/haotian-liu/LLaVA) からアクセスできます。このリポジトリには、アシスタントと対話するためのさまざまなインターフェースも用意されています。

著者らは論文の要約で次のようにまとめている。

「LLaVA は 11 のベンチマークで最先端の結果を達成しました。最終的な 13B チェックポイントでは、公開されている 120 万データのみを使用し、8-A100 クラス ノード 1 台で約 1 日で完全にトレーニングされます。これにより、最先端の LMM 研究がより利用しやすくなることを期待しています。コードとモデルは両方ともオープン ソースとしてリリースされます。」

論文でレーダープロットとして報告されたベンチマーク結果は、他の最先端モデルに対する改善を示しています。

LLaVA ベンチマーク結果のレーダーチャート (論文からの画像 https://arxiv.org/pdf/2304.08485.pdf)

内部の仕組み

LLaVA のデータ処理ワークフローは概念的には単純です。このモデルは本質的には、言語指示 (ユーザーのテキスト プロンプト) を入力として受け取り、言語応答を返す標準的な因果言語モデルです。言語モデルの画像処理能力は、画像を言語トークンに変換し、ユーザーのテキストプロンプトに「静かに」追加される(一種のソフトヒントとして機能)別のビジュアルエンコーダーモデルによってサポートされています。 LLaVA の全体的な実装プロセスを次の図に示します。

LLaVA ネットワーク アーキテクチャ (論文からの画像 https://arxiv.org/pdf/2304.08485.pdf)

LLaVA の言語モデルとビジュアル エンコーダーは、それぞれ Vicuna と CLIP という 2 つの参照モデルに依存しています。その中で、Vicuna(https://lmsys.org/blog/2023-03-30-vicuna/)は、中規模LLMと競合するパフォーマンスを備えたLLaMA-2(Meta設計)に基づく事前トレーニング済みの大規模言語モデルです(HuggingFaceの7Bおよび13Bバージョンのモデルカードを参照)。 CLIP (https://openai.com/research/clip) は、OpenAI が設計した画像エンコーダーで、Contrastive Language Image Pre-training (「CLIP」という名前の由来) 技術を使用して事前トレーニングされており、同様の埋め込み空間で画像とテキストをエンコードできます。 LLaVA で使用されるモデルは、Vision Transformer バリアント CLIP-ViT-L/14 です (HuggingFace のモデル カードを参照: https://huggingface.co/openai/clip-vit-large-patch14)。

ビジュアルエンコーダーのサイズを言語モデルのサイズと一致させるために、投影モジュール(上図のW)が適用されます。これは実際には、オリジナルの LLaVA では単純な線形投影であり、LLaVA 1.5 では 2 層のパーセプトロンです。

トレーニングプロセス

LLaVA のトレーニング プロセスは、比較的単純な 2 つの段階で構成されます。

最初のステージは投影モジュール W を微調整するためだけのものであり、このステージではビジュアル エンコーダと LLM の重みは固定されたままになります。このステージは、HuggingFace のリポジトリ (https://huggingface.co/datasets/liuhaotian/LLaVA-Instruct-150K) で無料で入手できる CC3M 概念キャプション データセット (https://ai.google.com/research/ConceptualCaptions/) の約 60 万個の画像/キャプション ペアのサブセットを使用してトレーニングされます。

第 2 段階では、158K の言語画像命令のデータセットを使用して、投影モジュールの重み W が LLM の重みとともに微調整されます (ビジュアル エンコーダの重みは固定されたまま)。このデータは GPT4 を使用して生成され、会話の例、詳細な説明、複雑な推論を特徴としており、HuggingFace のリポジトリで無料で入手できます。

トレーニング全体には、8 つの A100 GPU を使用して約 1 日かかります。

LLaVA 基本プログラミング

このセクションの関連コードは、関連する Colab ノートブック ファイル (https://colab.research.google.com/drive/1L28bJX14-Y5lJvswYwydsletYFMIxVH5) から取得できます。

LLaVA モデルは Transformers ライブラリに統合されており、標準のパイプライン オブジェクトを使用して読み込むことができます。モデルの 7B バリアントと 13B バリアントは両方とも LLaVA リポジトリ スペースで無料で入手でき、GPU メモリを節約するために 4 ビットと 8 ビットでロードできます。次に、T4 TPU (15GB RAM GPU) を搭載した Colab で実行できるコードを使用してモデルをロードして実行する方法を説明します。

以下は、LLaVA 1.5 の 7B バリアントを 4 ビット モードでロードするコード スニペットです。

 from transformers import pipeline, BitsAndBytesConfig import torch quantization_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_compute_dtype=torch.float16 ) model_id = "llava-hf/llava-1.5-7b-hf" pipe = pipeline("image-to-text", model=model_id, model_kwargs={"quantization_config": quantization_config})

次に、この画像を読み込みます。

画像を読み込むには標準の PIL ライブラリを使用します。

 import requests from PIL import Image image_url = "https://cdn.pixabay.com/photo/2018/01/29/14/13/italy-3116211_960_720.jpg" image = Image.open(requests.get(image_url, stream=True).raw) image

最後に、画像と画像の説明を求めるプロンプトを使用して LLaVA モデルをクエリしてみましょう。

プロンプトの形式 (https://huggingface.co/docs/transformers/model_doc/llava) は次のようになります。

 “USER: <image>\n<prompt>\nASSISTANT:”

関連するコードは次のとおりです。

 prompt = "USER: <image>\nDescribe this picture\nASSISTANT:" outputs = pipe(image, prompt=prompt, generate_kwargs={"max_new_tokens": 200}) print(outputs[0]['generated_text'])

次のような回答が返されました。

 USER: Describe this picture ASSISTANT: The image features a large, empty amphitheater with a stunning view of the ocean in the background. The amphitheater is surrounded by a lush green hillside, and a majestic mountain can be seen in the distance. The scene is serene and picturesque, with the sun shining brightly over the landscape.

LLaVA チャットボットの作成

最後に、LLaVA モデルに依存するシンプルなチャットボットを作成しましょう。機械学習 Web インターフェースをすばやく簡単に作成できる Gradio ライブラリ (https://www.gradio.app/) を使用します。

インターフェースのコアは、画像アップロード コンポーネント (Gradio 画像オブジェクト) とチャット インターフェース (Gradio ChatInterface オブジェクト: https://www.gradio.app/docs/chatinterface) を含む 1 行のコードで構成されています。

 import gradio as gr with gr.Blocks() as demo: with gr.Row(): image = gr.Image(type='pil', interactive=True) gr.ChatInterface( update_conversation, additional_inputs=[image] )

チャット インターフェイスは、会話履歴を保存し、ユーザーがメッセージを送信したときに応答するために LLaVA モデルを呼び出す関数 update_conversation に接続されています。

 def update_conversation(new_message, history, image): if image is None: return "Please upload an image first using the widget on the left" conversation_starting_from_image = [[user, assistant] for [user, assistant] in history if not assistant.startswith('Please')] prompt = "USER: <image>\n" for i in range(len(history)): prompt+=history[i][0]+'ASSISTANT: '+history[i][1]+"USER: " prompt = prompt+new_message+'ASSISTANT: ' outputs = pipe(image, prompt=prompt, generate_kwargs={"max_new_tokens": 200, "do_sample" : True, "temperature" : 0.7})[0]['generated_text'] return outputs[len(prompt)-6:]

次のコードは、launch メソッドを呼び出してインターフェイスを起動します。

 demo.launch(debug=True)

数秒後、チャットボットの Web インターフェイスが表示されます。

おめでとうございます。LLaVA チャットボットが正常に起動しました。

注: 特に記載のない限り、記事内のすべての画像は著者から提供されています。

参考文献

  • HuggingFace LLaVA モデルのドキュメント、https://huggingface.co/docs/transformers/model_doc/llava。
  • Llava Hugging Face 組織、https://huggingface.co/llava-hf。
  • AutoPrecessor と LLaVAForConditionalGeneration を使用して LLaVA をロードして実行します: Colab ノートブック、https://colab.research.google.com/drive/1_q7cOB-jCu3RExrkhrgewBR0qKjZr-Sx。
  • GPT-4V(ision) システム カード、https://cdn.openai.com/papers/GPTV_System_Card.pdf。
  • 視覚的指導のチューニングを理解する、https://newsletter.artofsaience.com/p/understanding-visual-instruction。

翻訳者紹介

Zhu Xianzhong 氏は、51CTO のコミュニティ エディターであり、51CTO の専門ブロガー兼講師であり、濰坊の大学のコンピューター教師であり、フリーランス プログラミング コミュニティのベテランです。

原題: LLaVA: GPT-4V(ision) のオープンソース代替、著者: Yann-Aël Le Borgne

リンク: https://towardsdatascience.com/llava-an-open-source-alternative-to-gpt-4v-ision-b06f88ce8efa.

<<:  BEV の可能性の限界を探ろう! DA-BEV: 新しい教師なし BEV SOTA ソリューション!

>>:  AIエンジニアリングのためのJavaScriptツールトップ5

ブログ    

推薦する

...

清華大学唐傑チーム: NLP事前トレーニングモデルの歴史の簡単な紹介

[[422829]]この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI...

...

AES と RSA 暗号化アルゴリズムの違いと適用可能なシナリオの簡単な分析

[[438491]]情報データ伝送のセキュリティは、常に非常に重要なテーマです。プログラマーとして働...

人工知能やロボットによって仕事が奪われた後、人々の収入はどこから来るのでしょうか?考えるための材料

中国の現在の経済社会発展の最大の原動力は科学技術の進歩である。特に米国によるファーウェイとZTEの規...

人工知能の市場推進要因、制約、機会

今日、ますます多くの企業が、事業運営に人工知能技術を活用しています。このテクノロジーは非常に建設的で...

1行のコードで顔認識を実装する方法を教えます

概要: 顔認識を実現するための 1 行のコード、1. まず、システムに認識させたいすべての人の写真が...

...

AIがソフトウェアテストを変える5つの方法

[51CTO.com クイック翻訳] AI技術は、ソフトウェアテスト作業を5つの方法で変えています。...

マイクロソフトがローブを買収:一般の人々が人工知能を簡単に利用できるように

マイクロソフトは、人工知能はテクノロジー大手が反体制派を排除するための武器として利用されるべきではな...

...

システムの観点から見た中国の人工知能開発の現状

第四次産業革命が急速に起こりつつあります。人工知能はこの産業革命の中核となる内容の一つです。産業革命...

ネット全体が「被験者3」を真似し、メッシ、アイアンマン、二次元の女の子が即勝利

最近、「被験者 3」について多かれ少なかれ耳にしたことがあるかもしれません。握手、軽く捻挫した足、リ...