【Llama-3-EvoVLM-JP-v2】SakanaAI発の複数の画像対応VLMに様々な食材画像を読ませてレシピ考えさせてみた
Llama-3-EvoVLM-JP-v2の概要
Llama-3-EvoVLM-JP-v2は、Sakana AIが開発した日本語対応の視覚言語モデルで、複数の画像を同時に処理し、それに基づいて日本語で質問応答ができるのが特徴です。
このモデルは、進化的モデルマージ技術というSakana AIが開発したモデル構築手法を用いて開発され、英語の視覚言語モデル、日本語の言語モデル、単一画像モデルの長所を組み合わせています。
以下にLlama-3-EvoVLM-JP-v2の特徴をまとめます。
- 複数の画像を扱え日本語で応答可能
- 強力なオープンソースLLMであるLlama-3をベースにしたモデルを使うことで、以前リリースしたVLMと比較して、多くの評価指標において性能が向上
- 作成したモデルと複数の画像についての日本語での質疑応答能力を問う評価用データセットも公開
Llama-3-EvoVLM-JP-v2の実際の解答例を紹介します。
このように、複数の画像に対して日本語で質疑応答ができる高性能なVLMになっています。
これは、「複数の画像を扱える英語のVLM」と「日本語の能力に長けたLLM」、「単一画像の説明能力が高いVLM」の3つのモデルを進化的マージを用いて組み合わせた結果です。
その性能もかなり高く、以下の表は複数画像に対する日本語での質疑応答能力について評価した結果です。
GPT-4oの半分程度のスコアですが、同じVLMモデルのMantis-8B-SigLIPと比較すると、その日本語能力の高さが伺えます。
Sakana AIは今後、Llama 3.1 405Bのような超大規模なLLMを用いて日本語VLMを開発し、GPT-4oのような最先端のクローズドモデルに並ぶ日本語のモデルを構築することを目指しています。
Llama-3-EvoVLM-JP-v2のライセンス
Llama-3-EvoVLM-JP-v2はMETA LLAMA 3 COMMUNITY LICENSEのもとで提供されており、再配布や改変等は他のオープンソースモデルと同じように許可されていますが、商用利用には条件がある場合があります。
また、ライセンス上は商用利用や再配布が許可されていますが、このモデルは研究開発目的で構築されたモデルであり、商用利用などは推奨されていません。
利用用途 | 可否 |
---|---|
商用利用 | ⭕️ ※月間アクティブユーザー数7億人超えの場合、 ライセンスをリクエストする必要あり |
改変 | ⭕️ |
配布 | ⭕️ |
特許使用 | – |
私的使用 | ⭕️ |
なお、Llama 3について詳しく知りたい方は、下記の記事を合わせてご確認ください。
Llama-3-EvoVLM-JP-v2の使い方
まずは、Mantis を使用した推論用のパッケージをインストールする必要があります。
pip install git+https://github.com/TIGER-AI-Lab/Mantis.git
続いて以下のコードを実行することで、モデルのロードと推論の実行が行われます。
ソースコードはこちら
import requests
from PIL import Image
import torch
from mantis.models.conversation import Conversation, SeparatorStyle
from mantis.models.mllava import chat_mllava, LlavaForConditionalGeneration, MLlavaProcessor
from mantis.models.mllava.utils import conv_templates
from transformers import AutoTokenizer
# 1. Set the system prompt
conv_llama_3_elyza = Conversation(
system="<|start_header_id|>system<|end_header_id|>\n\nあなたは誠実で優秀な日本人のアシスタントです。特に指示が無い場合は、常に日本語で回答してください。",
roles=("user", "assistant"),
messages=(),
offset=0,
sep_style=SeparatorStyle.LLAMA_3,
sep="<|eot_id|>",
)
conv_templates["llama_3"] = conv_llama_3_elyza
# 2. Load model
device = "cuda" if torch.cuda.is_available() else "cpu"
model_id = "SakanaAI/Llama-3-EvoVLM-JP-v2"
processor = MLlavaProcessor.from_pretrained("TIGER-Lab/Mantis-8B-siglip-llama3")
processor.tokenizer.pad_token = processor.tokenizer.eos_token
model = LlavaForConditionalGeneration.from_pretrained(model_id, torch_dtype=torch.float16, device_map=device).eval()
# 3. Prepare a generate config
generation_kwargs = {
"max_new_tokens": 128,
"num_beams": 1,
"do_sample": False,
"no_repeat_ngram_size": 3,
}
# 4. Generate
text = "<image>の信号は何色ですか?"
url_list = [
"https://images.unsplash.com/photo-1694831404826-3400c48c188d?q=80&w=2070&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D",
"https://images.unsplash.com/photo-1693240876439-473af88b4ed7?q=80&w=1974&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D"
]
images = [
Image.open(requests.get(url_list[0], stream=True).raw).convert("RGB")
]
response, history = chat_mllava(text, images, model, processor, **generation_kwargs)
print(response)
# 信号の色は、青色です。
# 5. Multi-turn conversation
text = "では、<image>の信号は?"
images += [
Image.open(requests.get(url_list[1], stream=True).raw).convert("RGB")
]
response, history = chat_mllava(text, images, model, processor, history=history, **generation_kwargs)
print(response)
# 赤色
画像やプロンプトは、適宜変更してください。
また、ローカルで実装する以外にも、Hugging Face Spaceでデモが公開されているので、そちらから気軽に試すこともできます。
ここからは、様々な画像を入力してLlama-3-EvoVLM-JP-v2がどのような回答を出力するか検証します。
Llama-3-EvoVLM-JP-v2に様々な画像を入力して検証!
まずは、2枚の歌詞カードの画像を入力して、何の曲か当てられるか検証します。
なお、Llama-3-EvoVLM-JP-v2は画像をプロンプトの好きな場所に入力として配置できます。
その際は、任意の位置に「<image>」と入力します。
それでは早速検証していきましょう。
以下のプロンプトと画像を入力します。
プロンプト:
<image><image>この2枚の画像にある歌詞の曲は何?
入力画像:
結果はこのようになりました。
Llama-3-EvoVLM-JP-v2の結果はこちら
この2枚の歌詞画像は、YUIの「You are always on my mind」です。
正解は宇多田ヒカルの「First Love」なので、残念ながら不正解です。
さすがに8B程度の知識かつLlama 3がベースなので、この問題は難しかったかもしれません。
続いて、トマトとチーズの画像を入力して、これらでどのような料理が作れるか質問してみます。
以下のプロンプトと画像を入力します。
プロンプト
<image><image>1枚目の画像と2枚目の画像の食材でどのような料理ができますか?
結果はこのようになりました。
Llama-3-EvoVLM-JP-v2の結果はこちら
1枚目と2 枚目の画像で、以下の料理ができる可能性があります。
- Cheese Platter: 1枚の画像は、チーズの種類を選ぶことができます。2 枝のローズマリーと1個のレモンを加え、チョコレートをトッピングして、美しいチーズ プレートを作ることができます。
- Cheese Fondue: 2 枕の画像でチーズを準備し、白ワインを加えて、チース フォンデュの準備ができます。
結果はこのようにチーズのみを使った料理を2つ提案しました。
トマトの画像は認識しているようですが、出力に反映されていません。
日本語能力は比較的高いようですが、画像認識能力には疑問が残ります。
最後は、その画像認識能力をさらに深堀りするため、間違い探しをさせてみます。
間違い探しは高い画像認識能力が求められるので、果たしてどのような結果になるでしょうか。
以下のプロンプトと画像を入力します。
プロンプト:
<image>画像内の右と左の絵には違うところが7か所あります。どこが違うか教えてください。
結果はこのようになりました。
Llama-3-EvoVLM-JP-v2の結果はこちら
左の画像と右の画像は、以下の7か所で異なります。
- 女の子の服の色が異なる。
- 女子高生の服が異なっている。
- 女子の服が黄色と白色に異なっています。
- 女子は黄色の服を着ています。
- 女性の服は黄色に変化しています。
- 女は黄の服に変身しています。
- 女の服色が黄に変わりました。
結果は全く違う解答を出力しました。
正解はこちらです。
- 太陽の有無
- 女の子の右側のピンク色のアジサイの花の数
- 犬のベロ
- 後ろのビルの窓の数
- 女の子の服のボタンのデザイン
- てるてる坊主の表情
- 長靴のデザイン
一つも正解していません。
すべて真ん中に写っている女の子に関連する内容になっており、女の子の存在は認識しているようですが、左右の絵の違いを認識する能力はないようです。
さらに、日本語も不自然になっていることが分かります。
今回の検証の結果、Llama-3-EvoVLM-JP-v2の画像認識能力と日本語能力はまだまだ改善の余地があることが分かりました。
今後、さらに大きなモデルで日本語VLMを構築するようなので、そちらに期待しましょう!
なお、Sakana AIが開発した進化的モデルマージ技術について詳しく知りたい方は、下記の記事を合わせてご確認ください。