标题:《SeeClick: Harnessing GUI Grounding for Advanced Visual GUI Agents》
论文:https://arxiv.org/pdf/2401.10935.pdf
源码:https://github.com/njucckevin/SeeClick
导读
操作手机电脑等图形用户界面(GUI)是人类日常生活的重要部分。
今天,由南京大学和上海AI实验室便基于这个需求提出并构建了一个基于大规模视觉语言模型(LVLM)的视觉 GUI 智能体SeeClick
,像人类一样仅仅通过视觉观察屏幕执行点击、输入等操作。
背景
图形用户界面(GUI)Agent的目标是在电脑、手机等图形界面上根据指令一步步完成任务。近期许多工作尝试了基于LLM的GUI Agents,其中一个关键问题是:如何将模型的输出转化为图形界面中可执行的动作(action grounding)?
当前绝大多数方法需要获取图形界面的元数据(例如网页的html)以进行交互;然而,图形界面元数据有时难以获取(例如水果家的手机系统和桌面端应用),而且往往需要繁琐的处理。
说到这,我们先来看下 SeeClick 是怎么执行的:
可以看出,SeeClick 直接借助了视觉-语言大模型的能力并观察 Screenshot 来生成点击位置。
下面我们一起简单的看下它的实现原理。
方法
本文探索了一种全新的基于视觉的交互方式,像人类一样,仅仅通过观察手机或电脑屏幕直接生成下一步动作,例如点击指定位置、输入文本等。
构建此类智能体的一个核心挑战便是 GUI grounding
,即根据指令在屏幕上定位元素的能力。
为此,SeeClick 基于大规模视觉-语言模型(LVLM),通过在精心收集的 GUI grounding 数据上训练以增强其 GUI 定位能力,最终能够在 iOS、Android、电脑操作系统和网页等各种 GUI 上准确地根据指令定位操作元素。
那么,GUI Grounding 数据如何构建呢?
GUI Grounding Data
GUI grounding 是构建视觉 agent的核心挑战。尽管最新的LVLM在自然图像上有着不错的grounding能力,由于GUI截图和自然图像的显著差异,它们在GUI场景下的grounding能力并不理想(详情请见后续实验部分说明)。
文本探索如何更好地赋予LVLM GUI grounding的能力以构建视觉agent,为此,作者们收集并开源了一份包含web、mobile环境的GUI grounding预训练数据,欢迎大家在训练中使用以增强视觉-语言模型定位屏幕元素的能力。
对于Web数据,格式各样的网站有着不同的布局和设计风格,非常适合训练LVLM通用GUI能力。此外,我们从Common Crawl中收集了大约300k个网站,对于每个网站,我们从HTML中收集两类元素
- 可交互且包含text属性的元素。
- 可交互且包含title属性的元素,代表当鼠标悬停在该元素上时会显示一段描述文本。
通过这两种方式,我们收集了screenshot-指令-操作元素样本,且包含了各种各样的文本和图标,如下图所示。
对于Mobile数据,则整理了已有公开数据集以获得mobile上的grounding数据,主要包括Widget-Captioning数据集和自动化收集的RICO数据集。进一步丰富了GUI场景和元素类型。
GUI Grounding Benchmark
ScreenSpot
是本文的另一重大贡献,被设计用于评估视觉-语言模型根据指令定位屏幕元素的能力,这是首个涵盖iOS、Android、macOS、Windows和Web场景的GUI grounding benchmark。与Mind2Web[1]不同的是,ScreenSpot在不同场景下的分辨率不同。数据集包含超过600个Screenshot和超过1200条指令。
从上述结果可以明显的看出,经过设计的GUI Grounding预训练之后,SeeClick相比LVLM基线展现了优越的性能。
实验
除了上面SeeClick在GUI grounding能力上的提升,本文在三个广泛使用的GUI agent benchmarks:MiniWob[2]、AITW[3]和Mind2Web上测试了SeeClick的性能。
实验结果表明,提升GUI grounding能力是提升agent任务性能的关键因素(如下图所示):SeeClick相比基线Qwen-VL[4]取得了显著的性能提升,表明了本文提出的GUI pre-training策略的有效性和纯视觉方案在GUI任务自动化上的潜力。具体而言,在MiniWob上SeeClick只用了千分之三的数据量即超过了之前的视觉SOTA方案Pix2Act。
鉴于本文使用了Qwen-VL作为基座,我们还额外提供了GUI pre-training前后的性能对比。
上述是与更多strong baselines的对比,更多细节请参考原文。
应用
SeeClick 的应用相对也比较简单,大家在安装完环境之后,可以参考下述执行指令:
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers.generation import GenerationConfig
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen-VL-Chat", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("SeeClick-ckpt-dir", device_map="cuda", trust_remote_code=True, bf16=True).eval()
model.generation_config = GenerationConfig.from_pretrained("Qwen/Qwen-VL-Chat", trust_remote_code=True)
img_path = "assets/test_img.png"
prompt = "In this UI screenshot, what is the position of the element corresponding to the command \"{}\" (with point)?"
# prompt = "In this UI screenshot, what is the position of the element corresponding to the command \"{}\" (with bbox)?" # Use this prompt for generating bounding box
ref = "add an event" # response (0.17,0.06)
ref = "switch to Year" # response (0.59,0.06)
ref = "search for events" # response (0.82,0.06)
query = tokenizer.from_list_format([
{'image': img_path}, # Either a local path or an url
{'text': prompt.format(ref)},
])
response, history = model.chat(tokenizer, query=query, history=None)
print(response)
这里预测输出代表的是(x, y)坐标点或者(左, 上, 右, 下)的边界框,每个值都是[0, 1]范围内的小数,表示对应位置与图像宽度或高度的比例。我们推荐使用点预测,因为SeeClick主要是为了预测图形用户界面(GUI)上的点击点而训练的。
同时,本文也提供了如何微调 SeeClick 的方法,详情请参考仓库主页。
写在最后
SeeClick 将会在今年五月在维也纳召开的 LLMAgents @ ICLR 2024 Workshop 进行展示,欢迎大家前来围观~~~
如果你也对多模态相关技术感兴趣,欢迎扫描屏幕下方二维码添加微信好友,备注“多模态学习”即可。
[1] Mind2Web: Towards a Generalist Agent for the Web https://arxiv.org/abs/2306.06070
[2] World of Bits: An Open-Domain Platform for Web-Based Agents https://proceedings.mlr.press/v70/shi17a.html
[3] Android in the Wild: A Large-Scale Dataset for Android Device Control https://arxiv.org/abs/2307.10088
[4] Qwen-VL: https://github.com/QwenLM/Qwen-VL