模型简介
模型特点
模型能力
使用案例
🚀 Pix2Struct - 在UI RefExp数据集上微调的模型
Pix2Struct是一个图像编码器 - 文本解码器模型,在图像 - 文本对上进行训练,可用于图像描述和视觉问答等任务。本项目将Google在gcloud中的检查点转换为HF格式,为图像到文本的处理提供支持。
🚀 快速开始
从T5x转换为Hugging Face格式
你可以使用以下脚本将模型从T5x转换为Hugging Face格式:
python convert_pix2struct_checkpoint_to_pytorch.py --t5x_checkpoint_path PATH_TO_T5X_CHECKPOINTS --pytorch_dump_path PATH_TO_SAVE
如果你要转换的是大型模型,请运行:
python convert_pix2struct_checkpoint_to_pytorch.py --t5x_checkpoint_path PATH_TO_T5X_CHECKPOINTS --pytorch_dump_path PATH_TO_SAVE --use-large
保存后,你可以使用以下代码片段将转换后的模型推送到Hugging Face Hub:
from transformers import Pix2StructForConditionalGeneration, Pix2StructProcessor
model = Pix2StructForConditionalGeneration.from_pretrained(PATH_TO_SAVE)
processor = Pix2StructProcessor.from_pretrained(PATH_TO_SAVE)
model.push_to_hub("USERNAME/MODEL_NAME")
processor.push_to_hub("USERNAME/MODEL_NAME")
运行模型
全精度,在CPU上运行
import requests
from PIL import Image
from transformers import Pix2StructForConditionalGeneration, Pix2StructProcessor
url = "https://www.ilankelman.org/stopsigns/australia.jpg"
image = Image.open(requests.get(url, stream=True).raw)
model = Pix2StructForConditionalGeneration.from_pretrained("google/pix2struct-textcaps-base")
processor = Pix2StructProcessor.from_pretrained("google/pix2struct-textcaps-base")
# 仅处理图像
inputs = processor(images=image, return_tensors="pt")
predictions = model.generate(**inputs)
print(processor.decode(predictions[0], skip_special_tokens=True))
>>> A stop sign is on a street corner.
全精度,在GPU上运行
import requests
from PIL import Image
from transformers import Pix2StructForConditionalGeneration, Pix2StructProcessor
url = "https://www.ilankelman.org/stopsigns/australia.jpg"
image = Image.open(requests.get(url, stream=True).raw)
model = Pix2StructForConditionalGeneration.from_pretrained("google/pix2struct-textcaps-base").to("cuda")
processor = Pix2StructProcessor.from_pretrained("google/pix2struct-textcaps-base")
# 仅处理图像
inputs = processor(images=image, return_tensors="pt").to("cuda")
predictions = model.generate(**inputs)
print(processor.decode(predictions[0], skip_special_tokens=True))
>>> A stop sign is on a street corner.
半精度,在GPU上运行
import requests
import torch
from PIL import Image
from transformers import Pix2StructForConditionalGeneration, Pix2StructProcessor
url = "https://www.ilankelman.org/stopsigns/australia.jpg"
image = Image.open(requests.get(url, stream=True).raw)
model = Pix2StructForConditionalGeneration.from_pretrained("google/pix2struct-textcaps-base", torch_dtype=torch.bfloat16).to("cuda")
processor = Pix2StructProcessor.from_pretrained("google/pix2struct-textcaps-base")
# 仅处理图像
inputs = processor(images=image, return_tensors="pt").to("cuda", torch.bfloat16)
predictions = model.generate(**inputs)
print(processor.decode(predictions[0], skip_special_tokens=True))
>>> A stop sign is on a street corner.
使用不同的序列长度
该模型在序列长度为 2048
的情况下进行训练。你可以尝试减少序列长度以提高推理时的内存效率,但对于较小的序列长度(<512),可能会观察到性能下降。在调用处理器时传递 max_patches
参数即可:
inputs = processor(images=image, return_tensors="pt", max_patches=512)
条件生成
你还可以预先添加一些输入文本以执行条件生成:
import requests
from PIL import Image
from transformers import Pix2StructForConditionalGeneration, Pix2StructProcessor
url = "https://www.ilankelman.org/stopsigns/australia.jpg"
image = Image.open(requests.get(url, stream=True).raw)
text = "A picture of"
model = Pix2StructForConditionalGeneration.from_pretrained("google/pix2struct-textcaps-base")
processor = Pix2StructProcessor.from_pretrained("google/pix2struct-textcaps-base")
# 仅处理图像
inputs = processor(images=image, text=text, return_tensors="pt")
predictions = model.generate(**inputs)
print(processor.decode(predictions[0], skip_special_tokens=True))
>>> A picture of a stop sign that says yes.
✨ 主要特性
Pix2Struct - RefExp 详细信息
(基于其预处理)
- 输入:一张带有围绕候选对象绘制的边界框的图像,以及包含指代表达式的标题(存储在图像特征中)。
- 输出:一个布尔标志(解析特征),指示候选对象是否是指代表达式的正确指称。
模型概述
Pix2Struct 是一个图像编码器 - 文本解码器模型,针对各种任务在图像 - 文本对上进行训练,包括图像描述和视觉问答。可用模型的完整列表可在论文的表1中找到:
模型摘要指出:
视觉情境语言无处不在 —— 其来源范围广泛,从带有图表的教科书到带有图像和表格的网页,再到带有按钮和表单的移动应用程序。也许由于这种多样性,以前的工作通常依赖于特定领域的方法,底层数据、模型架构和目标的共享有限。我们提出了 Pix2Struct,这是一个用于纯视觉语言理解的预训练图像到文本模型,可在包含视觉情境语言的任务上进行微调。Pix2Struct 通过学习将网页的掩码截图解析为简化的 HTML 进行预训练。网络中丰富的视觉元素清晰地反映在 HTML 结构中,为预训练数据提供了大量来源,非常适合下游任务的多样性。直观地说,这个目标包含了常见的预训练信号,如 OCR、语言建模、图像描述。除了新颖的预训练策略,我们还引入了可变分辨率的输入表示,以及更灵活的语言和视觉输入集成,其中诸如问题之类的语言提示直接渲染在输入图像之上。我们首次表明,单个预训练模型可以在四个领域的九个任务中的六个任务中取得最先进的结果:文档、插图、用户界面和自然图像。
📄 许可证
本项目采用 Apache-2.0 许可证。
👥 贡献者
该模型最初由 Kenton Lee、Mandar Joshi 等人贡献,并由 Murali Manohar 添加到 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 = {Computation and Language (cs.CL), Computer Vision and Pattern Recognition (cs.CV), FOS: Computer and information sciences, FOS: Computer and information sciences},
title = {Pix2Struct: Screenshot Parsing as Pretraining for Visual Language Understanding},
publisher = {arXiv},
year = {2022},
copyright = {Creative Commons Attribution 4.0 International}
}








