语言:
- 英语
- 法语
- 罗马尼亚语
- 德语
- 多语言
任务标签: 视觉问答
推理: 不支持
许可证: Apache-2.0
Pix2Struct模型卡片 - 基于AI2D微调(科学图表视觉问答)的大规模版本

目录
- 摘要
- 使用模型
- 贡献
- 引用
摘要
Pix2Struct是一个图像编码器-文本解码器模型,通过图像-文本对训练,支持多种任务,包括图像描述生成和视觉问答。完整模型列表详见论文表1:

模型摘要指出:
视觉语言无处不在——来源涵盖带图解的教科书、含图像表格的网页,以及带按钮表单的移动应用。可能由于这种多样性,先前研究通常依赖领域特定方法,限制了底层数据、模型架构和目标的共享。我们提出Pix2Struct,一个纯视觉语言理解的预训练图像到文本模型,可针对包含视觉语言的下游任务进行微调。Pix2Struct通过解析网页截图掩码为简化HTML进行预训练。网络以其丰富的视觉元素清晰地反映在HTML结构中,为适应下游任务多样性提供了大量预训练数据。直观上,该目标涵盖了OCR、语言建模、图像描述等常见预训练信号。除新颖的预训练策略外,我们还引入了可变分辨率输入表示和更灵活的语言视觉输入整合方式,问题等语言提示可直接渲染在输入图像上。首次证明单一预训练模型能在文档、插图、用户界面和自然图像四大领域的九项任务中,六项达到最先进水平。
使用模型
该模型专为视觉问答微调,需以特定格式提供问题,理想情况下采用选择题形式。
从T5x转换至HuggingFace
使用以下脚本转换:
python convert_pix2struct_checkpoint_to_pytorch.py --t5x_checkpoint_path T5X检查点路径 --pytorch_dump_path 保存路径 --is_vqa
转换大模型时运行:
python convert_pix2struct_checkpoint_to_pytorch.py --t5x_checkpoint_path T5X检查点路径 --pytorch_dump_path 保存路径 --use-large --is_vqa
转换完成后,可通过以下代码推送模型:
from transformers import Pix2StructForConditionalGeneration, Pix2StructProcessor
model = Pix2StructForConditionalGeneration.from_pretrained(保存路径)
processor = Pix2StructProcessor.from_pretrained(保存路径)
model.push_to_hub("用户名/模型名")
processor.push_to_hub("用户名/模型名")
运行模型
CPU全精度运行:
import requests
from PIL import Image
from transformers import Pix2StructForConditionalGeneration, Pix2StructProcessor
image_url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/ai2d-demo.jpg"
image = Image.open(requests.get(image_url, stream=True).raw)
model = Pix2StructForConditionalGeneration.from_pretrained("google/pix2struct-ai2d-large")
processor = Pix2StructProcessor.from_pretrained("google/pix2struct-ai2d-large")
question = "标签15代表什么?(1) 熔岩 (2) 地核 (3) 隧道 (4) 火山灰云"
inputs = processor(images=image, text=question, return_tensors="pt")
predictions = model.generate(**inputs)
print(processor.decode(predictions[0], skip_special_tokens=True))
>>> 火山灰云
GPU全精度运行:
import requests
from PIL import Image
from transformers import Pix2StructForConditionalGeneration, Pix2StructProcessor
image_url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/ai2d-demo.jpg"
image = Image.open(requests.get(image_url, stream=True).raw)
model = Pix2StructForConditionalGeneration.from_pretrained("google/pix2struct-ai2d-large").to("cuda")
processor = Pix2StructProcessor.from_pretrained("google/pix2struct-ai2d-large")
question = "标签15代表什么?(1) 熔岩 (2) 地核 (3) 隧道 (4) 火山灰云"
inputs = processor(images=image, text=question, return_tensors="pt").to("cuda")
predictions = model.generate(**inputs)
print(processor.decode(predictions[0], skip_special_tokens=True))
>>> 火山灰云
GPU半精度运行:
import requests
from PIL import Image
import torch
from transformers import Pix2StructForConditionalGeneration, Pix2StructProcessor
image_url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/ai2d-demo.jpg"
image = Image.open(requests.get(image_url, stream=True).raw)
model = Pix2StructForConditionalGeneration.from_pretrained("google/pix2struct-ai2d-large", torch_dtype=torch.bfloat16).to("cuda")
processor = Pix2StructProcessor.from_pretrained("google/pix2struct-ai2d-large")
question = "标签15代表什么?(1) 熔岩 (2) 地核 (3) 隧道 (4) 火山灰云"
inputs = processor(images=image, text=question, return_tensors="pt").to("cuda", torch.bfloat16)
predictions = model.generate(**inputs)
print(processor.decode(predictions[0], skip_special_tokens=True))
>>> 火山灰云
贡献
该模型由Kenton Lee、Mandar Joshi等人原创贡献,Younes Belkada将其引入Hugging Face生态。
引用
若需引用此工作,请参考原论文:
@misc{https://doi.org/10.48550/arxiv.2210.03347,
doi = {10.48550/ARXIV.2210.03347},
url = {https://arxiv.org/abs/2210.03347},
author = {Lee, Kenton and Joshi, Mandar and Turc, Iulia and Hu, Hexiang and Liu, Fangyu and Eisenschlos, Julian and Khandelwal, Urvashi and Shaw, Peter and Chang, Ming-Wei and Toutanova, Kristina},
keywords = {计算与语言(CL), 计算机视觉与模式识别(CV), 计算机与信息科学, 计算机与信息科学},
title = {Pix2Struct:截图解析作为视觉语言理解的预训练},
publisher = {arXiv},
year = {2022},
copyright = {知识共享署名4.0国际许可}
}