本仓库包含了Pix2Struct: 截图解析作为视觉语言理解的预训练的代码。
我们发布了Base和Large模型的预训练检查点,以及在论文中讨论的九个下游任务上微调它们的代码。我们无法发布预训练数据,但可以使用C4数据集中公开发布的URL复制这些数据。
克隆GitHub仓库,安装pix2struct
包,并运行测试以确保所有依赖项都成功安装。
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
pytest
如果尚未安装,你可能需要先安装Java(sudo apt install default-jre
)和conda。
我们将使用Google Cloud Storage (GCS)进行数据和模型存储。在接下来的文档中,我们假设你自己的存储桶和目录的路径存储在PIX2STRUCT_DIR
环境变量中:
export PIX2STRUCT_DIR="gs://<your_bucket>/<path_to_pix2struct_dir>"
运行实验的代码在查找预处理数据时假定使用此环境变量。
我们的数据预处理脚本默认使用Dataflow运行,利用Apache Beam库。通过关闭--
后出现的标志,也可以在本地运行。
在接下来的文档中,我们假设GCP项目信息存储在以下环境变量中:
export GCP_PROJECT=<your_project_id>
export GCP_REGION=<your_region>
以下是预处理每个数据集所需的命令。结果将写入$PIX2STRUCT_DIR/data/<task_name>/preprocessed/
,这是tasks.py
中假定的文件结构。
mkdir -p data/textcaps
cd data/textcaps
curl -O https://dl.fbaipublicfiles.com/textvqa/data/textcaps/TextCaps_0.1_train.json
curl -O https://dl.fbaipublicfiles.com/textvqa/data/textcaps/TextCaps_0.1_val.json
curl -O https://dl.fbaipublicfiles.com/textvqa/data/textcaps/TextCaps_0.1_test.json
curl -O https://dl.fbaipublicfiles.com/textvqa/images/train_val_images.zip
curl -O https://dl.fbaipublicfiles.com/textvqa/images/test_images.zip
unzip train_val_images.zip
rm train_val_images.zip
unzip test_images.zip
rm test_images.zip
cd ..
gsutil -m cp -r textcaps_data $PIX2STRUCT_DIR/data/textcaps
python -m pix2struct.preprocessing.convert_textcaps \
--textcaps_dir=$PIX2STRUCT_DIR/data/textcaps \
--output_dir=$PIX2STRUCT_DIR/data/textcaps/processed \
-- \
--runner=DataflowRunner \
--save_main_session \
--project=$GCP_PROJECT \
--region=$GCP_REGION \
--temp_location=$PIX2STRUCT_DIR/data/temp \
--staging_location=$PIX2STRUCT_DIR/data/staging \
--setup_file=./setup.py
mkdir -p data/chartqa
cd data/chartqa
git clone https://github.com/vis-nlp/ChartQA.git
cp -r ChartQA/ChartQA\ Dataset/* ./
rm -rf ChartQA
cd ..
gsutil -m cp -r chartqa $PIX2STRUCT_DIR/data/chartqa
python -m pix2struct.preprocessing.convert_chartqa \
--data_dir=$PIX2STRUCT_DIR/data/chartqa \
-- \
--runner=DataflowRunner \
--save_main_session \
--project=$GCP_PROJECT \
--region=$GCP_REGION \
--temp_location=$PIX2STRUCT_DIR/data/temp \
--staging_location=$PIX2STRUCT_DIR/data/staging \
--setup_file=./setup.py
Screen2Words、RefExp和Widget Captioning都需要RICO数据集中的图像。如果你想使用这些数据集中的任何一个,请在继续之前处理RICO图像。
cd data
wget https://storage.googleapis.com/crowdstf-rico-uiuc-4540/rico_dataset_v0.1/unique_uis.tar.gz
tar xvfz unique_uis.tar.gz
rm unique_uis.tar.gz
gsutil -m cp -r combined $PIX2STRUCT_DIR/data/rico_images
如果你还没有设置RICO,请在继续之前先进行设置。
mkdir -p data/widget_captioning
cd data/widget_captioning
git clone https://github.com/google-research-datasets/widget-caption.git
cp widget-caption/widget_captions.csv ./
cp widget-caption/split/*.txt ./
mv dev.txt val.txt
rm -rf widget-caption
cd ..
gsutil -m cp -r widget_captioning $PIX2STRUCT_DIR/data/widget_captioning
python -m pix2struct.preprocessing.convert_widget_captioning \
--data_dir=$PIX2STRUCT_DIR/data/widget_captioning \
--image_dir=$PIX2STRUCT_DIR/data/rico_images \
-- \
--runner=DataflowRunner \
--save_main_session \
--project=$GCP_PROJECT \
--region=$GCP_REGION \
--temp_location=$PIX2STRUCT_DIR/data/temp \
--staging_location=$PIX2STRUCT_DIR/data/staging \
--setup_file=./setup.py
如果你还没有设置RICO,请在继续之前先进行设置。
cd data
git clone https://github.com/google-research-datasets/screen2words.git
gsutil -m cp -r screen2words $PIX2STRUCT_DIR/data/screen2words
python -m pix2struct.preprocessing.convert_screen2words \
--screen2words_dir=$PIX2STRUCT_DIR/data/screen2words \
--rico_dir=$PIX2STRUCT_DIR/data/rico_images \
-- \
--runner=DataflowRunner \
--save_main_session \
--project=$GCP_PROJECT \
--region=$GCP_REGION \
--temp_location=$PIX2STRUCT_DIR/data/temp \
--staging_location=$PIX2STRUCT_DIR/data/staging \
--setup_file=./setup.py
如果你还没有设置RICO,请在继续之前先进行设置。
mkdir -p data/refexp
cd data/refexp
wget https://github.com/google-research-datasets/uibert/raw/main/ref_exp/train.tfrecord
wget https://github.com/google-research-datasets/uibert/raw/main/ref_exp/dev.tfrecord
wget https://github.com/google-research-datasets/uibert/raw/main/ref_exp/test.tfrecord
mv dev.tfrecord val.tfrecord
cd ..
gsutil -m cp -r refexp $PIX2STRUCT_DIR/data/refexp
python -m pix2struct.preprocessing.convert_refexp \
--data_dir=$PIX2STRUCT_DIR/data/refexp \
--image_dir=$PIX2STRUCT_DIR/data/rico_images \
-- \
--runner=DataflowRunner \
--save_main_session \
--project=$GCP_PROJECT \
--region=$GCP_REGION \
--temp_location=$PIX2STRUCT_DIR/data/temp \
--staging_location=$PIX2STRUCT_DIR/data/staging \
--setup_file=./setup.py
mkdir -p data/docvqa
cd data/docvqa
从官方来源下载DocVQA(单文档视觉问答)(需要注册)。以下步骤假设train/val/test.tar.gz文件位于data/docvqa
中。
tar xvf train.tar.gz
tar xvf val.tar.gz
tar xvf test.tar.gz
rm -r *.tar.gz */ocr_results
cd ..
gsutil -m cp -r docvqa $PIX2STRUCT_DIR/data/docvqa
python -m pix2struct.preprocessing.convert_docvqa \
--data_dir=$PIX2STRUCT_DIR/data/docvqa \
-- \
--runner=DataflowRunner \
--save_main_session \
--project=$GCP_PROJECT \
--region=$GCP_REGION \
--temp_location=$PIX2STRUCT_DIR/data/temp \
--staging_location=$PIX2STRUCT_DIR/data/staging \
--setup_file=./setup.py
mkdir -p data/infographicvqa
cd data/infographicvqa
从此网站下载InfographicVQA任务1(需要注册)。以下步骤假设train/val/test.json
和zip
文件位于data/infographicvqa
中。
for split in train val test
do
unzip infographicVQA_${split}_v1.0_images.zip
mv infographicVQA_${split}_v1.0_images $split
mv infographicVQA_${split}_v1.0.json $split/${split}_v1.0.json
done
rm *.zip
cd ..
gsutil -m cp -r infographicvqa $PIX2STRUCT_DIR/data/infographicvqa
python -m pix2struct.preprocessing.convert_docvqa \
--data_dir=$PIX2STRUCT_DIR/data/infographicvqa \
-- \
--runner=DataflowRunner \
--save_main_session \
--project=$GCP_PROJECT \
--region=$GCP_REGION \
--temp_location=$PIX2STRUCT_DIR/data/temp \
--staging_location=$PIX2STRUCT_DIR/data/staging \
--setup_file=./setup.py
mkdir -p data/ocrvqa
cd data/ocrvqa
按照OCR-VQA网站上的说明将数据下载到data/ocrvqa
(需要爬取)。以下步骤假设data/ocrvqa
包含一个名为images
的目录和一个名为dataset.json
的文件。
cd ..
gsutil -m cp -r ocrvqa $PIX2STRUCT_DIR/data/ocrvqa
python -m pix2struct.preprocessing.convert_ocrvqa \
--data_dir=$PIX2STRUCT_DIR/data/ocrvqa \
-- \
--runner=DataflowRunner \
--save_main_session \
--project=$GCP_PROJECT \
--region=$GCP_REGION \
--temp_location=$PIX2STRUCT_DIR/data/temp \
--staging_location=$PIX2STRUCT_DIR/data/staging \
--setup_file=./setup.py
mkdir -p data/
cd data/
wget https://ai2-public-datasets.s3.amazonaws.com/diagrams/ai2d-all.zip
unzip ai2d-all.zip
rm ai2d-all.zip
gsutil -m cp -r ai2d $PIX2STRUCT_DIR/data/ai2d
python -m pix2struct.preprocessing.convert_ai2d \
--data_dir=$PIX2STRUCT_DIR/data/ai2d \
--test_ids_path=gs://pix2struct-data/ai2d_test_ids.csv \
-- \
--runner=DataflowRunner \
--save_main_session \
--project=$GCP_PROJECT \
--region=$GCP_REGION \
--temp_location=$PIX2STRUCT_DIR/data/temp \
--staging_location=$PIX2STRUCT_DIR/data/staging \
--setup_file=./setup.py
主要实验是作为T5X库的轻量级包装实现的。为简洁起见,我们演示了在Screen2Words数据集上微调预训练的基础Pix2Struct模型的示例工作流程。要扩展到更大的设置,请参阅T5X文档。
按照官方说明在Cloud TPU VM上运行JAX,这允许您直接ssh
到TPU主机。
在此示例中,我们使用的是v3-8
TPU:
TPU_TYPE=v3-8
TPU_NAME=pix2struct-$TPU_TYPE
TPU_ZONE=europe-west4-a
gcloud compute tpus tpu-vm create $TPU_NAME \
--zone=$TPU_ZONE \
--accelerator-type=$TPU_TYPE \
--version=tpu-vm-base
gcloud compute tpus tpu-vm ssh $TPU_NAME --zone=$TPU_ZONE
一旦您ssh
到TPU主机后,按照"入门"说明安装pix2struct
包。
以下命令将启动训练循环,该循环包括训练步骤与验证集上的评估交替进行。
python -m t5x.train \
--gin_search_paths="pix2struct/configs" \
--gin_file="models/pix2struct.gin" \
--gin_file="runs/train.gin" \
--gin_file="sizes/base.gin" \
--gin_file="optimizers/adafactor.gin" \
--gin_file="schedules/screen2words.gin" \
--gin_file="init/pix2struct_base_init.gin" \
--gin.MIXTURE_OR_TASK_NAME="'screen2words'" \
--gin.MODEL_DIR="'$PIX2STRUCT_DIR/experiments/screen2words_base'" \
--gin.TASK_FEATURE_LENGTHS="{'inputs': 4096, 'targets': 128}" \
--gin.BATCH_SIZE=32
以下命令在测试集上评估模型。你需要将检查点路径替换为根据验证性能实际选择的路径。
python -m t5x.eval \
--gin_search_paths="pix2struct/configs" \
--gin_file="models/pix2struct.gin" \
--gin_file="runs/eval.gin" \
--gin_file="sizes/base.gin" \
--gin.MIXTURE_OR_TASK_NAME="'screen2words'" \
--gin.CHECKPOINT_PATH="'$PIX2STRUCT_DIR/experiments/screen2words_base/checkpoint_286600'" \
--gin.EVAL_OUTPUT_DIR="'$PIX2STRUCT_DIR/experiments/test_exp/test_eval'" \
--gin.EVAL_SPLIT="'test'" \
--gin.TASK_FEATURE_LENGTHS="{'inputs': 4096, 'targets': 128}" \
--gin.BATCH_SIZE=32
除了在configs/init
目录中指定和发布的预训练检查点外,我们还发布了所有任务的微调模型检查点。
任务 | GCS 路径 (Base) | GCS 路径 (Large) |
---|---|---|
TextCaps | gs://pix2struct-data/textcaps_base/checkpoint_280400 | gs://pix2struct-data/textcaps_large/checkpoint_180600 |
ChartQA | gs://pix2struct-data/chartqa_base/checkpoint_287600 | gs://pix2struct-data/charqa_large/checkpoint_182600 |
WidgetCaptioning | gs://pix2struct-data/widget_captioning_base/checkpoint_281600 | gs://pix2struct-data/widget_captioning_large/checkpoint_181600 |
Screen2Words | gs://pix2struct-data/screen2words_base/checkpoint_282600 | gs://pix2struct-data/screen2words_large/checkpoint_183000 |
RefExp | gs://pix2struct-data/refexp_base/checkpoint_290000 | gs://pix2struct-data/refexp_large/checkpoint_187800 |
DocVQA | gs://pix2struct-data/docvqa_base/checkpoint_284400 | gs://pix2struct-data/docvqa_large/checkpoint_184000 |
InfographicVQA | gs://pix2struct-data/infographicvqa_base/checkpoint_284000 | gs://pix2struct-data/infographicvqa_large/checkpoint_182000 |
OCR-VQA | gs://pix2struct-data/ocrvqa_base/checkpoint_290000 | gs://pix2struct-data/ocrvqa_large/checkpoint_188400 |
AI2D | gs://pix2struct-data/ai2d_base/checkpoint_284400 | gs://pix2struct-data/ai2d_large/checkpoint_184000 |
这些检查点与上述文档中的评估命令以及下面提到的两种推理方法兼容。请确保configs/sizes
下的配置文件与检查点保持一致。
我们提供了两种进行推理的方法。出于测试和演示目的,这些方法可以在CPU上运行。在这种情况下,请将JAX_PLATFORMS
环境变量设置为cpu
。
我们提供了一个用于对单个示例进行推理的最小脚本。 这个路径仅在极小规模下进行了测试,不适用于大规模推理。对于大规模推理,我们建议设置一个带有占位符标签的自定义任务,并运行上述文档中的评估脚本(t5x.eval
)。
在以下示例中,我们展示了使用在TextCaps任务上微调的基础大小检查点来预测图像标题的命令。对于也接受文本提示(如VQA中的问题)的任务,你还可以通过text
标志提供问题(除了用image
标志指定图像)。
python -m pix2struct.example_inference \
--gin_search_paths="pix2struct/configs" \
--gin_file=models/pix2struct.gin \
--gin_file=runs/inference.gin \
--gin_file=sizes/base.gin \
--gin.MIXTURE_OR_TASK_NAME="'placeholder_pix2struct'" \
--gin.TASK_FEATURE_LENGTHS="{'inputs': 2048, 'targets': 128}" \
--gin.BATCH_SIZE=1 \
--gin.CHECKPOINT_PATH="'gs://pix2struct-data/textcaps_base/checkpoint_280400'" \
--image=$HOME/test_image.jpg
为了提供更加用户友好的演示,我们还提供了上述推理脚本的基于Web的替代方案。运行此命令时,假设你在本地运行演示,可以通过localhost:8080
(或通过port
标志指定的任何端口)访问Web演示。然后,你可以上传自定义图像和可选提示,而不是通过命令行指定它们。
python -m pix2struct.demo \
--gin_search_paths="pix2struct/configs" \
--gin_file=models/pix2struct.gin \
--gin_file=runs/inference.gin \
--gin_file=sizes/base.gin \
--gin.MIXTURE_OR_TASK_NAME="'placeholder_pix2struct'" \
--gin.TASK_FEATURE_LENGTHS="{'inputs': 2048, 'targets': 128}" \
--gin.BATCH_SIZE=1 \
--gin.CHECKPOINT_PATH="'gs://pix2struct-data/textcaps_base/checkpoint_280400'"
当你完成TPU VM的 使用后,记得删除实例:
gcloud compute tpus tpu-vm delete $TPU_NAME --zone=$TPU_ZONE
这不是官方支持的Google产品。
字节跳动发布的AI编程神器IDE
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项 目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
全能AI智能助手,随时解答生活与工作的多样问题
问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。
实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者, 还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务 的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容 生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。
选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。
专业的AI公文写作平台,公文写作神器
AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。
OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。
openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号