模型简介
模型特点
模型能力
使用案例
🚀 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并点击下方按钮。请求将立即处理。









