[阅读笔记27][Pix2Struct]Screenshot Parsing as Pretraining for Visual Language Understanding

谷歌23年4月发表的论文提出Pix2Struct图像生成文本模型。该模型有预训练、可变分辨率输入表示、新微调策略等贡献,改进了ViT输入。预训练用自监督网页截图和HTML,有热身阶段。微调针对不同任务预处理,结果显示其在多项任务表现优异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这篇论文是谷歌在23年4月发表的,它所提出的Pix2Struct是一个图像生成文本的模型。

作者的第一个贡献就是提出的预训练策略,用遮盖住的网页截图来预测其对应的HTML,如右图所示。第二个贡献在于为ViT引入了可变分辨率的输入表示。第三个贡献点引入了新的微调策略,将文本prompt直接渲染在图像上方,无缝地集成了视觉和语言输入。

模型的结构是基于ViT的图像编码器加文本解码器,对于模型的输入进行了一些改变以适应各种分辨率的图像输入。传统ViT会将输入图像缩放到定义好的分辨率,如下面左图所示,这会带来两个缺点,首先是图像中的文字、ui会发生畸变,这不利于对这些元素的识别。其次就是预训练阶段只观察到一个特定的分辨率,之后迁移到一些需要更高分辨率的下游任务是很困难的。
但是作者这里对ViT输入做了一些改进,首先等比例缩放图像,保证固定尺寸的patch个数能够达到最大序列长度,之后使用二维绝对位置嵌入。这样有两个好处,首先可以应对极端的图像长宽比,其次可以实时修改序列长度和分辨率。

预训练时使用自监督的网页截图和其HTML来作为训练数据,另外为了更好地上下文建模,作者还对网页中50%的文字进行了mask。整体流程如下图所示。
这种预训练策略集成了另外几个预训练策略,预测截图上未遮挡的部分类似于OCR,预测被遮挡的部分类似完形填空,预测图像标签的alt_text属性类似图像转caption的过程。

在正式预训练之前还需要一个热身阶段,这是因为直接预训练会导致训练过程不稳定且学习缓慢。而通过课程学习这种方法先在一个简单的任务上进行训练有两点好处,首先是模型训练更稳定了,且收敛更快了,然后就是微调之后性能更好了。
热身时训练任务就是下图展示的这样,从BooksCorpus抽取不超过128个字节的文本,然后设置随机颜色随机字体,让模型根据截图来预测实际文本。

微调过程比较简单,主要是对于不同下游任务进行要数据预处理。对于生成Caption的任务不需要特别处理,对于VQA类的任务将问题直接渲染在图像上方。右上方是一些输入图像示例。下方表格是微调所使用的数据集以及任务描述。

最后是结果展示,左上方是对于输入图像处理方式的实验,Variable即作者本篇中提到的方法,Padded就是不改变图像原始长宽比,但是填充至要求的分辨率,这种方法不会扭曲图像,但会牺牲有效分辨率,Stretched是把图像拉伸至要求的分辨率,这种方法会扭曲图像上的文本信息,不利于后续的训练。
右上方是预训练策略的一些消融,分别考虑了热身、遮盖文本以及截图解析这三部分的影响,可以看到截图解析是相当重要的,热身和遮盖文本均能带来小幅性能提升。
最下方是与其他模型的性能对比,在纯视觉方法(输入仅图像)中,Pix2Struct获得了9项任务中8项任务的最优表现。考虑到其他方法的话也能取得6项任务的SotA。

### Pix2Struct 技术介绍 Pix2Struct 是一种用于图像结构化解析的技术,旨在通过输入图像生成相应的结构化表示。这项技术可以应用于表格识别、文档理解等多个场景[^1]。 #### 主要特点 - **多模态处理能力**:能够同时处理视觉信息和文本信息。 - **强大的泛化性能**:经过充分训练后可以在不同类型的图像上表现良好。 - **灵活的应用范围**:不仅限于特定领域内的图片分析任务。 ### 使用教程 为了开始使用 Pix2Struct 进行开发工作,需按照如下指南操作: #### 安装环境与依赖项 首先克隆官方 GitHub 仓库,并设置好 Python 虚拟环境以及必要的库文件: ```bash git clone https://github.com/google-research/pix2struct.git cd pix2struct conda create -n pix2struct python=3.9 conda activate pix2struct pip install -e ".[dev]" -f https://storage.googleapis.com/jax-releases/libtpu_releases.html ``` 上述命令会创建一个新的 Conda 环境 `pix2struct` 并安装该项目所需的所有软件包及其版本[^3]。 #### 数据准备阶段 准备好自己的数据集之后,可以根据具体需求调整配置参数以适应不同的应用场景。通常情况下,这一步骤涉及标注工具的选择及自定义标签体系的设计等环节。 ### 示例代码展示 下面给出一段简单的 Python 代码片段作为入门示例,展示了如何加载预训练模型并对单张测试图片执行预测任务: ```python from PIL import Image import torch from transformers import AutoProcessor, Pix2StructForConditionalGeneration processor = AutoProcessor.from_pretrained("google/pix2struct-cord-vision") model = Pix2StructForConditionalGeneration.from_pretrained("google/pix2struct-cord-vision") image_path = "path_to_your_image.png" image = Image.open(image_path) inputs = processor(images=image, text="What is the total amount?", return_tensors="pt", padding=True) outputs = model.generate(**inputs) print(processor.decode(outputs[0], skip_special_tokens=True)) ``` 这段脚本实现了读取一张本地存储的 PNG 图像文件,并调用 Pix2Struct 预训练模型来回答关于该图中的金额总数的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值