VLMs之Gemma 2:PaliGemma 2的简介、安装和使用方法、案例应用之详细攻略

VLMs之Gemma 2:PaliGemma 2的简介、安装和使用方法、案例应用之详细攻略

导读:2024年12月4日,PaliGemma 2是一个基于Gemma 2系列语言模型的开源视觉语言模型 (VLM) 家族。PaliGemma 2 通过提供一个规模化、多功能且开源的VLM家族,为视觉语言模型的研究和应用提供了重要的贡献,并为未来研究提供了宝贵的经验和数据。

>> 背景痛点:现有的视觉语言模型 (VLM) 在模型规模和图像分辨率方面缺乏系统性的研究,尤其缺乏对不同大小的语言模型与图像分辨率对微调迁移性能影响的联合研究。许多先前工作使用不同架构和训练方法的模型,难以进行公平比较。现有的开源VLM在处理一些特定任务(如OCR相关任务、长细粒度字幕生成、医学影像报告生成等)方面性能不足,或者需要依赖特定任务的架构组件。

>> 具体的解决方案:PaliGemma 2 通过将SigLIP-So400m视觉编码器与Gemma 2系列语言模型(2B、9B、27B参数量)结合,并训练三种不同分辨率(224px²、448px²、896px²)的模型来解决上述痛点。它采用三阶段训练策略,提升模型的迁移学习能力。

>> 核心思路步骤:

● 三阶段训练:

 阶段1:将预训练的SigLIP-So400m和Gemma 2模型联合训练,使用10亿个多模态数据样本,目标是提升模型的迁移能力。分辨率为224px²。

 阶段2:在448px²和896px²分辨率下继续训练,提升高分辨率任务的性能,并增加输出序列长度以适应OCR等任务。

 阶段3:对阶段1或2的模型进行针对特定任务的微调

● 模型架构:采用SigLIP-So400m视觉编码器提取图像特征,并通过线性投影将其映射到Gemma 2语言模型的输入空间,然后与文本提示一起输入Gemma 2模型进行自回归预测

● 超参数调整:根据模型大小调整学习率,较大的模型使用较小的学习率。

>> 优势:

● 模型家族:提供不同大小和分辨率的模型,方便研究模型规模和分辨率对迁移性能的影响。

● 开源:所有模型权重都公开发布,方便其他研究者使用。

● 多功能性:在多种视觉语言任务上取得了最先进的结果,包括一些先前未深入探索的任务,例如表格结构识别、分子结构识别、乐谱识别、长细粒度字幕生成和医学影像报告生成等。

● 高效的CPU推理:通过gemma.cpp框架,支持低精度量化,可在CPU上进行高效推理。

>> 结论和观点

● PaliGemma 2在多种下游任务上表现出色,尤其是在计算资源充足的情况下,更大的模型尺寸和更高的分辨率能显著提升性能。

● 模型大小和分辨率对不同任务的影响不同,有些任务更受益于高分辨率,有些任务更受益于更大的语言模型。

● 较大的模型通常具有较低的最佳迁移学习率

● PaliGemma 2在一些特定领域任务(如OCR、分子结构识别、乐谱识别、医学影像报告生成等)上取得了最先进的结果,展示了其在各种应用中的通用性和强大能力。

● 虽然在经典目标检测任务上的表现不如专门设计的检测器,但PaliGemma 2依然在一些涉及目标定位的视觉语言任务(如指代表达式理解和分割)上表现出色。

目录

相关文章

《PaliGemma 2: A Family of Versatile VLMs for Transfer》翻译与解读

PaliGemma 2的简介

1、PaliGemma 2 版本包含以下检查点(bfloat16 精度):

2、模型性能

PaliGemma 2的安装和使用方法

1、安装

2、使用方法

推理示例 (使用 10B 参数量,在 DOCCI 数据集上微调的模型):

量化推理 (使用 bitsandbytes 库进行 4-bit nf4 量化):

PaliGemma 2的案例应用

DOCCI 数据集上的长细粒度字幕生成

VQAv2 数据集上的视觉问答


相关文章

《PaliGemma 2: A Family of Versatile VLMs for Transfer》翻译与解读

地址

论文地址:https://arxiv.org/abs/2412.03555

时间

2024124 日

作者

Google DeepMind

摘要

PaliGemma 2 是基于 Gemma 2 系列语言模型的 PaliGemma 开放式视觉语言模型(VLM)的升级版。我们将 PaliGemma 也使用的 SigLIP-So400m 视觉编码器与整个 Gemma 2 模型系列相结合,从 20 亿参数的模型一直到 270 亿参数的模型。我们在三个分辨率(224 像素、448 像素和 896 像素)下分多个阶段训练这些模型,以使它们具备广泛的知识,以便通过微调进行迁移。由此产生的涵盖不同模型大小和分辨率的基础模型系列,使我们能够研究影响迁移性能的因素(如学习率),并分析任务类型、模型大小和分辨率之间的相互作用。我们进一步增加了 PaliGemma 范围之外的迁移任务的数量和广度,包括不同的 OCR 相关任务,如表格结构识别、分子结构识别、乐谱识别,以及长细粒度描述和放射学报告生成,在这些任务上 PaliGemma 2 取得了最先进的结果。

PaliGemma 2的简介

PaliGemma 2 是 PaliGemma 模型的迭代升级版本。它沿用了强大的 SigLIP 视觉编码器,但将文本解码器升级到了最新的 Gemma 2。 PaliGemma 2 提供了三种不同参数规模的预训练模型:3B、10B 和 28B 参数量,并且都支持 224x224、448x448 和 896x896 三种输入分辨率。这种组合提供了很大的灵活性,使用者可以根据自己的需求在质量和效率之间取得平衡。相比之下,之前的 PaliGemma 只有 3B 参数量版本。

预训练模型设计易于微调到下游任务。PaliGemma 2 使用了 Gemma 许可证,允许重新分发、商业用途、微调和创建模型衍生品。

总而言之,PaliGemma 2 提供了多种参数规模和分辨率的模型,易于使用和微调,并在多个视觉语言任务上表现出色,是一个功能强大的开源视觉语言模型。

地址:https://huggingface.co/blog/paligemma2

1、PaliGemma 2 版本包含以下检查点(bfloat16 精度):

>> 9 个预训练模型:3B、10B 和 28B 参数量,分辨率分别为 224x224、448x448 和 896x896。

>> 2 个在 DOCCI 数据集上微调的模型支持 3B 和 10B PaliGemma 2 变体,输入分辨率为 448x448。这些模型展示了生成长、细致和详细字幕的多功能性和鲁棒性。

>> 预训练模型的数据混合包含:WebLI(大规模多语言图像文本数据集)、CC3M-35L(精选的英语图像 alt_text 对,并翻译成 34 种其他语言)、VQ2A(改进的用于问答的数据集,也翻译成 34 种其他语言)、OpenImages(检测和目标感知的问答)、WIT(从维基百科收集的图像和文本)。

2、模型性能

#char:生成的标题中的平均字符数。

#sent:平均句子数。

NES:用于衡量事实不准确性的非蕴涵句子(越低越好)。

PaliGemma 2的安装和使用方法

1、安装

首先需要安装 transformers 库的 4.47 或更高版本:

pip install --upgrade transformers

2、使用方法

主要介绍了使用 Transformers 库进行推理。

推理示例 (使用 10B 参数量,在 DOCCI 数据集上微调的模型):


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.

量化推理 (使用 bitsandbytes 库进行 4-bit 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 数据集上使用量化进行评估的结果,显示量化后的精度下降很小。

PaliGemma 2的案例应用

文章还提到了一个微调脚本和一个notebook,方便用户进行模型微调,并可以使用 LoRA 或 QLoRA 等内存高效的微调技术。

DOCCI 数据集上的长细粒度字幕生成

PaliGemma 2 在 DOCCI 数据集上微调后,能够生成包含文本渲染、空间关系和世界知识的长而细致的字幕。文章提供了与其他模型的性能比较,以及一些模型输出示例,展示了模型的强大能力。 指标包括:平均字符数 (#char)、平均句子数 (#sent) 和非蕴涵句子百分比 (NES,越低越好)。

VQAv2 数据集上的视觉问答

Hugging Face 团队使用 LoRA 微调技术对 PaliGemma 2 3B (448x448 分辨率) 模型进行微调,并在 VQAv2 数据集上进行视觉问答演示。 提供了演示的代码和 Gradio 演示链接。

### Llama3 Gemma2 的特性、性能及应用场景比较 #### 特性 (Features) Llama3 是 Meta 开发的一系列开源大语言模型中的最新版本之一,其主要特点在于支持多模态输入以及更高的上下文长度处理能力[^1]。相比之下,Gemma2 则是由 MoonShot 推出的一款闭源大型语言模型,专注于对话理解生成质量优化。 - **多模态支持**: Llama3 提供了更强的图像文本联合理解功能,而 Gemma2 主要集中在纯文本交互上。 - **参数规模**: 虽然具体数值未公开披露,但从先前版本推测,两者可能处于相似量级但各有侧重领域内的调优策略不同。 #### 性能 (Performance) 在实际测试中发现: - 对于复杂逻辑推理任务如数学计算或者编程代码撰写方面,基于前代产品表现来看,Llama 系列通常展现出较强优势因为它们接受过广泛技术文档训练从而具备良好编码能力科学知识基础; - 另一方面,在涉及自然流畅的人际交流场景下比如客服聊天机器人应用场合里,则可能是经过专门微调后的Gemmas系列产品会更胜一筹由于它更加注重用户体验友好性情感共鸣建立过程。 #### 应用场景 (Use Cases) 鉴于上述区别可以得出结论如下: - 如果目标项目需要利用到视觉数据配合文字分析解释等功能模块构建解决方案的话那么选择Meta家出品LLaMA家族成员将是明智之举因为它能够很好地融合不同类型的信息资源来解决问题并提供全面见解; - 当仅仅关注高质量书面表达或者是创建虚拟助手用于日常沟通联系目的之时考虑采用由Moonshot打造而成GEMMAs品牌也许更为合适因其擅长营造亲切互动氛围使得机器回复听起来更像是真人所说话语一般温暖贴心. ```python # 示例代码展示如何加载预训练模型(假设存在官方API) from transformers import pipeline nlp_llama = pipeline('text-generation', model='meta-llm/Llama3') nlp_gemma = pipeline('conversational', model='moonshot/Gemma2') result_llama = nlp_llama("Explain quantum mechanics simply.") result_gemma = nlp_gemma([{"speaker":"USER","text":"Tell me about your day?"},{"speaker":"BOT"}]) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个处女座的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值