溪深难受雪,山冻不流云。
小伙们好,我是卖热干面的小女孩,继续 多模态大模型系列 ,今天这篇小作文简要介绍Google DeepMind最新的多模态成果:PaliGemma 2,并从实战角度实测对比PaliGemma 2、Qwen2-VL、MinCPM-V在各个真实场景下的效果。至于PaliGemma 2技术细节的全面解读及其微调实战,感兴趣的小伙伴可以留意后续2篇小作文。更多关于多模态大模型可以 这里订阅 。
Google DeepMind 最近发布全新的视觉-语言模型:PaliGemma 2 ,该模型是 PaliGemma(2024年5月份发布) 的升级版。与其前身一样,PaliGemma 2 在视觉部分仍然使用强大的 SigLIP, 但在文本解码器部分采用最新的 Gemma 2 。关于Gemma 2的介绍可以查阅之前的小作文:
LLM系列 | Google最新开源大语言模型:Gemma 2介绍及其微调(上篇)
LLM系列 | Google最新开源大语言模型:Gemma 2介绍及其微调(下篇)
相比之前仅提供 3B 版本的 PaliGemma ,新版的PaliGemma 2 提供了参数规模分别为 3B、10B 和 28B的模型家族。所有模型都支持多种输入分辨率:224x224、448x448和896x896。这些组合为不同的应用场景提供了极大的灵活性,开发者可以根据自己的实际需要在效果和效率之间进行权衡。PaliGemma 2 在Gemma许可证下发布,允许再分发、商业使用、微调和创建模型衍生品。
此外,Google官方还发布了一些在 DOCCI 数据集上微调的模型,展示了稳健的长篇幅、细腻、详细的图文描述能力。基于DOCCI微调的模型提供 3B 和 10B 两种版本,且支持 448x448 的输入分辨率。简而言之,此次发布包含以下 bfloat16 精度的检查点:
- 9个预训练模型:3B、10B 和 28B,分辨率分别为 224x224、448x448 和 896x896
- 2个 DOCCI 微调模型:在 DOCCI 数据集(图像-文本描述对)上微调的模型,输入分辨率为 448x448:
- 3B:https://huggingface.co/google/paligemma2-3b-ft-docci-448
- 10B:https://huggingface.co/google/paligemma2-10b-ft-docci-448
文末将 实测 对比PaliGemma 2(在DOCCI上微调的3B版)、Qwen2-VL 2B、MiniCPM-V的实战效果。
论文地址: https://arxiv.org/abs/2412.03555
模型下载地址: https://huggingface.co/collections/google/paligemma-2-release-67500e1e1dbfdd4dee27ba48
正如在之前的 PaliGemma 发布中所见,预训练(pt)模型非常适合进一步在下游任务上进行微调。预训练模型使用了以下混合数据集进行训练。预训练数据集的多样性使得在相似领域的下游任务微调时只需要相对较少的样本:
- WebLI:基于公开网络构建的大规模多语言图像-文本数据集。使用了多个 WebLI 数据切片子数据集来获取多样化的模型能力,如视觉语义理解、目标定位、视觉场景文本理解和多语言能力。
- CC3M-35L:来自网页的精选英语image-alt_text对(图像-替代文本对)。作者使用 Google Cloud Translation API 将数据集翻译成额外的34种语言。
- 视觉问题生成与问答验证(VQ2A):改进的问答数据集。使用 Google Cloud Translation API 将数据集翻译成相同的额外34种语言。
- OpenImages:在OpenImages 数据集上使用人工制定规则生成检测和物体感知问答。
- WIT:从维基百科收集的图像和文本。
PaliGemma 2 团队在内部将预训练模型在各种视觉-语言理解任务上进行了微调,这些微调模型的基准测试结果感兴趣的小伙伴可以查阅 原始的技术报告或者静待下一篇技术解读文章 。
在 DOCCI 数据集上微调的 PaliGemma 2 可以完成各种的描述任务,包括文本渲染、捕捉空间关系以及在描述中包含世界知识。以下是 DOCCI 微调后的 PaliGemma 2 检查点与其他模型的性能比较(来自技术报告表6):
- #char:生成描述的平均字符数
- #sent:平均句子数
- NES:非蕴含句子数(越低越好),用于衡量事实准确性
以下进行对PaliGemma 2、Qwen2-VL 2B、MiniCPM-V进行实测,选择的任务包括:识物、识人、图片问答和表格问答。其中参与实测的PaliGemma 2模型是在DOCCI数据集上微调。参与实测的具体模型为:
- PaliGemma 2 3B:https://huggingface.co/google/paligemma2-3b-ft-docci-448
- Qwen2-VL 2B:https://huggingface.co/Qwen/Qwen2-VL-2B-Instruct
- MiniCPM-V-2_6:https://huggingface.co/openbmb/MiniCPM-V-2\_6
实测:识物
测试图片:
Prompt:"Which city is this building in?"`
PaliGemma 2 3B
Prompt="Which city is this building in?",返回结果:
Shanghai
如果使用中文的话,Prompt:
prompt = "这建筑在哪个城市?"
paligemma2-3b-ft-docci-448结果:
shanghai
修改Prompt为:
prompt =
"What's the name of this building"
返回结果:
The Oriental Pearl Tower
in
Shanghai, China. The tower is lit up with different colors, and there is a bridge
in
front of it with lights on it. There are other buildings visible on the left and right of the tower. The sky is dark blue over the area.
使用中文Prompt:
prompt =
"这个建筑物叫什么名字"
返回结果:
Oriental Pearl Tower
综上,paligemma2-3b-ft-docci-448识物能力还不错,而且具备一定的中文理解能力。但是当要求中文返回结果的时候,无法遵循中文返回的要求,返回结果依然是英文。
Qwen2-VL 2B
示例1:
示例2:
示例3:
MiniCPM-V-2_6
英文版 Prompt (
Which city is this building in?
)返回结果:
This building is the Oriental Pearl Tower, located
in
Shanghai, China.
中文版 Prompt (
这建筑在哪个城市?
)返回结果:
图片中的建筑是上海的东方明珠塔,位于中国上海市。这座塔是上海的标志性建筑之一,以其独特的球形结构和高度而闻名。它由三个巨大的球体和一个中央塔组成,每个球体之间通过一系列连接的平台相连。该塔不仅是观光景点,还设有餐厅、观景台和博物馆,为游客提供了城市全景。
小结
综上,在识物方面,PaliGemma 2 3B、Qwen2-VL 2B、MiniCPM-V-2_6 表现都不错。PaliGemma 2 3B虽然具备一定的中文理解能力,但是停留在能懂不能说的现状,需要进一步中文数据微调。
实测:识人
测试图片:
Prompt:
Who is this man?
PaliGemma 2
prompt = "Who is this man?",返回结果:
Elon Musk
prompt = "这人是谁?",返回结果:
Elon Musk
Qwen2-VL 2B
示例1:
示例2:
MiniCPM-V-2_6
prompt = "这人是谁?",返回结果:
我无法提供图片中人物的身份。我的能力仅限于根据可见特征描述图片中的内容,不包括识别或做出关于图片中个人的假设。
prompt = "Who is this man?",返回结果:
The image provided does not give enough information to accurately identify the man. Determining someone
's identity from an image without context or additional information can be speculative and potentially invasive of privacy. If you have more details about the individual, I might be able to provide a more informed response.
小结
综上,在识人方面,PaliGemma 2 3B和Qwen2-VL 2B表现都不错,而MiniCPM-V-2_6则差强人意。
实测:图片问答
测试图片:
Prompt:
prompt =
"这药是什么"
prompt =
"这药要怎么吃?"
PaliGemma 2
prompt = "这药是什么",返回结果:
999®
感冒灵颗粒
解热镇痛。
请仔细阅读说明书并按说明使用或在药师指导下购买和使用 【成份】三叉苦、金盏银盘、野菊花、岗梅、咖啡因。 对乙酰氨基酚、马来酸氯苯那敏、薄荷油。 辅料为蔗糖粉。
【性 状】本品为浅棕色至深棕色颗粒;味甜、微苦。 【功能主治】解热镇痛。用于感冒引起的头痛,发热,鼻塞, 流涕,咽痛。
【规格】每袋重10克(含对乙酰氨基酚0.2克)。
【用法用量】开水冲服,一次10克(1袋),一日3次。
【不良反应】偶见皮疹、荨麻疹、药热及粒细胞 减少;详见说明书。
9袋装
【禁忌】严重肝肾功能不全者禁用。
prompt="这药要怎么吃?",返回结果:
9袋装
prompt="How do I take this medicine",返回结果:
999
感冒灵颗粒
解热镇痛。
请仔细阅读说明书并按说明使用或在药师指导下购买和使用 【成份】三叉苦、金盏银盘、野菊花、岗梅、咖啡因、 对乙酰氨基酚、马来酸氯苯那敏、薄荷油。 辅料为蔗糖粉。
【性 状】本品为浅棕色至深棕色颗粒;味甜、微苦。 【功能主治】解热镇痛。用于感冒引起的头痛,发热,鼻塞, 流涕,咽痛。
【规格】每袋重10克(含对乙酰氨基酚0.2克)。
【用法用量】开水冲服,一次10克(1袋),一日3次。
【不良反应】偶见皮疹、荨麻疹、药热及粒细胞 减少;详见说明书。
9袋装
【禁忌】严重肝肾功能不全者禁用。
Qwen2-VL 2B
prompt = "这药是什么",返回结果:
prompt = "这药要怎么吃?",返回结果:
prompt="How do I take this medicine",返回结果:
MiniCPM-V-2_6
prompt = "这药是什么",返回结果:
这是一盒感冒灵颗粒。
prompt = "这药要怎么吃?",返回结果:
这药的服用方法是每次10克(即一袋),一日3次。
prompt="How do I take this medicine",返回结果:
Mix 10g of medicine with water, drink it once a day
for
10
times
.
该模型出现明显误导,后果相当严重。
小结
综上,Qwen2-VL 2B在中英场景的图片理解都相当出色,MiniCPM-V-2_6对于中文图片能够较好理解,但是对于英文query则会出现幻觉,而PaliGemma 2的中文图片问答能力较弱。
实测:表格问答
测试图片:
Prompt:
prompt =
"Which model is the best on NES metrics"
中文 Prompt = "在NES指标上哪个模型最好?"
降低难度,针对特定行列,而无需推理的问答: Prompt="What is the value of the mPLUG-Owl2 model on NES?" 中文 Prompt="mPLUG-Owl2这个模型在NES上的值是多少?"
PaliGemma 2
prompt = "Which model is the best on NES metrics",返回的结果:
A table with the best model on each metric. The table is split into three columns. The top column has the model names. The column on the left has
"MiniGPT-4"
in
the top left corner. The column
in
the middle has
"mPLUG-Owl2"
in
the top left corner. The column on the right has
"InstructBLIP"
in
the top left corner. The column
in
the middle has
"LLava-1.5"
in
the top left corner
可以看出,该模型目前无法正确回答上述问题。那么尝试降低难度,只针对特定表格行列进行提问,无需进行推理:询问哪个模型在某个指标上的结果值。
prompt="What is the value of the mPLUG-Owl2 model on NES?",返回的结果:
7B 484 5.6 52.3 8B 459 4.4 48.4 7B 510 4.0 42.6 7B 395 4.2 40.6 VILA 7B 871 8.6 28.6 PaliGemma 3B 535 8.9 34.3 Pali
综上,paligemma2-3b-ft-docci-448的表格理解 还比较欠缺 。
Qwen2-VL 2B
Prompt = "在NES指标上哪个模型最好?",返回结果:
Prompt = "NES指标是越低越好,那么在NES指标上哪个模型最好?",返回结果:
Prompt = "mPLUG-Owl2模型在NES指标上的值是多少?",返回结果:
可以看出,在直接问答而不带推理的场景下,Qwen2-VL 2B表现良好。真国货之光!但是,在需要推理的复杂场景下,有待进一步提高。可能是由于答案位于边界,理解难度加大~
MiniCPM-V-2_6
Prompt = "在NES指标上哪个模型最好?",返回结果:
在NES指标上,MiniGPT-4模型表现最好。
虽然,MiniGPT-4在NES指标上的值确实是最大的,但是需要一定的背景知识才能够知晓,NES指标是越小越好。所以,MiniCPM-V-2_6的表现尚可。
Prompt = "NES指标是越低越好,那么在NES指标上哪个模型最好?",返回结果:
NES指标是衡量模型性能的一个标准,数值越低表示模型性能越好。根据图像中的数据,PaliGemma 2在NES指标上表现最好,其值为28.4。
可能是因为图片边界的理解有些不足,如果答案在图片边界,则难以被捕捉到?
Prompt = "mPLUG-Owl2模型在NES指标上的值是多少?",返回结果:
mPLUG-Owl2模型在NES指标上的值是48.4。
小结
综上,整体而言,Qwen2-VL 2B表现最好,优于MiniCPM-V-2_6,在表格问答领域更是在中英方面都远胜于PaliGemma 2。
附代码
模型inference
可以使用 Huggingface transformers 中的 PaliGemmaForConditionalGeneration 和 AutoProcessor API 在 PaliGemma 2 模型上进行推理。在 transformers 的 PyPi 版本发布之前(目前是12月15日),需要从主分支安装:
pip3 install git+https://github.com/huggingface/transformers -i https://mirrors.cloud.tencent.com/pypi/simple
安装完成之后,模型inference:
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=20)
print
(processor.decode(output[0], skip\_special\_tokens=True)[len(prompt):])
模型量化
还可以使用 transformers 的
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}
)
PaliGemma 2 是基于 Gemma 2 系列升级的开源视觉语言模型,融合了 SigLIP-So400m 视觉编码器,并涵盖从 2B 到 27B 的模型规模。通过多阶段训练,不同分辨率(224px²、448px²、896px²)和多任务微调,PaliGemma 2经过微调后在 OCR、分子结构识别、音乐谱识别、医学影像等任务上达到领先性能。新模型在大规模计算下表现显著提升,广泛适用于字幕生成、问答、视频分析等任务,展示了跨领域的优异迁移能力。
新的 PaliGemma 2 非常全能,提供了适合不同需求的多种规模和更强大的预训练模型。憾的是官方此次主要发布预训练模型,而对于微调后的模型仅发布少数几个(如基于DOCCI数据集上微调的结果模型)。对于中文场景,现已发布的PaliGemma 2微调模型表现艰难,需要使用中文场景数据进一步微调。鉴于PaliGemma 2预训练模型的强大和全面性,感兴趣的小伙伴可以在自己的目标场景下进一步微调。如果没有足够资源(包括数据和计算资源),建议直接选Qwen-VL。中文领域的多模态模型,实测还是首推Qwen-VL。