告别“一句话”时代:把 GUI 指令变成会思考的“多面手”——UI-Ins 实战全记录

核心问题:为什么同一张界面截图,换一句人话描述,模型就能暴涨 76% 准确率?本文用一次完整实验复盘,带你亲手做出“会自己挑角度”的 GUI 视觉定位模型 UI-Ins。


1 背景:GUI 视觉定位的隐形天花板

1.1 一句话总结

指令不是“传声筒”,而是“思考路径”。只要让模型像人一样在不同视角间切换,零样本也能涨点 76%。

1.2 行业痛点

  • 数据:开源数据集 23.3% 指令有 flaw,训练即“喂毒”
  • 方法:主流 SFT 把指令当静态字符串,视角单一、鲁棒性差
  • 评测:静态离线 benchmark 高分≠在线 Agent 不掉链子

1.3 解决思路

把“指令”升级为“Instruction-as-Reasoning”——

  1. 先让模型见多识广:同一张截图,四种视角(外观/功能/位置/意图)各写一句话
  2. 再让模型学会“挑视角”:用 RL 自动选最适合当前场景的那一条推理路径

2 数据:把 23.3% 噪音降到 8% 的清洗流水线

2.1 核心问题

如何低成本、可复现地得到“一条指令只对应一个像素框”的高质量数据集?

2.2 三步流水线

步骤 工具 目的 原文错误率
① 预检测 OmniParser V2 先检出所有可交互元素,拿到候选框
② IoU 过滤 自写脚本 清洗与原标注框 IoU<0.5 的脏样本 23.3%→8%
③ 多视角重写 GPT-4.1 + 人工规则 生成外观/功能/位置/意图 4 类指令,再反向验证唯一性 8%→<8%

2.3 场景示例

假设原指令:“点这里”(含糊不清)
流水线输出:

  • 外观:点击紫色圆形“+”图标
  • 功能:点击“新建任务”按钮
  • 位置:点击屏幕右下角第一个按钮
  • 意图:我想新增任务,请帮我找到入口

反思:数据清洗不是“洁癖”,而是把 1/4 的“毒样本”拦在训练门外,这一步省不得。


3 方法:两阶段训练,让模型“先见世面、后学选择”

3.1 核心问题

怎么既让模型会“多条思路”,又能自动挑“最优思路”?

3.2 阶段一:SFT——“见世面”

  • 样本构造:随机抽 2 个视角,一个当“用户指令”,一个当“内部推理”
  • 训练目标:联合最大化“推理文本 + 坐标点”似然
  • 输出格式:
<think>
从功能视角:这是“关闭窗口”按钮
</think>
<tool_call>
{"name":"grounding","arguments":{"action":"click","coordinate":[123,45]}}
</tool_call>

3.3 阶段二:GRPO RL——“学选择”

  • 动作空间:模型可自由生成任意内容(不限制四种视角)
  • 奖励:简单 point-in-box 0/1,归一化优势
  • 关键:用 Group Relative Policy Optimization,8 条 rollout 对比,自动推高“命中”路径的概率

3.4 场景示例

同一条高级指令:“升级工作区”

  • SFT 阶段:模型见过“升级=紫色按钮”等 20 种改写,知道不止一种描述
  • RL 阶段:发现“紫色按钮”在暗色主题下最难区分→自动学会优先用“功能+位置”组合描述,准确率再涨 9.9%

反思:自由式思维链(Free-Form Reasoning)在 GUI 定位常掉点,而“有菜单的思维”——提前规定视角再自由组合——反而稳。


4 实验:离线 benchmark 全 SOTA,在线 Agent 也抗打

4.1 核心问题

新范式到底涨在哪?是否只是“刷榜”?

4.2 离线结果

Benchmark 指标 UI-Ins-7B UI-Ins-32B 原 SOTA
UI-I2E-Bench Acc 81.1 87.3 83.5
ScreenSpot-Pro Acc 52.2 57.0 53.6
MMBench-GUI L2 Acc 83.1 84.9 83.4

在“隐式指令”子集上,UI-Ins-32B 比次优模型高 6.6%,证明“推理视角”对复杂语义最有效。

4.3 在线结果

AndroidWorld 实时 Agent 任务(GPT-5 做高层规划,UI-Ins-7B 做像素级执行)

  • 成功率:74.1%
  • 超过 Gemini 2.5 Computer Use (69.7%) 与 UI-TARS-2 (73.3%)

场景举例:
任务——“把 7 AM 日历空闲时段标为健身”
GPT-5 输出“点击 7 AM 空白格子”,UI-Ins-7B 在动态滚动页面准确定位到坐标(319, 612),完成。


5 消融:每一步都不能省

消融项 MMBench-GUI L2 得分 结论
去掉多视角数据 63.4→72.4 数据质量是下限
去掉 RL 阶段 83.1→76.3 不会“挑视角”立刻掉点
去掉推理 83.1→79.1 中间推理是“导航仪”,省不得

6 错误案例:三类坑还在

  1. 领域知识缺失
    指令:“找积木玩具公司”→模型点 Jazwares,真值是 MEGA
    反思:纯视觉模型不懂品牌知识,未来需与知识图谱联动

  2. 布局理解短板
    把“状态栏按钮”点成“单元格”——边界框对了,可点区域却错
    反思:需要像素级分割而不仅是中心点

  3. 视觉幻觉
    两个同色图标并排,模型选错;需更高分辨率+局部放大策略


7 落地指南:30 分钟跑通 UI-Ins-7B 推理

7.1 环境

pip install torch transformers pillow

7.2 最小可运行代码

import torch, re, requests
from PIL import Image
from transformers import AutoProcessor, Qwen2_5_VLForConditionalGeneration

model = Qwen2_5_VLForConditionalGeneration.from_pretrained(
        "Tongyi-MiA/UI-Ins-7B",
        torch_dtype=torch.bfloat16,
        device_map="auto").eval()
processor = AutoProcessor.from_pretrained("Tongyi-MiA/UI-Ins-7B")

image = Image.open("demo.jpg").convert("RGB")
instruction = "Click the search icon"

messages = [{"role": "system",
             "content": [{"type": "text",
                          "text": "You are a GUI agent. You need to think step-by-step and output coordinate."}]},
            {"role": "user",
             "content": [{"type": "image"}, {"type": "text", "text": instruction}]}]

prompt = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = processor(text=[prompt], images=[image], return_tensors="pt").to(model.device)

with torch.no_grad():
    out = model.generate(**inputs, max_new_tokens=128)
pred = processor.decode(out[0, len(inputs["input_ids"][0]):], skip_special_tokens=True)

coords = re.findall(r"\[(\d+),\s*(\d+)\]", pred)
if coords:
    x, y = map(int, coords[0])
    print(f"Predicted click: ({x}, {y})")

7.3 常见坑

  • 输入截图需保持原始分辨率,UI-Ins 内部会自适应 1024×768
  • 一定加 <think> 标签提示,否则模型可能直接吐坐标,掉点约 4%

8 实用摘要 / 一页速览

要做什么 一句话口诀
数据 先洗后扩,四视角重写,一条指令一个框
训练 SFT 先给“菜单”,RL 再学“点菜”
推理 强制 <think>→选视角→出坐标
评测 离线看“隐式指令”子集,在线跑 AndroidWorld
避坑 知识缺口、布局细节、视觉幻觉三类错最多

9 FAQ

  1. Q:没有 A100,能在 24G 显卡上训练吗?
    A:7B 模型 SFT 阶段 fp16 + Deepspeed ZeRO-2 约 22G;RL 阶段 8 条 rollout 需 28G,可改 4 条 rollout 或开 CPU offload。

  2. Q:四视角模板写不满怎么办?
    A:允许 GPT-4.1 同视角多 paraphrase;最终只保留“唯一对应框”的句子即可。

  3. Q:必须四视角吗,两视角行不行?
    A:实验降到两视角平均掉 2.3%,仍能打,但四视角是性价比拐点。

  4. Q:在线 Agent 时延如何?
    A:UI-Ins-7B 单帧推理 180ms(A100),GPT-5 规划 1.2s,整体任务耗时与人工操作相当。

  5. Q:商业化授权?
    A:代码与权重均 CC-BY-NC-SA 4.0,商业需联系阿里通义实验室另议。

  6. Q:能直接输出 bounding box 而不是点吗?
    A:目前训练目标为中心点,输出框需改损失函数为 IoU,代码已留接口。


作者反思:做 UI-Ins 最大感受——“指令”不是模型耳边风,而是方向盘。只要肯把指令当推理路径而不是静态字符串,哪怕不堆参数,也能让 7B 小模型跑赢 32B 大块头。下一程,把知识图谱和分割能力并进来,让模型不仅“看得见”,还要“看得懂”。