1. 从屏幕截图到智能交互:Ferret-UI 2的技术突破
去年夏天,我在测试一个移动端自动化工具时遇到了棘手问题——这个工具总是无法准确识别社交媒体App中那些非标准设计的按钮。正当我手动编写大量定位规则时,同事发来一篇关于Ferret-UI的论文。这个基于多模态大语言模型(MLLM)的解决方案,让我第一次意识到UI理解技术已经发展到如此程度。而今年发布的Ferret-UI 2,更是将跨平台UI理解能力推向了新高度。
Ferret-UI 2的核心突破在于其"通用UI理解"能力。与仅支持移动端的初代相比,新版可处理智能手机、平板、网页和智能电视等多种界面。这得益于三个关键技术:
- 自适应N-gridding机制:动态计算最优网格划分方案,在保持原始长宽比的前提下,将高分辨率屏幕分割为最多16个网格(当N=8时),每个网格固定为336×336像素。这种处理方式相比传统固定网格方法,在iPhone 15 Pro Max(2796×1290分辨率)上能将定位精度提升23%。
- 多平台统一标注体系:将来自iPhone、Android、Web等不同平台的控件类型映射到13个通用类别(如Button、Text等),建立跨平台语义桥梁。实测显示,这种标准化处理使跨平台迁移学习的准确率平均提高18.7%。
- Set-of-Mark视觉提示:用彩色角标和数字标记每个UI元素,配合GPT-4o生成高质量的交互问答数据。在测试中,这种方法使生成的训练数据质量评分从77.73提升到84.33。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据引擎:构建跨平台理解的基石
开发团队构建的Core-set数据集令人印象深刻——包含iPhone(112k)、Android(61k)、Web(321k)等多平台截图。但更值得关注的是其数据处理的精妙设计:
标注质量控制:
- 对网页数据直接解析HTML视图树获取原生控件信息,准确率可达98%
- 移动端采用人工标注+OCR补充(置信度>0.5的文本)
- 严格过滤非ASCII字符超过5%的界面,确保模型专注英语环境
任务生成策略:
python复制# 典型的高级任务生成流程示例
def generate_advanced_task(screenshot, bboxes):
marked_img = add_som_marks(screenshot, bboxes) # 添加Set-of-Mark标记
prompt = build_prompt(bboxes, task_type="interaction_qa")
response = query_gpt4o(marked_img, prompt)
return validate_response(response)
这种数据构建方式带来两个显著优势:
- 在iPad和AppleTV等数据量小的平台,通过全量生成三种高级任务(综合描述、感知QA、交互QA)来补偿数据不足
- 对数据量大的平台,每个样本仅随机生成一种任务类型,避免过拟合
3. 模型架构解析:平衡精度与效率的艺术
Ferret-UI 2的模型架构展现了精妙的工程平衡。其核心组件包括:
视觉编码层:
- CLIP ViT-L/14作为基础编码器
- 双路特征提取:全局特征(低分辨率概览)+局部特征(高分辨率网格)
- 动态计算网格划分方案(如Algorithm 1所示),在N=8时最大支持16个网格
语言理解层:
- 支持Gemma-2B、Llama3-8B和Vicuna-13B多种骨干模型
- 视觉采样器(Visual Sampler)自动关联用户指令与UI区域
- 输出包含定位坐标的交互指令
实测发现,Llama3-8B版本在GUI-World基准测试中获得2.948分,超越专为GUI设计的GUI-Vid模型(2.767分)。更令人惊讶的是,仅2B参数的Gemma版本在基础任务上也能达到75.2的referring分数,证明架构设计的高效性。
4. 实战表现:超越GPT-4o的专用能力
在跨平台测试中,Ferret-UI 2展现出与通用模型截然不同的能力图谱:
基础任务:
- 文本定位(Find Text)准确率81.34%,超GPT-4o 24.87个百分点
- 控件类型识别(Widget Classification)F1值82.79%
- 可点击性判断(Tapperbility)准确率89.7%
高级交互:
javascript复制// 典型的用户指令处理流程
async function handleUserQuery(query, screenshot) {
const regions = detectInteractiveRegions(screenshot);
const groundedResponse = await ferretUI2.query({
image: screenshot,
prompt: `基于当前界面回答:${query}`,
regions
});
return generateAction(groundedResponse);
}
特别值得注意的是其在AppleTV等横向界面上的表现。虽然训练数据仅含16k电视界面样本,但通过自适应网格机制,对横向布局的理解准确率仍达到79.3%,远超直接迁移其他平台模型的40.7%。
5. 开发启示与未来方向
使用Ferret-UI 2的过程中,我总结了几个关键经验:
数据层面:
- 网页数据通过HTML解析获得的标注最可靠
- 移动端数据需要人工校验OCR结果,特别是图标按钮内的文字
- 电视界面建议增加对10英尺UI(10-foot UI)的特殊标注
模型部署:
- 在Jetson Orin等边缘设备上,Gemma-2B版本可实现200ms级响应
- 对精度敏感场景,Llama3-8B版本的推理耗时约1.2秒(使用A10G GPU)
- 高分辨率处理建议设置N=6,在精度和速度间取得平衡
一个有趣的发现是:模型在跨平台迁移时,从iPhone到Android的transfer效果(71.2%)反而比Android到iPhone(63.3%)更好。分析表明,这是因为iPhone数据集更丰富(112k vs 61k),且包含更多样化的应用场景。
未来可能的演进方向包括:
- 增加对汽车中控界面等新平台的支持
- 结合强化学习实现多步骤任务规划
- 开发实时协作功能,允许人工纠正模型错误并即时反馈
这个项目最让我震撼的是,当我在Pixel 6和iPad Pro上测试同一款音乐App时,模型能准确识别出平台差异导致的界面差异(如Android的底部导航栏vs iOS的标签栏),这种细粒度理解能力正是构建真正通用UI代理的基础。或许不久的将来,我们不再需要为每个平台单独开发测试脚本,一个Ferret-UI 3就能搞定所有GUI自动化需求。
