Metaの新モデル「Llama 3.2」画像認識ができる最新LLMの実力とは!?

Llama -3.2 Meta 最新 LLM

2024年9月25日にMetaから新たなAIモデルが登場しました。

このモデルは、モバイルデバイスでも使用できる1B・3Bの軽量なテキストモデルと、画像を理解できる11Bと90Bのビジョンモデルを含んでいます。

この記事では、Metaの新しいAIモデルであるLlama3.2が従来のLlamaからどのように変化したのか、どのように個人利用を行うのか詳しく解説します。最後までお読みいただくと、Llama3.2をローカル環境で実装する方法が理解できるので、アプリ開発などへの活用の幅が広がるかもしれません。

ぜひ最後までご覧ください。

目次

Llama 3.2の概要

Metaが発表したLlama3.2は4つのモデルがあります。

  • エッジデバイスや携帯端末で動作する軽量テキストモデル:1B、3B
  • 画像認識機能を持つ大規模言語モデル:11B、90B

Llama 3.2 1B および 3B モデルは、128K トークンのコンテキスト長をサポートし、要約、命令の追跡、エッジでローカルに実行されるタスクの書き換えなどのデバイス上のユースケースでは、このクラスでは最先端のモデルです。

Llama3.2軽量テキストモデル

軽量テキストモデルの特徴は次の6つです。

  • 軽量:エッジデバイスやモバイルデバイスに搭載可能
  • 多言語テキスト生成:多言語テキスト生成能力に優れる
  • ツール呼び出し:外部ツールとの連携
  • 高いプライバシー:データがデバイスから離れることがないため、プライバシーの高いパーソナライズされたオンデバイスエージェントアプリケーションを構築可能
  • 高速な処理:ローカルで処理されるため、プロンプトと応答が高速
  • 128Kトークンのコンテキスト長:128Kトークンのコンテキスト長をサポート

軽量テキストモデルのパフォーマンスは3Bモデルでは、指示のフォローや要約、プロンプトの書き換え、ツールの使用などのタスクにおいて、Gemma 2 2.6BモデルとPhi 3.5-miniモデルを上回っています1Bモデルは、Gemmaと競合する性能を持っています。

参考:https://ai.meta.com/blog/llama-3-2-connect-2024-vision-edge-mobile-devices/?utm_source=twitter&utm_medium=organic_social&utm_content=video&utm_campaign=llama32

上記のモデルを比較してみると、軽量テキストモデルは特に多言語処理や論理的推論、インストラクションフォローのタスクでは他のモデルを上回る結果です。

Llama3.2軽量テキストモデルは、強力な教師ありモデルを使って、より小型で高性能なモデルを実現。特にプルーニングと知識蒸留という2つの手法を採用して、デバイスに効率的に適合する初の高性能軽量Llamaモデルを完成させています。

プルーニングにより、知識と性能を可能な限り回復させながら、Llamaに現存するモデルのサイズを縮小。 1Bと3Bモデルについては、Llama 3.1 8Bから構造化プルーニングをシングルショットで使用するアプローチをとっています。 これは、ネットワークの一部を体系的に削除し、重みと勾配の大きさを調整することで、元のネットワークの性能を維持しながら、より小さく効率的なモデルを作成するものです。

知識蒸留は、より小さなネットワークに知識を与えるために、より大きなネットワークを使用することです。 Llama 3.2の1Bと3Bでは、Llama 3.1の8Bと70Bモデルからのロジットをモデル開発の事前学習段階に組み込み、これらの大きなモデルからの出力(ロジット)をトークン・レベルのターゲットとして使用。 性能を回復するために、プルーニングの後に知識蒸留を使用しています。

参考:https://ai.meta.com/blog/llama-3-2-connect-2024-vision-edge-mobile-devices/?utm_source=twitter&utm_medium=organic_social&utm_content=video&utm_campaign=llama32

Llama3.2大規模言語モデル

Llama3.2の大規模言語モデルには11Bモデルと90Bモデルが用意されており、チャートやグラフを含む文書レベルの理解、画像のキャプション生成、自然言語の説明に基づいて画像内のオブジェクトを方向指示するなどの視覚的根拠タスクをサポート

11Bと90Bのベンチマークはこちらです。ベンチマークで比較してみてもわかるように、Llama3.2は特に90Bモデルにおいて視覚関連タスクで非常に良好な成績を上げており、ClaudeとGPT-4o-miniよりもAI2 DiagramとChartQAで高いスコアを記録しています。

参考:https://notebooklm.google.com/notebook/6b554af7-ca49-456d-aa37-aa85fe8c10c4

Llama3.2の11Bと90Bモデルでは、画像入力のサポートを追加するために、事前学習済みの画像エンコーダーを事前学習済みの言語モデルに統合するアダプター重みのセットを学習させています。

アダプターは、画像エンコーダーの表現を言語モデルに送り込む一連のクロスアテンションレイヤーで構成し、画像表現と言語表現を整合させるために、テキストと画像のペアでアダプターを訓練。

その結果、言語と視覚情報の両方を理解し、連携させることができるように画像とテキストを同時に扱うことができるアダプターを使って強化されています。

Llama 3.2のライセンス

Llama3.2のライセンスはコミュニティライセンスに基づきます。商用利用も可能ですが、サービスや製品の月間アクティブユーザーが700万人を超える場合には、Metaからの特別なライセンスを得る必要があります。

また、配布も可能ですが、「Llama 3.2はLlama 3.2 Community Licenseの下でライセンスされています。Copyright © Meta Platforms, Inc. All Rights Reserved.」という著作権表示が含まれている「Notice」テキストファイルを含める必要があります。

利用用途可否
商用利用⭕️
改変⭕️
配布⭕️
特許使用
私的使用⭕️
参考:https://huggingface.co/meta-llama/Llama-3.2-1B/blob/main/LICENSE.txt

なお、GPT-4o、Claude 3.5 Sonnet、Gemini 1.5 Pro、Llama-3-ELYZA-JPなどの違いについて詳しく知りたい方は、下記の記事を合わせてご確認ください。

あわせて読みたい
日本語LLM比較!GPT-4o、Claude 3.5 Sonnet、Gemini 1.5 Pro、Llama-3-ELYZA-JPなどの違いを解説 2023年以降、生成AIは目覚ましい進化を遂げ、毎週のように新しいツールやモデルが登場しています。そのため、どのツールが何に特化しているのか、どれが自分に合ってい...

Llama 3.2の使い方

Llama3.2はローカル環境で実装が可能なので、google colaboratoryを使って実装をしていきます。

Llama3.2 11Bモデルの実装環境

■PythonのバージョンPython 3.11以上
■使用ディスク量56.4GB
■システムRAMの使用量 3.7GB
■GPURAMの使用量 22.1GB

google colaboratoryでLlama3.2を実装

Llama3.2を実装するためには、Hugging Faceで認証を受ける必要があります。

参考:https://huggingface.co/meta-llama/Llama-3.2-1B

「Expand to review and access」をクリックすると個人情報を入力する項目が出てくるので、そちらの情報を埋めていきます。

参考:https://huggingface.co/meta-llama/Llama-3.2-1B

全て埋めたら「Submit」をクリックして、承認メールがくるのを待ちます。僕は10分くらいで承認メールが来ました。

また、承認が必要なため、google colaboratoryで実装する際には、Hugging Faceのトークンが必要です。まだ取得していない場合には、承認メールが来るまでに取得しておきましょう。

必要ライブラリのインストールはこちら
!pip install --upgrade transformers
!pip install torch transformers
!pip install torch transformers requests Pillow
!pip install huggingface_hub
Hugging Faceのログインはこちら
from huggingface_hub import login

login(token="Your Token")
Llama3.2のサンプルコードはこちら
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から取得
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]))
サンプルコードの結果はこちら
<|begin_of_text|><|start_header_id|>user<|end_header_id|>

<|image|>If I had to write a haiku for this one, it would be: <|eot_id|><|start_header_id|>assistant<|end_header_id|>

Here is a haiku for the image:

A rabbit in a coat
Stands on a dirt path in a field
Nature's simple joy<|eot_id|>

上記のモデル名を変更すれば1Bや90Bも使用することができます。

Llama3.2の2つのモデルを検証

ここからはLlama3.2の性能をもう少し検証します。

Llama11Bでは画像認識タスクをGPT-4oと比較してみます。

軽量テキストモデルでは日本語タスクを実行して、どのような結果が得られるか検証。日本語の出力が可能か?どのくらいの速さで出力されるのか?他のLLMと比べて本当に速いのか?といった内容を検証します。

まずは画像認識タスクです。

Hugging Faceのログインまでは一緒なので割愛します。サンプルコードの一部を変更しているので、画像認識タスクを行う際の参考にしてください。

使用した画像はこちらです

参考:https://www.google.com/url?sa=i&url=https%3A%2F%2Fwww.hitachi-solutions-create.co.jp%2Fcolumn%2Ftechnology%2Fimage-generation-ai.html&psig=AOvVaw0yN2whH0DELBjwYuAQdufe&ust=1727525879745000&source=images&cd=vfe&opi=89978449&ved=0CBQQjRxqFwoTCNiZifyS44gDFQAAAAAdAAAAABAE
画像認識タスクのサンプルコードはこちら
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)

# Googleドライブから画像を読み込む
image_path = "/content/image-generation-ai.jpg"
image = Image.open(image_path)

# メッセージを作成
messages = [
    {"role": "user", "content": [
        {"type": "image"},
        {"type": "text", "text": "Please provide a detailed explanation of the image I have provided."}
    ]}
]

# 入力を処理
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=216)
# 結果を表示
print(processor.decode(output[0]))
画像認識タスクの結果はこちら
<|begin_of_text|><|begin_of_text|><|start_header_id|>user<|end_header_id|>

<|image|>Please provide a detailed explanation of the image I have provided.<|eot_id|><|start_header_id|>assistant<|end_header_id|>

The image depicts a serene scene of a cat reclining on the floor in a well-lit room, with the sun shining through a window behind it. The cat is positioned in the center of the image, lying on its side with its head resting on its front paws and its eyes closed. It has a light-brown coat with darker stripes, and its fur appears to be long and fluffy. The cat's ears are perked up, and its whiskers are visible.

The room is out of focus, but it appears to be a living room or bedroom with a chair in the background. A plant sits on the floor to the left of the cat, and a window with a white frame is visible behind it, allowing sunlight to pour in and illuminate the scene. The overall atmosphere of the image is one of tranquility and relaxation, with the cat basking in the warm sunlight. The image exudes a sense of calmness and serenity, inviting the viewer to step into the peaceful world of the feline subject.<|eot_id|>

和訳:画像は、明るい部屋で床に横たわる猫の穏やかな様子を描いています。猫は画像の中央に位置し、横向きに寝そべり、頭を前足の上に置き、目を閉じています。薄茶色の毛に濃い色の縞模様があり、毛は長くふわふわしているように見えます。猫の耳はピンと立ち、ひげも見えています。

部屋はピントが合っていないが、背景に椅子があることから、リビングルームか寝室であると思われる。猫の左側には植物が置かれており、その後ろに白い枠の窓が見える。窓から差し込む日光が、この場面を照らしている。猫が温かい日差しを浴びている様子から、この画像の全体的な雰囲気は静けさとくつろぎに満ちている。この画像からは、静けさと平穏さが感じられ、見る者を猫の被写体が織りなす平和な世界へと誘う。

ちなみに為替の画像も読み込ませてみました。コード自体は上記と同じで、画像のパスのみ変更してます。トークン数の関係で全ては出力されませんでした。

参考:https://finance.yahoo.co.jp/fx
為替画像を読み込ませた結果はこちら
The image presents a line graph illustrating the performance of an investment over a period of time, with the x-axis representing years and the y-axis representing values. The graph is divided into two sections: the top section displays the graph itself, while the bottom section provides additional information.

**Top Section:**

*   The graph features three lines, each representing a different time period:
    *   A pink line representing the 6-month period
    *   A green line representing the 12-month period
    *   A yellow line representing the 24-month period
*   The graph shows a general upward trend, with some fluctuations
*   The highest point on the graph is approximately 175, while the lowest point is around 100
*   The graph includes several data points marked with red and blue bars, which may represent specific events or milestones

**Bottom Section:**

*   This section appears to be a table or chart that provides additional information about the investment's performance
*   The table has several columns, including:
    *   Year

和訳:この画像は、一定期間における投資パフォーマンスを示す折れ線グラフを表しており、X軸は年、Y軸は価値を表しています。グラフは2つのセクションに分かれており、上部のセクションにはグラフ自体が表示され、下部のセクションには追加情報が表示されます。

**上部セクション:**

* グラフには3本の線があり、それぞれ異なる期間を表しています。
* * ピンクの線は6ヶ月間を表しています。
* * 緑の線は12ヶ月間を表しています。
* * 黄色の線は24ヶ月間を表しています。
* * グラフは全体的に上昇傾向にありますが、多少の変動があります。
* * グラフの最高値は約175、最低値は約100です。
* グラフには、特定のイベントやマイルストーンを示す赤や青のバーでマークされたデータポイントがいくつか含まれています

**下段:**

* このセクションは、投資パフォーマンスに関する追加情報を提供する表またはチャートであるように見えます
* 表には、以下の項目を含むいくつかの列があります。
* 年
GPT-4oで為替画像を読み込ませた結果はこちら
提供された画像は、証券の価格動向を分析するために金融市場で一般的に使用される、移動平均線が重ねられたローソク足チャートです。以下はその構成要素の詳細です:

1. **ローソク足**:各棒は特定の期間における証券の始値、終値、高値、安値を表します。赤色の棒は期間中の価格の減少を示し、青色の棒は価格の上昇を示します。

2. **移動平均線**:
   - **緑色の線**:過去6ヶ月の平均終値を示す6ヶ月移動平均です。
   - **赤色の線**:過去12ヶ月の平均終値を示す12ヶ月移動平均です。
   - **黄色の線**:過去24ヶ月の平均終値を示す24ヶ月移動平均です。

3. **時間軸**:下部の水平軸は2022年から2024年までのタイムラインを示しており、この期間の日ごとの価格アクションをカバーしていることを示唆しています。

4. **価格軸**:チャートの右側にある垂直軸は、約100から175の価格レベルを表示しています。

5. **トレンド分析**:
   - チャートは表示された期間にわたって価格の全体的な上昇トレンドを示しています。
   - 最新の日付において移動平均線が収束していることが見られ、これは価格トレンドの変化や増加したボラティリティを示唆する可能性があります。

6. **取引量インジケーター**:メインチャートの下にある小さなパネルの灰色エリアは、特定の期間に取引された株式の数を示す取引量を表している可能性があります。このエリアのピークは、メインチャートの重要な価格動向と相関することがあります。

このタイプのチャートは、市場センチメントを評価し、潜在的なサポートレベルとレジスタンスレベルを決定し、将来の価格動向を予測するために、トレーダーや投資家にとって貴重なツールです。

次にLlama3.2 1Bモデルを試してみます。

11BモデルでHugging Faceの承認を受けていると思いますが、各モデルで承認を受ける必要があるので、モデルを使用する前に承認を受けるようにしましょう。

軽量テキストモデルのサンプルコードはこちら
import torch
from transformers import pipeline

model_id = "meta-llama/Llama-3.2-1B-Instruct"
pipe = pipeline(
    "text-generation",
    model=model_id,
    torch_dtype=torch.bfloat16,
    device_map="auto",
)
messages = [
    {"role": "system", "content": "You are a chatbot that answers questions, so please always respond appropriately in Japanese, even if you are asked a question in English.!"},
    {"role": "user", "content": "Who are you?"},
]
outputs = pipe(
    messages,
    max_new_tokens=256,
)
print(outputs[0]["generated_text"][-1])
サンプルコードの結果はこちら
Setting `pad_token_id` to `eos_token_id`:None for open-end generation.
{'role': 'assistant', 'content': "Arrrr, me hearty! I be Captain Cutlass, the greatest pirate chatbot to ever sail the seven seas... er, I mean, the internet! Me and me crew o' digital scurvy dogs be here to swab the decks o' knowledge, answer yer questions, and share some treasure-filled tidbits with ye. So hoist the sails and set course fer a day o' learnin' and fun with ol' Captain Cutlass at the helm!"}

Setting `pad_token_id` to `eos_token_id`:None for open-end generation.
{'role': 'assistant', 'content': 'お気軽に質問してください。私は Chatbot です。日本語で答えることができますが、英語で質問しても理解しやすいように、英語の表現を使用します。'}

テキストタスクはトークン量にもよるかもしれませんが、大体2-3秒で出力されるので、非常に高速な出力に分類されるのではないでしょうか。

また、英語で指示を与えても、日本語で回答をしてくれるため、日本語にも対応をしていますね。これだけレスポンスが速ければ携帯端末で使用していてもレスポンスの遅さなどは気にならなさそうです。

なお、SakanaAI発の複数の画像対応VLMについて詳しく知りたい方は、下記の記事を合わせてご確認ください。

WEEL
【Llama-3-EvoVLM-JP-v2】SakanaAI発の複数の画像対応VLMに様々な食材画像を読ませてレシピ考えさせてみた ... Llama-3-EvoVLM-JP-v2の概要 Llama-3-EvoVLM-JP-v2は、Sakana AIが開発した日本語対応の視覚言語モデルで、複数の画像を同時に処理し、それに基づいて日本語で質問応答がで...

まとめ

本記事では、Llama3.2をgoogle colaboratoryで使用する方法をお伝えしました。Llama3.2の画像識別タスクは画像の詳細な部分までも解説をしてくれるため、今後は医療分野での活用も期待できますね。

例えばレントゲンやMRI画像を解析して、異常箇所の検出や疾患の可能性を示唆できそうです。現在でも行われている分野ではありますが、アノテーションが必要であったりとまだまだ導入コストは高いです。しかしLlama3.2を使うと、もしかしたら導入コストが下がるかもしれません。

今後の発展が非常に楽しみですね。

最後に

いかがだったでしょうか?

弊社では

・マーケティングやエンジニアリングなどの専門知識を学習させたAI社員の開発
・要件定義・業務フロー作成を80%自動化できる自律型AIエージェントの開発
・生成AIとRPAを組み合わせた業務自動化ツールの開発
・社内人事業務を99%自動化できるAIツールの開発
ハルシネーション対策AIツールの開発
自社専用のAIチャットボットの開発

などの開発実績がございます。

まずは、「無料相談」にてご相談を承っておりますので、ご興味がある方はぜひご連絡ください。

➡︎生成AIを使った業務効率化、生成AIツールの開発について相談をしてみる。

生成AIを社内で活用していきたい方へ
無料相談

「生成AIを社内で活用したい」「生成AIの事業をやっていきたい」という方に向けて、生成AI社内セミナー・勉強会をさせていただいております。

セミナー内容や料金については、ご相談ください。

また、サービス紹介資料もご用意しておりますので、併せてご確認ください。

投稿者

  • 翔平

    総合病院で10年間理学療法士として勤務し、その後Pythonを独学で学びデータアナリストとして転職。趣味はキックボクシング

  • URLをコピーしました!
  • URLをコピーしました!
目次