欢迎 PaliGemma 2 – Google 全新的视觉语言模型
我们很高兴地欢迎 Google 全新的视觉语言模型 PaliGemma 2,它是 PaliGemma 的新一代版本。与前身一样,PaliGemma 2 采用相同的强大 SigLIP 用于视觉部分,但文本解码器部分升级到了最新的 Gemma 2。
PaliGemma 2 带有新的预训练 (pt) 模型,参数规模分别为 3B
、10B
和 28B
。所有模型都支持多种输入分辨率:224x224
、448x448
和 896x896
。这些组合为不同的用例提供了很大的灵活性,因此实践者可以在质量/效率之间选择所需的平衡。相比之下,之前的 PaliGemma 仅提供 3B 版本。
这些预训练模型旨在方便地对下游任务进行微调。第一个 PaliGemma 被社区广泛用于多种目的。凭借额外版本带来的灵活性提升,以及更好的预训练质量,我们迫不及待地想看看社区这次能做些什么。
例如,Google 还发布了在 DOCCI 数据集上微调的一些版本,展示了通用且稳健的、长篇、细致入微的字幕生成能力。微调的 DOCCI 模型适用于 3B 和 10B 版本,并支持 448x448 的输入分辨率。
本次发布包括所有开放模型仓库、transformers 集成、微调脚本,以及我们自己在 VQAv2 数据集上对视觉问答任务进行微调的模型演示。
目录
PaliGemma 2 简介
PaliGemma 2 是 Google 于 5 月份发布的 PaliGemma 视觉语言模型 的新一代版本。PaliGemma 2 将强大的 SigLIP 图像编码器与 Gemma 2 语言模型连接起来。
新模型基于 Gemma 2 的 2B、9B 和 27B 语言模型,从而产生了相应的 3B、10B 和 28B PaliGemma 2 变体,其命名考虑了(紧凑型)图像编码器的额外参数。如上所述,它们支持三种不同的分辨率,为下游任务的微调提供了极大的灵活性。
PaliGemma 2 遵循 Gemma 许可证分发,该许可证允许再分发、商业用途、微调和创建模型衍生品。
本次发布包含以下 bfloat16
精度的检查点:
9 个预训练模型:3B、10B 和 28B,分辨率分别为
224x224
、448x448
和896x896
。2 个在 DOCCI 上微调的模型:两个在 DOCCI 数据集(图像-文本标题对)上微调的模型,支持 3B 和 10B PaliGemma 2 变体以及
448x448
的输入分辨率。
模型能力
正如之前的 PaliGemma 发布所见,预训练 (pt) 模型非常适合在下游任务上进行进一步的微调。
pt 模型是在以下数据混合上预训练的。预训练数据集的多样性使得在类似领域的下游任务上进行微调时可以使用相对较少的示例。
WebLI: 一个从公共网络构建的万亿规模多语言图像-文本数据集。使用各种 WebLI 分割来获取通用模型能力,例如视觉语义理解、目标定位、视觉情境文本理解和多语言能力。
CC3M-35L: 从网页中整理的英文图像-alt_text 对 (Sharma et al., 2018)。为了标记此数据集,作者使用 Google Cloud Translation API 翻译成 34 种其他语言。
带有问答验证的视觉问题生成 (VQ2A): 一个改进的问答数据集。该数据集使用 Google Cloud Translation API 翻译成相同的 34 种其他语言。
OpenImages: 基于 OpenImages 数据集,通过手工规则生成的检测和对象感知问题和答案 (Piergiovanni et al. 2022)。
WIT: 从维基百科收集的图像和文本 (Srinivasan et al., 2021)。
PaliGemma 2 团队在内部对 PT 模型进行了广泛的视觉语言理解任务的微调,并在 模型卡 和 技术报告 中提供了这些微调模型的基准。
在 DOCCI 数据集上微调的 PaliGemma 2 可以完成广泛的字幕任务,包括文本渲染、捕捉空间关系以及在字幕中包含世界知识。
下面是 DOCCI 微调的 PaliGemma 2 检查点的性能,与(摘自 技术报告 中表 6 的)其他模型进行比较。
#par | #char | #sent | NES↓ | |
---|---|---|---|---|
MiniGPT-4 | 7B | 484 | 5.6 | 52.3 |
mPLUG-Owl2 | 8B | 459 | 4.4 | 48.4 |
InstructBLIP | 7B | 510 | 4.0 | 42.6 |
LLaVA-1.5 | 7B | 395 | 4.2 | 40.6 |
VILA | 7B | 871 | 8.6 | 28.6 |
PaliGemma | 3B | 535 | 8.9 | 34.3 |
PaLI-5B | 5B | 1065 | 11.3 | 32.9 |
PaliGemma 2 | 3B | 529 | 7.7 | 28.4 |
PaliGemma 2 | 10B | 521 | 7.5 | 20.3 |
- #char: 生成字幕中的平均字符数。
- #sent: 平均句子数。
- NES: 不一致句子(越低越好),衡量事实不准确性。
您可以在下面找到 DOCCI 检查点的一些模型输出,这些输出展示了模型的通用性。
输入图片 | 字幕 |
---|---|
![]() |
一个折线图显示了 ImageNet 模型微调后的 top-1 准确率。图中有四条线,分别是蓝色、橙色、绿色和黑色。蓝线是四条线中最低的,它在 |
![]() |
一张白色纸的特写镜头,上面有黑色文字。纸张中间弯曲。纸上的文字采用打字机字体。纸的顶部写着“Ashley Hotel West Coast”。下面是“WiFi Internet Service”。再下面是“用户名: fqpp”。再下面是“密码: aaeu |
![]() |
一幅大卫·鲍伊 Ziggy Stardust 造型的壁画画在一面白墙上。壁画是并排的三张脸,每张脸都有红色的头发,眼睛上画有蓝色闪电。这些脸有蓝色眼影、粉色腮红和红色嘴唇。中间的脸上方有一个黑色方窗,上面有蓝色文字“JAM”。一辆银色汽车 |
![]() |
俯视图显示一张白色大理石台面,上面有四个咖啡杯。左边有两个灰色的,左下角有一个白色的。右边的是灰色的。右上角有一个木制支架上的金属丝果篮,里面有橘子。左边有一个装有水的透明玻璃水罐,部分 |
![]() |
一本白色书的特写镜头,底部有一条蓝色条纹。书的上半部分是白色的。书的白色部分印有黑色文字。文字写着“Visual Concept Learning from User-tagged Web Video”。黑色文字下方是一个白色方框,里面有五张小图片。最左边的图片是一个人站在草地上的景象。右边那张是蓝色的海洋 |
演示
为了演示目的,Hugging Face 团队对 分辨率为 448x448 的 PaliGemma 2 3B 模型 在一小部分 VQAv2 数据集 上进行了微调。我们使用了 LoRA 微调和 PEFT,具体请参阅微调部分。下面的演示展示了最终结果。您可以随意查阅 Space 中的代码,了解其工作原理,或克隆它以适应您自己的微调。
如何与 Transformers 结合使用
您可以使用 🤗 transformers 中的 PaliGemmaForConditionalGeneration 和 AutoProcessor API 对 PaliGemma 2 模型进行推理。请确保您安装了 4.47 或更高版本的 transformers。
pip install --upgrade transformers
之后,您可以按如下方式运行推理。像往常一样,请确保您遵循用于训练模型的任务所使用的提示格式。
from transformers import AutoProcessor, PaliGemmaForConditionalGeneration
from PIL import Image
import requests
model_id = "google/paligemma2-10b-ft-docci-448"
model = PaliGemmaForConditionalGeneration.from_pretrained(model_id)
model = model.to("cuda")
processor = AutoProcessor.from_pretrained(model_id)
prompt = "<image>caption en"
image_file = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/cats.png"
raw_image = Image.open(requests.get(image_file, stream=True).raw).convert("RGB")
inputs = processor(prompt, raw_image, return_tensors="pt").to("cuda")
output = model.generate(**inputs, max_new_tokens=200)
input_len = inputs["input_ids"].shape[-1]
print(processor.decode(output[0][input_len:], skip_special_tokens=True))
# A medium shot of two cats laying on a pile of brown fishing nets. The cat in the foreground is a gray tabby cat with white on its chest and paws. The cat is laying on its side with its head facing the bottom right corner of the image. The cat in the background is laying on its side with its head facing the top left corner of the image. The cat's body is curled up, its head is slightly turned to the right, and its front paws are tucked underneath its body. There is a teal rope hanging from the fishing net in the top right corner of the image.
您还可以使用 transformers 的 bitsandbytes
集成来加载量化后的模型。以下示例使用 4 位 nf4
。
from transformers import BitsAndBytesConfig
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16
)
model = PaligemmaForConditionalGeneration.from_pretrained(
model_id,
quantization_config=bnb_config,
device_map={"":0}
)
我们通过评估在 textvqa 数据集上微调的 3B 检查点(使用 224x224 输入图像)来快速测试量化后的性能下降。这是我们在 5,000 个验证集条目上得到的结果:
bfloat16
,未量化:60.04% 准确率。8位
: 59.78%.4 位
,使用上述代码片段的配置:58.72%。
这些数字非常令人鼓舞!当然,量化对于更大的检查点最有趣,我们建议您始终测量您将使用的领域和任务的结果。
微调
如果您之前微调过 PaliGemma,那么 PaliGemma 2 的微调 API 也是相同的,您可以直接使用您的代码。我们提供了一个 微调脚本 和一个 notebook,用于您微调模型、冻结模型部分或应用 LoRA 或 QLoRA 等内存高效微调技术。
为了演示目的,我们对 VQAv2 验证集的一半数据上的 PaliGemma 2 模型进行了 LoRA 微调。这在 3 个 A100 GPU (80GB 显存) 上花费了半小时。该模型可以在 此处 找到,这是展示它的 Gradio 演示。
总结
新的 PaliGemma 2 版本比前一个更令人兴奋,它拥有适合每个人需求的不同尺寸和更强大的预训练模型。我们期待看到社区将构建什么!
我们感谢 Google 团队发布了这令人惊叹的开放模型系列。非常感谢 Pablo Montalvo 将模型集成到 transformers,以及 Lysandre、Raushan、Arthur、Yieh-Dar 和团队其他成员的快速评审、测试和合并。