モデル概要
モデル特徴
モデル能力
使用事例
🚀 PaliGemmaモデルカード
PaliGemmaは、画像とテキストの入力を組み合わせてテキスト出力を生成する、多言語対応の軽量型マルチモーダルモデルです。このモデルはオープンコンポーネントを基に構築されており、画像や短い動画の字幕生成、ビジュアルQA、テキスト読み取り、物体検出、物体セグメンテーションなど、さまざまなビジュアル言語タスクに対応しています。
モデル情報
属性 | 詳細 |
---|---|
モデルタイプ | ビジュアル言語モデル |
訓練データ | WebLI、CC3M - 35L、VQ²A - CC3M - 35L/VQG - CC3M - 35L、OpenImages、WIT |
モデルページ
リソースと技術ドキュメント
使用条項
作者
✨ 主な機能
- 多機能性:画像とテキストの入力をサポートし、質問応答、字幕生成、セグメンテーションなど、様々なビジュアル言語タスクを実行できます。
- 多言語対応:複数の言語の入力と出力を処理できます。
- 軽量設計:様々なシナリオでの微調整に適しています。
📦 インストール
8ビットまたは4ビット精度で自動的に推論を実行するには、bitsandbytes
をインストールする必要があります。
pip install bitsandbytes accelerate
💻 使用例
基本的な使用法
以下のコードは、CPU上でデフォルトの精度(float32
)でPaliGemmaモデルを実行する方法を示しています。
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上での他の精度での実行
以下のコードは、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
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言語モデルなどのオープンコンポーネントを基に構築されています。画像とテキストを入力として受け取り、テキスト出力を生成し、多言語に対応しています。このモデルは、幅広いビジュアル言語タスクに対して微調整することで、高い性能を発揮することを目指しています。
モデルアーキテクチャ
PaliGemmaはTransformerデコーダとVision Transformer画像エンコーダで構成され、合計30億個のパラメータを持っています。テキストデコーダはGemma - 2Bから初期化され、画像エンコーダはSigLIP - So400m/14から初期化されます。PaliGemmaはPaLI - 3の手法に従って訓練されています。
入力と出力
- 入力:画像とテキスト文字列(画像に字幕を付けるためのプロンプトや質問など)
- 出力:入力に対して生成されたテキスト(画像の字幕、質問の回答、物体の境界ボックス座標のリスト、セグメンテーションコードなど)
モデルデータ
事前学習データセット
PaliGemmaは以下のデータセットの混合で事前学習されています。
- WebLI:WebLI (Web Language Image)は、公共のWebを基に構築されたWeb規模の多言語画像 - テキストデータセットです。モデルの多機能性(ビジュアルセマンティック理解、物体の位置特定、ビジュアルコンテキストのテキスト理解、多言語能力など)を得るために、複数のWebLI分割が使用されています。
- CC3M - 35L:Webページから精心選択された英語の画像 - 代替テキストペア([Sharma et al., 2018](https://aclanthology.org/P18 - 1238/))。Google Cloud Translation APIを使用して、さらに34の言語に翻訳されています。
- VQ²A - CC3M - 35L/VQG - CC3M - 35L:VQ2A - CC3Mのサブセット([Changpinyo et al., 2022a](https://aclanthology.org/2022.naacl - main.142/))で、Google Cloud Translation APIを使用してCC3M - 35Lと同じ34の言語に翻訳されています。
- OpenImages:OpenImagesデータセットを基に、手動で定義されたルールによって生成された検出と物体認識QAデータ(Piergiovanni et al. 2022)。
- WIT:ウィキペディアから収集された画像とテキスト(Srinivasan et al., 2021)。
データ責任フィルタリング
PaliGemmaをクリーンなデータで訓練するために、WebLIには以下のフィルタリングが適用されています。
- 色情画像フィルタリング:色情的な性質を持つと見なされる画像を削除します。
- テキストセキュリティフィルタリング:不安全なテキストとペアになっている画像を識別し、フィルタリングします。不安全なテキストとは、児童性虐待材料、色情内容、下品な言葉、その他の不快な内容を含む、またはそれに関するテキストを指します。
- テキスト毒性フィルタリング:Perspective APIを使用して、侮辱的、猥褻的、憎悪的、またはその他の毒性があると見なされるテキストとペアになっている画像を識別し、フィルタリングします。
- テキスト個人情報フィルタリング:Cloud Data Loss Prevention (DLP) APIを使用して、個人情報やその他の機密データをフィルタリングし、個人のプライバシーを保護します。社会保障番号などの識別子や[その他の機密情報タイプ](https://cloud.google.com/sensitive - data - protection/docs/high - sensitivity - infotypes - reference?_gl=1jg604m_gaODk5MzA3ODQyLjE3MTAzMzQ3NTk._ga_WH2QY8WWF5*MTcxMDUxNTkxMS4yLjEuMTcxMDUxNjA2NC4wLjAuMA..&_ga=2.172110058.-899307842.1710334759)が削除されます。
- その他の方法:コンテンツの品質と安全性に基づき、関連するポリシーと実践に従ってフィルタリングを行います。
使い方
PaliGemmaはシングルラウンドのビジュアル言語モデルであり、対話型の使用には適していません。特定のユースケースに対して微調整することで、最も良い結果が得られます。
「detect」や「segment」などのタスクプレフィックスを使用することで、モデルが解決するタスクを設定することができます。事前学習モデルはこのような方法で訓練され、質問応答、字幕生成、セグメンテーションなどの多様な能力を獲得しています。ただし、これらのモデルは直接使用するために設計されているわけではなく、同様のプロンプト構造を持つ特定のタスクに微調整することで転用されます。対話型のテストには、複数のタスクの混合で微調整された「mix」シリーズのモデルを使用することができます。
想定されるユースケースについては、[使用と制限のセクション](#usage - and - limitations)を参照するか、[ブログ記事](https://huggingface.co/blog/paligemma - google - vlm)を訪問して、詳細情報と例を確認してください。
実装情報
ハードウェア
PaliGemmaは最新世代のテンソル処理ユニット(TPU)ハードウェア(TPUv5e)を使用して訓練されています。
ソフトウェア
訓練にはJAX、Flax、TFDS、[big_vision
](https://github.com/google - research/big_vision)が使用されています。
JAXにより、研究者は最新世代のハードウェア(TPUを含む)を活用して、大型モデルをより高速かつ効率的に訓練することができます。TFDSはデータセットへのアクセスに、Flaxはモデルアーキテクチャに使用されます。PaliGemmaの微調整コードと推論コードはbig_vision
のGitHubリポジトリで公開されています。
評価情報
ベンチマーク結果
PaliGemmaの様々な学術タスクへの転用可能性を検証するために、事前学習モデルを各タスクに対して微調整しました。また、転用タスクの混合を使用して混合モデルを訓練しました。異なる解像度での結果を報告し、どのタスクが高解像度から恩恵を受けるかを調査しました。重要なことは、これらのタスクとデータセットは事前学習データの混合に含まれておらず、それらの画像はWeb規模の事前学習データから明示的に除外されています。
混合モデル(転用タスクの混合で微調整)
ベンチマーク | 指標(セグメンテーション) | 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 captions(train + restval) | CIDEr(検証) | 141.92 | 144.60 | |
NoCaps(COCO字幕転用評価) | CIDEr(検証) | 121.72 | 123.58 | |
COCO - 35L(訓練) | CIDEr開発(英語/平均34言語/平均) | 139.2 115.8 116.4 |
141.2 118.0 118.6 |
|
XM3600(COCO - 35L転用評価) | CIDEr開発(英語/平均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(VQAv2転用評価) | ペア精度 | 47.33 | 45.33 | |
POPE(VQAv2転用評価) | 精度(ランダム/人気/対抗) | 87.80 85.87 84.27 |
88.23 86.77 85.90 |
|
OKVQA(訓練) | 精度(検証) | 63.54 | 63.15 | |
[A - OKVQA](https://allenai.org/project/a - okvqa/home) (MC)(train + val) | 精度(テストサーバ) | 76.37 | 76.90 | |
[A - OKVQA](https://allenai.org/project/a - okvqa/home) (DA)(train + val) | 精度(テストサーバ) | 61.85 | 63.22 | |
GQA(train_balanced + val_balanced) | 精度(testdevバランス) | 65.61 | 67.03 | |
[xGQA](https://aclanthology.org/2022.findings - acl.196/)(GQA転用評価) | 平均精度(bn, de, en, id, ko, pt, ru, zh) | 58.37 | 59.07 | |
NLVR2(train + dev) | 精度(テスト) | 90.02 | 88.93 | |
[MaRVL](https://marvl - challenge.github.io/)(NLVR2転用評価) | 平均精度(テスト)(id, sw, ta, tr, zh) | 80.57 | 76.78 | |
AI2D(訓練) | 精度(テスト) | 72.12 | 73.28 | |
ScienceQA(画像サブセット、思考チェーンなし)(train + val) | 精度(テスト) | 95.39 | 95.93 | |
RSVQA - LR (Non numeric)(train + val) | 平均精度(テスト) | 92.65 | 93.11 | |
RSVQA - HR (Non numeric)(train + val) | 平均精度(テスト/test2) | 92.61 90.58 |
92.79 90.54 |
|
ChartQA(human + aug)x(train + val) | 平均緩和精度(test_human, test_aug) | 57.08 | 71.36 | |
[VizWiz VQA](https://vizwiz.org/tasks - and - datasets/vqa/)(train + val) | 精度(テストサーバ - 標準) | 73.7 | 75.52 | |
TallyQA(訓練) | 精度(test_simple/test_complex) | 81.72 69.56 |
84.86 72.27 |
|
[OCR - VQA](https://ocr - vqa.github.io/)(train + val) | 精度(テスト) | 72.32 | 74.61 | 74.93 |
TextVQA(train + val) | 精度(テストサーバ - 標準) | 55.47 | 73.15 | 76.48 |
DocVQA(train + val) | ANLS(テストサーバ) | 43.74 | 78.02 | 84.77 |
Infographic VQA(train + val) | ANLS(テストサーバ) | 28.46 | 40.47 | 47.75 |
SceneText VQA(train + val) | ANLS(テストサーバ) | 63.29 | 81.82 | 84.40 |
セグメンテーション | ||||
RefCOCO(refcoco, refcoco +, refcocogの組み合わせ、検証とテスト画像を除く) | MIoU(検証)refcoco/refcoco +/refcocog | 73.40 68.32 67.65 |
75.57 69.76 70.17 |
76.94 72.18 72.22 |
ビデオタスク(字幕/質問応答) | ||||
MSR - VTT (Cap |
📄 ライセンス
Gemma
アクセスに関する注意
⚠️ 重要な注意事項
Hugging Face上でPaliGemmaにアクセスするには、Googleの使用許諾を確認し、同意する必要があります。これを行うには、Hugging Faceにログインし、以下のボタンをクリックしてください。リクエストはすぐに処理されます。
💡 使用上の提案
PaliGemmaはシングルラウンドのビジュアル言語モデルであり、対話型の使用には適していません。特定のユースケースに対して微調整することで、最も良い結果が得られます。「detect」や「segment」などのタスクプレフィックスを使用することで、モデルが解決するタスクを設定することができます。









