Model Overview
Model Features
Model Capabilities
Use Cases
🚀 PaliGemma模型卡片
PaliGemma是一款多功能且輕量級的視覺語言模型(VLM),它以圖像和文本作為輸入,並生成文本輸出,支持多種語言。該模型專為在廣泛的視覺語言任務(如圖像和短視頻字幕、視覺問答、文本閱讀、目標檢測和目標分割)中實現一流的微調性能而設計。
模型頁面:PaliGemma
Transformers PaliGemma 3B權重,在 NLVR2 數據集上使用448*448輸入圖像進行微調。這些模型以float32、bfloat16和float16格式提供,僅用於研究目的。微調配置可在 big_vision 中找到。
資源和技術文檔:
使用條款:條款
作者:Google
✨ 主要特性
- 多功能性:能夠處理多種視覺語言任務,包括圖像和短視頻字幕、視覺問答、文本閱讀、目標檢測和目標分割。
- 輕量級:基於開放組件構建,具有高效的性能。
- 多語言支持:支持多種語言的輸入和輸出。
📦 安裝指南
若要使用8位或4位精度自動運行推理,你需要安裝bitsandbytes
:
pip install bitsandbytes accelerate
💻 使用示例
基礎用法
以下代碼片段以模型google/paligemma-3b-mix-224
為例。你當前瀏覽的倉庫中的模型可能是針對其他任務進行訓練的,請確保為當前任務使用合適的輸入。
在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是一款多功能且輕量級的視覺語言模型(VLM),它受 PaLI - 3 啟發,並基於開放組件構建,如 SigLIP視覺模型 和 Gemma語言模型。它接受圖像和文本作為輸入,並生成文本作為輸出,支持多種語言。該模型專為在廣泛的視覺語言任務(如圖像和短視頻字幕、視覺問答、文本閱讀、目標檢測和目標分割)中實現一流的微調性能而設計。
模型架構
PaliGemma由一個 Transformer解碼器 和一個 視覺Transformer圖像編碼器 組成,總共有30億個參數。文本解碼器從 Gemma - 2B 初始化。圖像編碼器從 SigLIP - So400m/14 初始化。PaliGemma按照PaLI - 3的方法進行訓練。
輸入和輸出
- 輸入:圖像和文本字符串,如圖像字幕提示或問題。
- 輸出:針對輸入生成的文本,如圖像字幕、問題答案、目標邊界框座標列表或分割碼字。
模型數據
預訓練數據集
PaliGemma在以下數據集的混合上進行預訓練:
- WebLI:WebLI(網絡語言圖像) 是一個基於公共網絡構建的網絡規模多語言圖像 - 文本數據集。使用了多種WebLI分割來獲得多功能的模型能力,如視覺語義理解、目標定位、視覺情境文本理解、多語言能力等。
- CC3M - 35L:從網頁中精心挑選的英語圖像 - 替代文本對(Sharma等人,2018)。我們使用 Google Cloud Translation API 將其翻譯成另外34種語言。
- VQ²A - CC3M - 35L/VQG - CC3M - 35L:VQ2A - CC3M的一個子集(Changpinyo等人,2022a),使用 Google Cloud Translation API 翻譯成與CC3M - 35L相同的另外34種語言。
- OpenImages:基於 [OpenImages數據集] 上的手工規則生成的檢測和目標感知問題及答案(Piergiovanni等人,2022)。
- WIT:從維基百科收集的圖像和文本(Srinivasan等人,2021)。
[OpenImages數據集]:https://storage.googleapis.com/openimages/web/factsfigures_v7.html
數據責任過濾
為了在乾淨的數據上訓練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”系列的模型,這些模型已經在多種任務的混合上進行了微調。
請參考 使用和限制部分 瞭解預期用例,或訪問 博客文章 以獲取更多詳細信息和示例。
實現信息
硬件
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是一個基於Transformer架構的視覺語言模型,結合了視覺Transformer圖像編碼器和Transformer解碼器。
訓練數據
PaliGemma在多種數據集的混合上進行預訓練,包括WebLI、CC3M - 35L、VQ²A - CC3M - 35L/VQG - CC3M - 35L、OpenImages和WIT。
訓練硬件和軟件
訓練使用了最新一代的TPU硬件(TPUv5e),以及JAX、Flax、TFDS和big_vision
軟件庫。
📄 許可證
本項目使用gemma
許可證。若要在Hugging Face上訪問PaliGemma,你需要審查並同意Google的使用許可。為此,請確保你已登錄Hugging Face並點擊下方按鈕。請求將立即處理。









