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

ブログ    

推薦する

機械学習がサプライチェーン管理を変える10の方法

[[431487]]サプライチェーン管理で機械学習を使用すると、日常的なタスクを自動化できるため、企...

Transformer ではまだ注意が必要ですか?

ここ数週間、AI コミュニティでは、注意を必要としないアーキテクチャを使用して言語モデルを実装すると...

GPTストア立ち上げの裏側:民間開発者のグループが儲かり、スタートアップのグループが消滅

ノア著制作:51CTO テクノロジースタック(WeChat ID:blog)昨年末に一連の「宮廷闘争...

ChatGPTのAndroid版は来週リリースされます! OpenAIがAI帝国のパズルの最後のピースを完成させる

OpenAIが発表した最新ニュースによると、ChatGPTのAndroid版は来週Google Pl...

Google が 11 の言語をカバーする TyDi QA コーパスをリリース

[[315942]]多言語の質問応答技術の研究を促進するために、Google は 11 種類の言語を...

人工知能がウェブホスティング業界に優位性をもたらす

近年、ウェブホスティング業界は劇的に変化しました。そして、業界を永遠に変える可能性のあるいくつかのト...

...

MIT スタンフォード トランスフォーマーの最新研究: 過剰トレーニングにより、中程度のモデルが構造一般化能力を「発現」できるようになる

人間にとって、文章は階層的です。文の階層構造は表現と理解の両方にとって非常に重要です。しかし、自然言...

コンピュータビジョンディープラーニングにおける8つのよくあるバグ

コンピューター ビジョンのディープラーニングでよくある 8 つのバグをまとめました。誰もが多かれ少な...

人工知能は人間の臨床試験に取って代わることができるでしょうか?

2013年のノーベル化学賞受賞者であるアリエ・ワーシェル氏は、COVID-19パンデミックと製薬業...

Python+AI で古い写真をカラー化

こんにちは、みんな。今日も引き続き、興味深い AI プロジェクトを皆さんと共有したいと思います。前回...

一般開発者もBaidu Brain Industry Application Innovation Challengeに参加して大きな賞金を獲得できる

[51CTO.comからのオリジナル記事] 2018年、人工知能の発展は消費者向け人工知能から企業向...

工業情報化部の李英査察官:我が国の人工知能の発展は歴史的な好機を迎えている

[[253791]]工業情報化部情報技術・ソフトウェアサービス局検査官 李英氏李英氏は、一連の措置を...

機械学習をよりスマートにする 5 つの成功事例

人工知能と機械学習は企業の世界で注目を集めており、組織はますますこれらのテクノロジーを活用して顧客の...

人間の脳神経の「100万分の1」の3D接続マップを描きます!膨大な量のデータは14億個の1Tハードドライブを埋め尽くす

少し前に、Google とハーバード大学が共同で、人間の脳の神経の 3D 接続マップを公開しました。...