ScreenAI
PyTorch 实现的 Google ScreenAI 多模态模型,理解 UI 界面和图表信息结构
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
PyTorch 实现的 Google ScreenAI 多模态模型,理解 UI 界面和图表信息结构
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下:你随手截一张 UI 截图,AI 就能读懂它——哪个是导航栏、哪个是可点击按钮、图表数据表达了什么。这就是 ScreenAI 试图解决的核心问题:让机器真正"看懂"界面和图表,而不只是把它们当作像素图。
ScreenAI 源自 Google Research 团队 2024 年 2 月发表的论文《ScreenAI: A Vision-Language Model for UI and Infographics Understanding》。该论文探索了一个长期困扰人机交互研究的问题:现有视觉模型能识别猫狗,但对复杂 UI 布局和图表结构的理解能力严重不足。
Google 团队认为,关键在于多模态融合的架构设计。ScreenAI 采用 ViT + 多模态编码器 + 解码器 的三层 Pipeline:首先用 Vision Transformer 将图像切分为 Patch 并编码,然后通过多模态编码器融合文本上下文,最后由 LLM 解码器输出结构化理解结果。
该项目的 PyTorch 实现由 AI 开发者 Kye Gomez(Swarm 框架作者)完成,截至 2026 年 6 月已获得 385 颗 GitHub Stars,MIT 协议开源。
ScreenAI 的第一步是对输入图像进行分块(Patch)处理。代码中 dynamic_patching() 函数将图像按 patch_size=16 切分为小块,每个 Patch 展平后映射到一个嵌入向量:
x = rearrange(
x,
"b c (h p1) (w p2) -> b (h w) (p1 p2 c)",
p1=patch_size[0], p2=patch_size[1],
)
这种处理方式与标准 ViT 一致,但 ScreenAI 进一步引入了 ViTransformerWrapper(来自 zetascale 库)来管理位置编码和序列长度适配。输入图像尺寸默认 224×224,在处理 UI 截图时用户可根据实际分辨率调整 image_size 参数。
这是 ScreenAI 区别于通用 ViT 的核心模块。多模态编码器接收 ViT 编码后的图像特征与文本嵌入,执行自注意力(Self-Attention)操作:
self.attn = Attention(dim, dim_head, heads, causal=True, qk_norm=True, flash=...)
self.ffn = FeedForward(dim, dim, 4)
x, _ = self.attn(x) # 自注意力
x = self.ffn(x) + x # 前馈网络 + 残差连接
值得注意的是,代码中集成了 Flash Attention 支持(当 CUDA 可用时自动启用),可显著降低长序列下的显存占用。此外,代码支持分布式训练(torch.distributed),通过 AllGather 函数实现多 GPU 间的梯度同步,适合大规模模型训练场景。
文本生成阶段使用 CrossAttention 机制,让语言模型"查询"视觉特征:
q = self.to_q(x) # 从文本侧投影
k, v = self.to_kv(context).chunk(2, dim=-1) # 从图像侧投影
sim = einsum("b h i d, b j d -> b h i j", q, k)
attn = sim.softmax(dim=-1)
此外,解码器还支持 SwiGLU 激活函数(来自 zetascale 库的 SwiGLU 实现),这是一种比 ReLU 和 GELU 更高效的门控激活机制,在 LLaMA 等主流大模型中广泛使用。
ScreenAI 的实现依赖三个核心库:
| 依赖库 | 作用 | 重要性 |
|---|---|---|
| torch | 深度学习框架 | 核心 |
| zetascale | ViT 封装、SwiGLU、Attention、FeedForward 等组件 | 核心 |
| einops | 张量重塑(rearrange 等操作) | 核心 |
| torchvision | 图像预处理 | 辅助 |
此外,swarms 库被列为直接依赖(由项目作者维护),这是一个 AI Agent 编排框架,说明 ScreenAI 未来可能被集成到更复杂的 Agent 工作流中。
安装非常简洁,一行命令完成:
pip3 install screenai
推理代码也非常直观,但需要注意的是——这是一个纯推理库,而非可直接使用的服务。模型权重需要自行加载或从预训练 checkpoint 初始化(仓库中未提供预训练权重下载链接)。标准用法:
import torch
from screenai.main import ScreenAI
image = torch.rand(1, 3, 224, 224) # 输入图像 tensor
text = torch.randint(0, 20000, (1, 1028)) # 输入文本 token
model = ScreenAI(
num_tokens=20000, patch_size=16, image_size=224,
dim=512, depth=6, heads=8,
vit_depth=4, multi_modal_encoder_depth=4, llm_decoder_depth=4,
)
out = model(text, image)
ScreenAI 不提供 Docker 镜像或 docker-compose 配置,无 Web UI 界面,部署难度中等。核心硬件需求为:
对于没有深度学习环境的用户,推荐先用 pip install screenai 体验基础功能,确认模型可用后再配置 GPU 环境。
AllGather 实现要求 world_size > 1,单机多卡场景需额外配置启动脚本。ScreenAI 代表了 AI 领域的一个细分方向——文档和 UI 的结构化理解。这类模型的上游应用包括:
尽管 Google 论文发布已逾两年,社区复现版本仍处于"骨架代码"阶段(缺权重、少调优),说明多模态 UI 理解模型的训练成本和技术门槛仍然较高。对于想实际使用的开发者,建议关注 Google 官方发布的完整预训练版本,而非此社区复现。