❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发非常感兴趣,我会每日分享大模型与 AI 领域的最新开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术,欢迎关注我哦!
🥦 微信公众号|搜一搜:蚝油菜花 🥦
🚀 快速阅读
- 功能:Aria-UI 支持 GUI 元素定位、多模态输入处理、高分辨率图像处理等功能。
- 技术:基于纯视觉方法和多模态 MoE 模型,Aria-UI 能够处理多样化指令和动态上下文。
- 应用:适用于自动化测试、用户交互辅助、智能客服等多个场景。
正文(附运行示例)
Aria-UI 是什么
Aria-UI 是香港大学与 Rhymes AI 联合推出的多模态模型,专为图形用户界面(GUI)定位任务设计。它采用纯视觉方法,不依赖于 HTML 或 AXTree 等辅助输入,通过大规模、多样化的数据合成流程,生成高质量的元素描述和指令样本,适应不同环境下的多样化指令。
Aria-UI 创新性地整合了动态动作历史信息,使用文本或文本-图像交错格式增强模型在多步任务场景中的定位能力。在包括离线和在线代理任务的广泛基准测试中,Aria-UI 均取得优异的性能,展现出强大的零样本泛化能力和跨平台适用性,成为通用 GUI 定位任务的有力解决方案。
Aria-UI 的主要功能
- GUI 元素定位:将语言指令准确地映射到 GUI 中的目标元素,实现元素的精确定位,为后续的交互操作提供基础。
- 多模态输入处理:处理包括 GUI 图像、文本指令、动作历史等多种模态的输入信息,充分理解和利用多模态数据中的丰富信息。
- 多样化指令适应:基于大规模、多样化的数据合成流程生成的多样化指令样本,有效适应不同环境下的各种指令表达方式。
- 动态上下文理解:整合动态动作历史信息,用文本或文本-图像交错格式,在多步任务场景中理解当前的动态上下文,为准确的元素定位提供重要参考。
- 高分辨率图像处理:支持高达 3920×2940 的图像分辨率,将图像分割成小块处理,显著扩展可处理的图像尺寸范围。
Aria-UI 的技术原理
- 纯视觉方法:采用纯视觉方法,直接从 GUI 图像中提取视觉特征,用视觉信息理解和定位目标元素。
- 多模态 MoE 模型:基于 Aria 多模态 MoE(Mixture of Experts)模型构建,具有 3.9B 激活参数,擅长处理多模态数据。
- 数据合成与训练:基于两阶段的数据合成流程,从 Common Crawl 和公开数据中生成高质量的元素描述和多样化指令样本,覆盖 Web、桌面和移动三大 GUI 环境,为模型训练提供大量、多样化的训练数据,增强模型对不同指令和元素的识别能力。
- 上下文感知数据扩展:用公开的代理轨迹数据模拟具有上下文的定位任务,构建文本动作历史和文本-图像交错历史两种上下文设置,基于数据合成流程为轨迹数据中的所有定位步骤生成详细的逐步指令,让模型在动态环境中更好地理解和执行任务。
- 超分辨率支持:将图像分割成小块并进行处理,支持高达 3920×2940 的图像分辨率,保持图像的细节和准确性。
如何运行 Aria-UI
1. 安装依赖
首先,安装所需的依赖包:
pip install transformers==4.45.0 accelerate==0.34.1 sentencepiece==0.2.0 torchvision requests torch Pillow
pip install flash-attn --no-build-isolation
# 为了更好的推理性能,可以安装 grouped-gemm,安装可能需要 3-5 分钟
pip install grouped_gemm==0.1.6
2. 使用 vllm 进行推理(推荐)
确保安装了最新版本的 vLLM,以便支持 Aria-UI:
pip install https://vllm-wheels.s3.us-west-2.amazonaws.com/nightly/vllm-1.0.0.dev-cp38-abi3-manylinux1_x86_64.whl
以下是一个使用 Aria-UI 和 vllm 的代码示例:
from PIL import Image, ImageDraw
from transformers import AutoTokenizer
from vllm import LLM, SamplingParams
import ast
model_path = "Aria-UI/Aria-UI-base"
def main():
llm = LLM(
model=model_path,
tokenizer_mode="slow",
dtype="bfloat16",
trust_remote_code=True,
)
tokenizer = AutoTokenizer.from_pretrained(
model_path, trust_remote_code=True, use_fast=False
)
instruction = "Try Aria."
messages = [
{
"role": "user",
"content": [
{
"type": "image"},
{
"type": "text",
"text": "Given a GUI image, what are the relative (0-1000) pixel point coordinates for the element corresponding to the following instruction or description: " + instruction,
}
],
}
]
message = tokenizer.apply_chat_template(messages, add_generation_prompt=True)
outputs = llm.generate(
{
"prompt_token_ids": message,
"multi_modal_data": {
"image": [
Image.open("examples/aria.png"),
],
"max_image_size": 980, # [Optional] The max image patch size, default `980`
"split_image": True, # [Optional] whether to split the images, default `True`
},
},
sampling_params=SamplingParams(max_tokens=50, top_k=1, stop=["<|im_end|>"]),
)
for o in outputs:
generated_tokens = o.outputs[0].token_ids
response = tokenizer.decode(generated_tokens, skip_special_tokens=True)
print(response)
coords = ast.literal_eval(response.replace("<|im_end|>", "").replace("```", "").replace(" ", "").strip())
return coords
if __name__ == "__main__":
main()
资源
- GitHub 仓库:https://github.com/AriaUI/Aria-UI
- HuggingFace 仓库:https://huggingface.co/Aria-UI
- arXiv 技术论文:https://arxiv.org/pdf/2412.16256
❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发非常感兴趣,我会每日分享大模型与 AI 领域的最新开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术,欢迎关注我哦!
🥦 微信公众号|搜一搜:蚝油菜花 🥦