モデル概要
モデル特徴
モデル能力
使用事例
🚀 PaliGemmaモデルカード
Transformers PaliGemma 3Bの重みは、ScienceQAデータセット上で448*448の入力画像を用いてファインチューニングされています。これらのモデルは、研究目的のみでfloat32、bfloat16、float16形式で利用可能です。ファインチューニングの設定は、big_visionで確認できます。
モデルページ: PaliGemma
リソースと技術ドキュメント:
利用規約: Terms
作成者: Google
✨ 主な機能
PaliGemmaは、PaLI-3にインスパイアされ、SigLIPビジョンモデルやGemma言語モデルなどのオープンコンポーネントに基づいた、汎用的で軽量なビジョン言語モデル(VLM)です。画像とテキストの両方を入力として受け取り、テキストを出力として生成し、複数の言語をサポートします。画像や短いビデオのキャプション、ビジュアル質問応答、テキスト読み取り、物体検出、物体セグメンテーションなど、幅広いビジョン言語タスクで優れたファインチューニング性能を発揮するように設計されています。
📦 インストール
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)
出力: Un auto azul estacionado frente a un edificio.
CUDAで他の精度を使用する場合
利便性のため、リポジトリにはすでにbfloat16
とfloat16
に変換された重みのリビジョンが含まれています。これらを使用すると、ダウンロードサイズを削減し、ローカルコンピュータでのキャストを回避できます。
以下は、NVIDIA CUDAカードでbfloat16
を使用する方法です。
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
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は、画像とテキストを入力として受け取り、テキストを出力として生成するモデルで、複数の言語をサポートします。画像や短いビデオのキャプション、ビジュアル質問応答、テキスト読み取り、物体検出、物体セグメンテーションなど、幅広いビジョン言語タスクに対応しています。
モデルアーキテクチャ
PaliGemmaは、TransformerデコーダとVision Transformer画像エンコーダの組み合わせで、合計30億のパラメータを持ちます。テキストデコーダはGemma-2Bから初期化され、画像エンコーダはSigLIP-So400m/14から初期化されます。PaliGemmaは、PaLI-3のレシピに従って学習されています。
入力と出力
- 入力: 画像とテキスト文字列(画像のキャプションを作成するためのプロンプトや質問など)
- 出力: 入力に対する生成テキスト(画像のキャプション、質問への回答、物体のバウンディングボックス座標のリスト、またはセグメンテーションコードワードなど)
モデルデータ
事前学習データセット
PaliGemmaは、以下のデータセットの混合で事前学習されています。
- WebLI: WebLI (Web Language Image)は、公開ウェブから構築されたウェブスケールの多言語画像テキストデータセットです。幅広いWebLIの分割を使用して、視覚的な意味理解、物体の位置特定、視覚的に状況付けられたテキスト理解、多言語性など、多様なモデル機能を獲得します。
- CC3M-35L: ウェブページから選りすぐられた英語の画像と代替テキストのペア(Sharma et al., 2018)。Google Cloud Translation APIを使用して、さらに34の言語に翻訳されています。
- VQ²A-CC3M-35L/VQG-CC3M-35L: VQ2A-CC3Mのサブセット(Changpinyo et al., 2022a)で、CC3M-35Lと同じ34の追加言語にGoogle Cloud Translation APIを使用して翻訳されています。
- OpenImages: OpenImagesデータセット上の手作りのルールによって生成された、検出と物体認識に関する質問と回答(Piergiovanni et al. 2022)。
- WIT: Wikipediaから収集された画像とテキスト(Srinivasan et al., 2021)。
データ責任フィルタリング
PaliGemmaをクリーンなデータで学習させることを目的として、WebLIには以下のフィルターが適用されています。
- ポルノ画像フィルタリング: このフィルターは、ポルノグラフィックな性質の画像を削除します。
- テキストセーフティフィルタリング: 不安全なテキストとペアになっている画像を特定し、フィルタリングします。不安全なテキストとは、CSAI、ポルノグラフィー、下品な言葉、またはその他の不快な内容を含む、またはそれに関するテキストです。
- テキスト毒性フィルタリング: Perspective APIをさらに使用して、侮辱的、下品、憎悪的、またはその他の有毒なテキストとペアになっている画像を特定し、フィルタリングします。
- テキスト個人情報フィルタリング: Cloud Data Loss Prevention (DLP) APIを使用して、特定の個人情報やその他の機密データをフィルタリングし、個人のプライバシーを保護します。社会保障番号やその他の機密情報タイプなどの識別子が削除されます。
- 追加の方法: 当社のポリシーと慣行に沿ったコンテンツ品質と安全性に基づくフィルタリング。
使い方
PaliGemmaは、会話型の使用を目的としていないシングルターンのビジョン言語モデルであり、特定のユースケースにファインチューニングすると最適な性能を発揮します。
「detect」や「segment」などのタスクプレフィックスを使用して、モデルが解くタスクを設定できます。事前学習されたモデルは、このような方法で学習され、幅広い機能(質問応答、キャプショニング、セグメンテーションなど)を備えています。ただし、直接使用することを目的としているのではなく、同様のプロンプト構造を使用して特定のタスクに転移(ファインチューニング)することを想定しています。対話型のテストには、複数のタスクの混合でファインチューニングされた「mix」ファミリーのモデルを使用できます。
意図されたユースケースについては、使用方法と制限事項のセクションを参照するか、ブログ記事を訪問して詳細と例を確認してください。
実装情報
ハードウェア
PaliGemmaは、最新世代のテンソル処理ユニット(TPU)ハードウェア(TPUv5e)を使用して学習されました。
ソフトウェア
学習は、JAX、Flax、TFDS、およびbig_vision
を使用して行われました。
JAXにより、研究者はTPUを含む最新世代のハードウェアを活用して、大規模モデルをより高速かつ効率的に学習できます。
TFDSはデータセットにアクセスするために使用され、Flaxはモデルアーキテクチャに使用されます。PaliGemmaのファインチューニングコードと推論コードは、big_vision
のGitHubリポジトリで公開されています。
評価情報
ベンチマーク結果
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 |
単一タスク(単一タスクでファインチューニング)
ベンチマーク (トレーニング分割) |
メトリック (分割) |
pt-224 | pt-448 | pt-896 |
---|---|---|---|---|
キャプショニング | ||||
COCOキャプション (train+restval) |
CIDEr(検証) | 141.92 | 144.60 | |
NoCaps (COCOキャプション転移の評価) |
CIDEr(検証) | 121.72 | 123.58 | |
COCO-35L (トレーニング) |
CIDEr dev (英語/平均34/平均) |
139.2 115.8 116.4 |
141.2 118.0 118.6 |
|
XM3600 (COCO-35L転移の評価) |
CIDEr dev (英語/平均34/平均) |
78.1 41.3 42.4 |
80.0 41.9 42.9 |
|
TextCaps (トレーニング) |
CIDEr(検証) | 127.48 | 153.94 | |
SciCap (最初の文、サブ図なし) (train+val) |
CIDEr/BLEU-4 (テスト) |
162.25 0.192 |
181.49 0.211 |
|
Screen2words (train+dev) |
CIDEr(テスト) | 117.57 | 119.59 | |
Widget Captioning (train+dev) |
CIDEr(テスト) | 136.07 | 148.36 | |
質問応答 | ||||
VQAv2 (train+validation) |
精度 (テストサーバ - 標準) |
83.19 | 85.64 | |
MMVP |
📄 ライセンス
このモデルはgemmaライセンスの下で提供されています。
アクセスに関する注意事項
Hugging FaceでPaliGemmaにアクセスするには、Googleの利用規約を確認して同意する必要があります。これを行うには、Hugging Faceにログインして以下をクリックしてください。リクエストは即座に処理されます。
[同意する(Acknowledge license)]








