モデル概要
モデル特徴
モデル能力
使用事例
🚀 PaliGemmaモデルカード
PaliGemmaは、画像とテキストを入力として受け取り、テキスト出力を生成する多言語対応の軽量型ビジュアル言語モデル(VLM)です。このモデルは、画像や短い動画の字幕作成、ビジュアル質問応答、テキスト読み取り、物体検出、物体セグメンテーションなど、様々なビジュアル言語タスクの微調整性能に優れています。
🚀 クイックスタート
Hugging Face上でPaliGemmaにアクセスするには、Googleの使用許諾を確認して同意する必要があります。Hugging Faceにログインし、以下のボタンをクリックすると、リクエストがすぐに処理されます。 [許諾を確認](javascript:void(0);)
モデルページ:PaliGemma
Transformers PaliGemma 3Bの重みは、NLVR2データセットで224*224の入力画像を使用して微調整されています。これらのモデルは、研究目的でのみ、float32、bfloat16、float16の形式で提供されています。微調整の設定は、big_visionで確認できます。
リソースと技術文書:
使用条件:条件
作者:Google
✨ 主な機能
- 多機能性:画像や短い動画の字幕作成、ビジュアル質問応答、物体検出、物体セグメンテーションなど、様々なビジュアル言語タスクをサポートします。
- 多言語対応:複数の言語の入力と出力を処理することができます。
- 軽量設計:オープンコンポーネントをベースに構築されており、効率的なパフォーマンスを発揮します。
📦 インストール
8ビットまたは4ビット精度で自動的に推論を実行するには、bitsandbytes
をインストールする必要があります。
pip install bitsandbytes accelerate
💻 使用例
基本的な使用法
PaliGemmaは単輪のビジュアル言語モデルであり、対話シナリオには適していません。特定のユースケースに合わせて微調整すると最適な結果が得られます。「detect」や「segment」などのタスクプレフィックスを使用して、モデルが解決するタスクを設定することができます。以下は、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
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デコーダ と ビジュアル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)で、Google Cloud Translation API を使用してCC3M-35Lと同じ34の言語に翻訳されています。
- OpenImages:OpenImagesデータセット を基に、手動ルールによって生成された検出と物体感知の質問と回答(Piergiovanni et al., 2022)。
- WIT:ウィキペディアから収集された画像とテキスト(Srinivasan et al., 2021)。
データ責任フィルタリング
PaliGemmaをクリーンなデータで訓練するために、WebLIには以下のフィルタリングが適用されています。
- 色情画像フィルタリング:このフィルターは、色情的な性質を持つと見なされる画像を削除します。
- テキストセキュリティフィルタリング:安全でないテキストとペアになっている画像を識別し、フィルタリングします。安全でないテキストとは、児童性虐待材料、色情内容、下品な言葉、またはその他の不快な内容を含むと見なされるテキストを指します。
- テキスト毒性フィルタリング:さらに Perspective API を使用して、侮辱的、猥褻的、憎悪的、またはその他の毒性のあると見なされるテキストとペアになっている画像を識別し、フィルタリングします。
- テキスト個人情報フィルタリング:Cloud Data Loss Prevention (DLP) API を使用して、特定の個人情報やその他の機密データをフィルタリングし、個人のプライバシーを保護します。社会保障番号や その他の機密情報タイプ などの識別子が削除されます。
- その他の方法:コンテンツの品質と安全性に基づいて、当社のポリシーと実践に従ってフィルタリングを行います。
実装情報
ハードウェア
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 |
単一タスク(単一タスクで微調整)
表の内容が多いため、具体的な表は省略します。原文の表の内容を参照してください。
🔧 技術詳細
PaliGemmaの設計と実装には、モデルアーキテクチャ、事前学習データセット、データフィルタリング方法、訓練ハードウェア、ソフトウェアなど、複数の技術的な側面が関係しています。これらの技術的な詳細を最適化することで、PaliGemmaは様々なビジュアル言語タスクで優れたパフォーマンスを発揮しています。
📄 ライセンス
このモデルはgemmaライセンスに従っています。









