基础模型:
- ibm-granite/granite-vision-3.2-2b
许可证: apache-2.0
语言:
- 英语
库名称: transformers
granite-vision-3.2-2b
模型概述:
granite-vision-3.2-2b是一款紧凑高效的视觉语言模型,专为视觉文档理解设计,能够从表格、图表、信息图、绘图、示意图等中自动提取内容。该模型基于精心策划的指令跟随数据集训练而成,包含多样化的公共数据集和针对广泛文档理解及通用图像任务定制的合成数据集。它通过对Granite大语言模型进行图像和文本模态的微调而训练完成。
评估:
我们使用标准的llms-eval基准测试,将Granite Vision 3.2与其他参数范围在1B-4B之间的视觉语言模型(VLMs)进行了对比评估。评估涵盖多个公共基准测试,特别侧重于文档理解任务,同时也包括通用视觉问答基准测试。
|
Molmo-E |
InternVL2 |
Phi3v |
Phi3.5v |
Granite Vision |
文档基准测试 |
|
|
|
|
|
DocVQA |
0.66 |
0.87 |
0.87 |
0.88 |
0.89 |
ChartQA |
0.60 |
0.75 |
0.81 |
0.82 |
0.87 |
TextVQA |
0.62 |
0.72 |
0.69 |
0.7 |
0.78 |
AI2D |
0.63 |
0.74 |
0.79 |
0.79 |
0.76 |
InfoVQA |
0.44 |
0.58 |
0.55 |
0.61 |
0.64 |
OCRBench |
0.65 |
0.75 |
0.64 |
0.64 |
0.77 |
LiveXiv VQA |
0.47 |
0.51 |
0.61 |
- |
0.61 |
LiveXiv TQA |
0.36 |
0.38 |
0.48 |
- |
0.57 |
其他基准测试 |
|
|
|
|
|
MMMU |
0.32 |
0.35 |
0.42 |
0.44 |
0.37 |
VQAv2 |
0.57 |
0.75 |
0.76 |
0.77 |
0.78 |
RealWorldQA |
0.55 |
0.34 |
0.60 |
0.58 |
0.63 |
VizWiz VQA |
0.49 |
0.46 |
0.57 |
0.57 |
0.63 |
OK VQA |
0.40 |
0.44 |
0.51 |
0.53 |
0.56 |
支持的输入格式:
目前模型支持英语指令和图像(png、jpeg等)作为输入格式。
预期用途:
该模型旨在用于涉及处理视觉和文本数据的企业应用。特别是,该模型非常适合一系列视觉文档理解任务,如分析表格和图表、执行光学字符识别(OCR)以及基于文档内容回答问题。此外,其能力还扩展到通用图像理解,使其能够应用于更广泛的业务场景。对于仅涉及文本输入的任务,我们建议使用我们的Granite大语言模型,这些模型针对纯文本处理进行了优化,性能优于本模型。
生成:
Granite Vision模型原生支持transformers>=4.49
。以下是一个简单的示例,展示如何使用granite-vision-3.2-2b
模型。
使用transformers
首先,确保安装最新版本的transformers:
pip install transformers>=4.49
然后运行以下代码:
from transformers import AutoProcessor, AutoModelForVision2Seq
from huggingface_hub import hf_hub_download
import torch
device = "cuda" if torch.cuda.is_available() else "cpu"
model_path = "ibm-granite/granite-vision-3.2-2b"
processor = AutoProcessor.from_pretrained(model_path)
model = AutoModelForVision2Seq.from_pretrained(model_path).to(device)
img_path = hf_hub_download(repo_id=model_path, filename='example.png')
conversation = [
{
"role": "user",
"content": [
{"type": "image", "url": img_path},
{"type": "text", "text": "What is the highest scoring model on ChartQA and what is its score?"},
],
},
]
inputs = processor.apply_chat_template(
conversation,
add_generation_prompt=True,
tokenize=True,
return_dict=True,
return_tensors="pt"
).to(device)
output = model.generate(**inputs, max_new_tokens=100)
print(processor.decode(output[0], skip_special_tokens=True))
使用vLLM
该模型也可以通过vLLM
加载。首先确保安装以下库:
pip install torch torchvision torchaudio
pip install vllm==0.6.6
然后,根据您的使用场景复制相关代码片段。
from vllm import LLM, SamplingParams
from vllm.assets.image import ImageAsset
from huggingface_hub import hf_hub_download
from PIL import Image
model_path = "ibm-granite/granite-vision-3.2-2b"
model = LLM(
model=model_path,
limit_mm_per_prompt={"image": 1},
)
sampling_params = SamplingParams(
temperature=0.2,
max_tokens=64,
)
image_token = "<image>"
system_prompt = "<|system|>\nA chat between a curious user and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the user's questions.\n"
question = "What is the highest scoring model on ChartQA and what is its score?"
prompt = f"{system_prompt}<|user|>\n{image_token}\n{question}\n<|assistant|>\n"
img_path = hf_hub_download(repo_id=model_path, filename='example.png')
image = Image.open(img_path).convert("RGB")
print(image)
inputs = {
"prompt": prompt,
"multi_modal_data": {
"image": image,
}
}
outputs = model.generate(inputs, sampling_params=sampling_params)
print(f"Generated text: {outputs[0].outputs[0].text}")
微调
有关为Granite Vision新任务进行微调的示例,请参考此笔记本。
使用Granite Vision进行MM RAG
有关使用Granite Vision进行MM RAG的示例,请参考此笔记本。
模型架构:
granite-vision-3.2-2b的架构包含以下组件:
(1) 视觉编码器: SigLIP (https://huggingface.co/docs/transformers/en/model_doc/siglip)。
(2) 视觉语言连接器: 带有gelu激活函数的两层MLP。
(3) 大语言模型: granite-3.1-2b-instruct,上下文长度为128k (https://huggingface.co/ibm-granite/granite-3.1-2b-instruct)。
我们在LLaVA (https://llava-vl.github.io)的基础上训练我们的模型。我们使用多层编码器特征和AnyRes中更密集的网格分辨率,以增强模型理解细微视觉内容的能力,这对于准确解释文档图像至关重要。
训练数据:
总体而言,我们的训练数据主要由两个关键来源组成:(1) 公开可用的数据集 (2) 针对特定能力(包括文档理解任务)内部创建的合成数据。数据集的详细归属可以在技术报告中找到。
基础设施:
我们使用IBM的超算集群Blue Vela训练Granite Vision,该集群配备了NVIDIA H100 GPU。这个集群为我们在数千个GPU上训练模型提供了可扩展且高效的基础设施。
伦理考虑与限制:
使用大型视觉和语言模型涉及人们必须意识到的风险和伦理考虑,包括但不限于:偏见与公平性、错误信息和自主决策。granite-vision-3.2-2b在这方面也不例外。尽管我们的对齐过程包括安全考虑,但在某些情况下,模型可能会对用户提示产生不准确、有偏见或不安全的响应。
此外,尚不确定较小的模型是否由于尺寸较小而在生成场景中更容易出现幻觉,这可能会限制它们生成连贯且上下文准确的响应的能力。
这一领域目前是一个活跃的研究方向,我们期待在这一领域进行更严格的探索、理解和缓解措施。关于伦理,所有大型语言模型的一个潜在风险是它们的恶意使用。我们敦促社区以伦理意图和负责任的方式使用granite-vision-3.2-2b。我们建议将此模型用于文档理解任务,并注意到更通用的视觉任务可能带来更高的触发偏见或有害输出的固有风险。
为了增强安全性,我们建议将granite-vision-3.2-2b与Granite Guardian一起使用。Granite Guardian是一个经过微调的指导模型,旨在检测和标记IBM AI风险图集中概述的关键维度的提示和响应中的风险。其训练包括基于内部红队的人类注释和合成数据,使其在标准基准测试中优于类似的开源模型,提供了额外的安全层。
资源
- 📄 阅读完整的技术报告此处
- ⭐️ 了解Granite的最新更新: https://www.ibm.com/granite
- 🚀 开始使用教程、最佳实践和提示工程建议: https://www.ibm.com/granite/docs/
- 💡 了解最新的Granite学习资源: https://ibm.biz/granite-learning-resources