📷

LLama3.2 11B にて画像入力を試す

2024/09/27に公開

こんにちは!
株式会社テックピットでテックリードをしている土川です。

テックピットでは、プログラミング教材プラットフォームの「techpit.jp」や、企業向けのスキルマップ管理SaaSの「SkillDB」を運営しています。

skilldb

弊社のサービスでも、裏のスキルデータ作成やシステム開発自体にLLMを活用しています。

今回は、つい最近リリースされたマルチモーダルなオープンモデルである llama3.2 11Bにて画像入力を試してみました。

llama3.2 について

Meta(旧Facebook)が開発しているLLMの最新バージョンです。

llama3.2ではスマホでも動かせる小さいモデルが追加された

少し前に発表されたllama3.1 405Bは、オープンモデルなのに性能がGPT-4に匹敵すると話題になりました。

とはいえ、405Bという巨大なモデルを動かすのは、それなりのリソースが必要で、家庭用のPCでは動かすのは難しいです。

少し小さい70Bのモデルでも、それなりの複数のGPUを使って動かす必要があります。

一番小さい8Bのモデルでも、それなりのテキストの生成速度を求めるなら、高性能なPCが必要でした。

そこで、llama3.2ではスマホでも動かせる1B, 3Bのモデルが追加されました。

1B、3Bのモデルを試したい方は、ollamaなどで簡単に動かせるので試してみてください。

llama3.2 11B以上はマルチモーダル化

llama3.2 11B以上は、マルチモーダルなモデルとなっています。

そのため、画像入力をすることができます。

今まで、オープンなマルチモーダルモデルは他にもありましたが、llama3.xは性能が高く、期待できます。

また、多くの日本企業が、llama3.xを追加学習して、日本語が得意なモデルなどを作っているため、llama3.2のマルチモーダル化で、日本語が得意なマルチモーダルモデルの登場が期待できます。

llama3.2 11B をTransformersで試す

一番お手軽に動かせるollamaを使いたいところですが、今のところ対応していないので、普通にtransformersを使って試してみます。

Hugging Faceへの登録とローカル環境でのログイン

今までollamaなどのツールしか使っていない場合、Hugging Faceに登録していないと思います。

その場合は、まずはHugging Faceに登録しましょう。

その後、以下のページを参考にローカル環境でログインします。

Hugging Faceの使い方!アクセストークン作成からログインまで

llama3.2 の使用許可を貰う

Hugging Face上のモデルの一部は、使用許可を貰う必要があります。
ログイン状態で以下のURLにアクセスすると、モデルの使用許可を求めるフォームが表示されているので入力して送信します。

案外、すぐに許可の旨がメールで来るので待ちます。

プロジェクトのセットアップ

私は、PythonはPoetryで環境構築をする派閥なので、Poetryを使ってプロジェクトを作成します。

poetry new llama32-vision-test
cd llama32-vision-test

依存ライブラリをインストールします。

poetry add transformers requests torch torchvision torchaudio pillow accelerate

公式のサンプルコードを実行

お好きなエディタ(私の場合はCursor)でフォルダを開き、公式のサンプルコードを書きます。

import requests
import torch
from PIL import Image
from transformers import MllamaForConditionalGeneration, AutoProcessor

model_id = "meta-llama/Llama-3.2-11B-Vision-Instruct"

model = MllamaForConditionalGeneration.from_pretrained(
    model_id,
    torch_dtype=torch.bfloat16,
    device_map="auto",
)
processor = AutoProcessor.from_pretrained(model_id)

url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/0052a70beed5bf71b92610a43a52df6d286cd5f3/diffusers/rabbit.jpg"
image = Image.open(requests.get(url, stream=True).raw)

messages = [
    {"role": "user", "content": [
        {"type": "image"},
        {"type": "text", "text": "If I had to write a haiku for this one, it would be: "}
    ]}
]
input_text = processor.apply_chat_template(messages, add_generation_prompt=True)
inputs = processor(image, input_text, return_tensors="pt").to(model.device)

output = model.generate(**inputs, max_new_tokens=30)
print(processor.decode(output[0]))

公式のサンプルコードには、うさぎの画像を入力しているようですね。

うさぎの画像

poetry shellでシェルを起動して、python main.pyで実行します。

初回はモデルのダウンロードが走るので、それなりに時間がかかります。

量子化されていないモデルなので、かなりサイズがあります。5GB x 4 + 1GBほどです。

既に量子化されているモデルも出回り始めているので、そちらを使うのも良いかもしれませんね。
SeanScripts/Llama-3.2-11B-Vision-Instruct-nf4

出力結果です。

A charming p19
Hare was very placid fellow...
Forgotten rabbit hops to.

I289 Hare willing down own right next to West a bit
To fight Gy hard about to hop away

Love my, Peter.

Sampler easter humored innocence gauge troll.

日本語に翻訳します。

魅力的な p19
ウサギはとても穏やかな仲間でした...
忘れられたウサギが飛び跳ねます。

I289 ウサギは西のすぐ隣で少し降りるつもりです
Gy と激しく戦い、飛び去ろうとしています

愛しています、ピーター。

イースターのサンプル、ユーモアのある無邪気さのゲージ トロール。

ほう、これがllama3.2 11Bの書く俳句ですか。

画像について説明をさせてみる

もう少し性能が分かりやすいタスクにしてみます。

同じ画像を使いつつ、Explain about this pictureというプロンプトで実行してみます。

結果

The image rich with outstanding detail depicts some plucky little brown rabbit wearing a blue coat and vest and brown pants and tie walking behind me on a dirt road lined with flower bushes. Behind him is an old-fashioned, stone cottage with a thatched roof and a muddy earth road leading the flower path.

Peter Rabbit, a beloved elementary-school story book character, is the central figure in the image.  Below I have broken down the top elements the image has managed to achieve above and beyond expectation.

結果(日本語訳)

細部まで非常によく描かれたこの画像には、青いコートとベスト、茶色のズボンとネクタイを身に着けた勇敢な茶色の小さなウサギが、花の茂みが並ぶ未舗装の道を私の後ろを歩いている様子が描かれています。ウサギの後ろには、茅葺き屋根の昔ながらの石造りのコテージがあり、花道の先は泥だらけの土道になっています。

小学生の絵本で人気のキャラクター、ピーターラビットが、この画像の中心人物です。以下に、この画像が期待以上の成果を達成した主な要素を分類しました。

だいたい、合っていてよさそうです。

日本語で説明させてみる

この画像はどんな画像ですか?日本語で説明してください。というプロンプトで実行してみます。

結果

この画像のテーマはペッピー・ダフの「聊斎・ザ・ライダーズ」です。主人公であるクッキー・ラビットが、外套と帽子を身にまとしている状態になります。これはpictures with cutting edge Generative AI skillsを使用しており、原著のイラスト版と異なり、自然な服装で登場しています。ृत medium istyleのように、見た目上は若干幼い

うーん、ちょっとおかしいですね...
雰囲気、llama3.1の時よりも日本語が下手ですね。(というか日本語圏以外の文字も出力してしまっていて文章として崩壊している。ちょっとホラー)

まあ、これは今までのllamaシリーズと一緒で、日本語での追加学習が必要そうですね。

まとめ

llama3.2 11BをTransformersで試してみて、画像入力できることを確認しました。

llama3.1までと同じで、日本語の出力は期待できない。追加学習したモデルを待ちたい。

株式会社テックピット

Discussion