モデル概要
モデル特徴
モデル能力
使用事例
🚀 PaliGemmaモデルカード
Transformers PaliGemma 3Bの重みは、RefCOCOデータセット上で896*896の入力画像を用いてファインチューニングされています。これらのモデルは、研究目的のみで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で他の精度で実行する例です。
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は、PaLI-3にインスパイアされ、SigLIPビジョンモデルやGemma言語モデルなどのオープンコンポーネントに基づいた、汎用的で軽量なビジョン言語モデル(VLM)です。画像とテキストの両方を入力として受け取り、テキストを出力として生成し、複数の言語をサポートします。画像や短いビデオのキャプション、ビジュアル質問応答、テキスト読み取り、物体検出、物体セグメンテーションなど、幅広いビジョン言語タスクで、クラストップのファインチューニング性能を発揮するように設計されています。
モデルアーキテクチャ
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は、最新世代のTensor Processing Unit(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 |
🔧 技術詳細
Hugging FaceでのPaliGemmaへのアクセス
Hugging FaceでPaliGemmaにアクセスするには、Googleの利用許諾書を確認して同意する必要があります。これを行うには、Hugging Faceにログインしてから、以下のボタンをクリックしてください。リクエストはすぐに処理されます。
[利用許諾を承認する](Acknowledge license)
📄 ライセンス
このライブラリのライセンスはgemmaです。








