🚀 PaliGemmaモデルカード
PaliGemmaは、画像とテキストを入力として受け取り、テキスト出力を生成する多言語対応の軽量型ビジュアル言語モデル(VLM)です。このモデルは、画像や短い動画の字幕作成、ビジュアル質問応答、テキスト読み取り、物体検出、物体セグメンテーションなど、様々なビジュアル言語タスクに適しています。
🚀 クイックスタート
Hugging Face上でPaliGemmaモデルを使用するには、Googleの使用許諾を確認して同意する必要があります。Hugging Faceにログインしていることを確認し、以下のボタンをクリックすると、リクエストがすぐに処理されます。
[許諾を確認](javascript:void(0))
✨ 主な機能
- 多機能性:質問応答、字幕生成、セグメンテーションなど、様々なビジュアル言語タスクを処理できます。
- 多言語対応:複数の言語の入力と出力をサポートします。
- 軽量設計:モデルのパラメータが比較的少なく、様々なデバイスでの研究やアプリケーションに適しています。
📦 インストール
4ビットまたは8ビット精度で自動的に推論を実行するには、bitsandbytes
をインストールする必要があります。
pip install bitsandbytes accelerate
💻 使用例
基本的な使用法
CPU上でデフォルトの精度(float32
)で実行する例です。
from transformers import AutoProcessor, PaliGemmaForConditionalGeneration
from PIL import Image
import requests
import torch
model_id = "google/paligemma-3b-mix-224"
url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg?download=true"
image = Image.open(requests.get(url, stream=True).raw)
model = PaliGemmaForConditionalGeneration.from_pretrained(model_id).eval()
processor = AutoProcessor.from_pretrained(model_id)
prompt = "caption es"
model_inputs = processor(text=prompt, images=image, return_tensors="pt")
input_len = model_inputs["input_ids"].shape[-1]
with torch.inference_mode():
generation = model.generate(**model_inputs, max_new_tokens=100, do_sample=False)
generation = generation[0][input_len:]
decoded = processor.decode(generation, skip_special_tokens=True)
print(decoded)
高度な使用法
CUDA上で他の精度で実行する
from transformers import AutoProcessor, PaliGemmaForConditionalGeneration
from PIL import Image
import requests
import torch
model_id = "google/paligemma-3b-mix-224"
device = "cuda:0"
dtype = torch.bfloat16
url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg?download=true"
image = Image.open(requests.get(url, stream=True).raw)
model = PaliGemmaForConditionalGeneration.from_pretrained(
model_id,
torch_dtype=dtype,
device_map=device,
revision="bfloat16",
).eval()
processor = AutoProcessor.from_pretrained(model_id)
prompt = "caption es"
model_inputs = processor(text=prompt, images=image, return_tensors="pt").to(model.device)
input_len = model_inputs["input_ids"].shape[-1]
with torch.inference_mode():
generation = model.generate(**model_inputs, max_new_tokens=100, do_sample=False)
generation = generation[0][input_len:]
decoded = processor.decode(generation, skip_special_tokens=True)
print(decoded)
4ビット/8ビットでロードする
from transformers import AutoProcessor, PaliGemmaForConditionalGeneration
from PIL import Image
import requests
import torch
from transformers import BitsAndBytesConfig
model_id = "google/paligemma-3b-mix-224"
device = "cuda:0"
dtype = torch.bfloat16
url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg?download=true"
image = Image.open(requests.get(url, stream=True).raw)
quantization_config = BitsAndBytesConfig(load_in_8bit=True)
model = PaliGemmaForConditionalGeneration.from_pretrained(
model_id, quantization_config=quantization_config
).eval()
processor = AutoProcessor.from_pretrained(model_id)
prompt = "caption es"
model_inputs = processor(text=prompt, images=image, return_tensors="pt").to(model.device)
input_len = model_inputs["input_ids"].shape[-1]
with torch.inference_mode():
generation = model.generate(**model_inputs, max_new_tokens=100, do_sample=False)
generation = generation[0][input_len:]
decoded = processor.decode(generation, skip_special_tokens=True)
print(decoded)
📚 ドキュメント
モデル情報
モデル概要
PaliGemmaはPaLI - 3にインスパイアされ、SigLIPビジュアルモデルやGemma言語モデルなどのオープンコンポーネントに基づいて構築されています。このモデルはTransformerデコーダーとビジュアルTransformer画像エンコーダーで構成され、合計30億個のパラメータを持っています。
- 入力:画像とテキスト文字列(画像の字幕付けのプロンプトや質問など)
- 出力:入力に対して生成されたテキスト(画像の字幕、質問の回答、物体のバウンディングボックス座標のリスト、セグメンテーションコードなど)
モデルデータ
- 事前学習データセット:PaliGemmaはWebLI、CC3M - 35L、VQ²A - CC3M - 35L/VQG - CC3M - 35L、OpenImages、WITなどの複数のデータセットの混合で事前学習されています。
- データ責任フィルタリング:クリーンなデータでモデルを学習させるために、WebLIには色情画像フィルタリング、テキストセキュリティフィルタリング、テキスト毒性フィルタリング、テキスト個人情報フィルタリングなど、さまざまなフィルタリング方法が適用されています。
使用方法
PaliGemmaは単輪のビジュアル言語モデルであり、対話シナリオには適していません。「detect」や「segment」などのタスクプレフィックスを使用することで、モデルが解決するタスクを設定できます。事前学習モデルは複数の能力を持つように学習されていますが、通常は特定のタスクに移行するために微調整が必要です。対話的なテストには、複数のタスクに対して微調整された「mix」シリーズのモデルを使用できます。
実装情報
ハードウェア
PaliGemmaは最新世代のテンソル処理ユニット(TPU)ハードウェア(TPUv5e)を使用して学習されています。
ソフトウェア
学習にはJAX、Flax、TFDS、big_vision
が使用されています。
評価情報
PaliGemmaのさまざまな学術タスクへの移行可能性を検証するために、事前学習モデルを各タスクで微調整し、混合モデルを学習させました。以下は、異なる解像度での評価結果です。
混合モデル(複数の移行タスクの混合で微調整)
ベンチマーク |
指標(セグメンテーション) |
mix - 224 |
mix - 448 |
MMVP |
ペアリング精度 |
46.00 |
45.33 |
POPE |
精度(ランダム/人気/対抗) |
88.00 86.63 85.67 |
89.37 88.40 87.47 |
GQA |
精度(テスト) |
65.20 |
65.47 |
単一タスク(単一タスクで微調整)
表の内容が多いため、一部の表示を省略しています。詳細な表は元のドキュメントを参照してください。
📄 ライセンス
このモデルはgemmaライセンス契約に従います。
使用条件
🔗 関連リンク
👥 作者
Google