【多模态】Magma多模态AI Agent

1. 前言

        微软杨建伟团队,最近在AI Agent方面动作连连,前两天开源了OmniParser V2,2月26日又开源了Magma,OmniParser专注在对GUI的识别解析,而Magma则是基于多模态技术,能够同时应对GUI和物理世界的交互,两者有一定的差异。后续也会带来OmniParser的实战分享,目前还在实测中。

        话不多说,先看下Magma能做什么?                主要是两类任务:

  • 多模态理解(Multimodal Understanding):能够理解来自不同领域(包括数字世界和物理世界)的多模态输入,不仅在语义层面,还具备空间和时间上的理解能力。
  • 多模态动作预测(Multimodal Action Prediction):能够将长时序任务分解为精准的动作序列,使 AI  Agent系统能够有效执行。

2. Magma是什么

        Magma 是一个多模态 AI  Agent的基础模型。具备感知多模态世界的能力,并能够执行目标驱动的行动。也就是说,Magma主要是实现以下目标:

  • 语言和时空智能:具备语言理解能力和时空智能,以理解图像和视频,将自身行动建立在观察的基础上,并进一步将外部目标转化为行动计划和执行方案。
  • 数字与物理世界:不局限于数字世界(如网页导航)或物理世界(如机器人操作),能够跨越这两个世界,就像人类一样自由切换和适应。

        基于上述理念,Magma构建了一个新的预训练数据集,其中主要包含来自真实世界的无标签视频,以及现有的带注释的智能体数据。同时,设计一种新的预训练框架,统一训练三种模态(文本、图像和动作),以训练一个全新的多模态 AI  Agent基础模型——Magma。

        可以看到,Magma是直接训练一个通用的基础模型,使其能够以零样本(zero-shot)方式适应不同的下游任务。但是简单地组合这些数据集并不能直接提升模型能力,因为多模态理解主要依赖文本(例如图像和视频的文本描述),而执行动作任务主要依赖空间信息(如 UI 的 2D 坐标或机器人手臂的 7-DoF 运动)。为了解决该问题,需要具备两种任务的能力:

  • 动作对齐(Action Grounding):模型需在给定视觉-空间观察的情况下预测下一步可能的可执行动作。
  • 动作规划(Action Planning):基于视觉观察生成合理的未来动作序列。

3. 怎么预训练Magma

        训练Magma,需要大规模异构训练数据,包括现有的多模态理解数据、UI 导航数据、机器人操作数据,以及无标签的真实世界视频。此外,也提出了一种新的数据采集流程,以可扩展且低成本的方式收集无标签视频。为了从原始视频和机器人轨迹中提取有用的动作监督信号,需要精确去除视频中的摄像机运动,然后将物体的运动转换为“动作”监督信号,用于模型训练。这些数据为模型提供独特的学习信号,帮助它理解跨模态关联,并提升其长时序动作预测与规划能力。

        此外,由于文本和动作在本质上存在巨大差异(文本是离散的,而视觉 token 是连续的),这导致了跨模态学习的鸿沟。为了解决这一问题,提出一种通用预训练框架,统一训练文本、图像和动作三种模态。更具体地说,提出了Set-of-Mark(SoM)和 Trace-of-Mark(ToM)作为辅助任务,使不同输出模态之间建立桥梁。不仅增强文本与动作模态之间的对齐,还促进了图像与动作模态的结合,从而实现更好的多模态协同理解和决策能力。

4. 安装Magma以及测试

clone项目到本地:

git clone https://github.com/microsoft/Magma

cd Magma

创建并激活conda环境

conda create -n magma python=3.10 -y

conda activate magma

升级 pip 并安装基础依赖

pip install --upgrade pip

pip install -e .

安装训练所需的依赖

pip install -e ".[train]"

安装agent相关的依赖

pip install -e ".[agent]"

使用 Huggingface Transformers 进行推理

加载模型和处理器:

from PIL import Image
import torch
from transformers import AutoModelForCausalLM
from transformers import AutoProcessor dtype = torch.bfloat16
model = AutoModelForCausalLM.from_pretrained("microsoft/Magma-8B", trust_remote_code=True, torch_dtype=dtype)
processor = AutoProcessor.from_pretrained("microsoft/Magma-8B", trust_remote_code=True)
model.to("cuda")# Inference
image = Image.open("./assets/images/magma_logo.jpg").convert("RGB")convs = [{"role": "system", "content": "You are agent that can see, talk and act."},            {"role": "user", "content": "<image_start><image><image_end>\nWhat is the letter on the robot?"},
]
prompt = processor.tokenizer.apply_chat_template(convs, tokenize=False, add_generation_prompt=True)
inputs = processor(images=[image], texts=prompt, return_tensors="pt")
inputs['pixel_values'] = inputs['pixel_values'].unsqueeze(0)
inputs['image_sizes'] = inputs['image_sizes'].unsqueeze(0)
inputs = inputs.to("cuda").to(dtype)generation_args = { "max_new_tokens": 500, "temperature": 0.0, "do_sample": False, "use_cache": True,"num_beams": 1,
} with torch.inference_mode():generate_ids = model.generate(**inputs, **generation_args)generate_ids = generate_ids[:, inputs["input_ids"].shape[-1] :]
response = processor.decode(generate_ids[0], skip_special_tokens=True).strip()print(response)

5. UI Agent

        构建 UI Agent。由于模型经过 Set-of-Mark 和 Trace-of-Mark 预训练,因此它与 OmniParser 具有天然的协同作用。关于OmniParser,可以参考《OmniParserV2+DeepSeek:基于纯视觉的 GUI Agent解决方案》。将它们结合在一起后,可以获得一个 UI Agent,并运行以下命令:

python agents/ui_agent/app.py

        Magma 模型不仅具备 动作落地(action-grounding) 能力,还具备多模态理解和推理能力。因此,可以用文本让模型预测点击位置,例如:

        指令:跳转到排名最高的帖子        

        还可以自由提问,只需在文本提示的开头添加前缀 "Q:",例如:

        Q: 帖子标题是什么?

6. 参考材料

【1】GitHub - microsoft/Magma: [CVPR 2025] Magma: A Foundation Model for Multimodal AI Agents

【2】Magma: A Foundation Model for Multimodal AI Agents

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/71050.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux系统Pycharm界面卡死无法显示其他界面

1、使用如下代码查看Pycharm的进程 ps aux | grep pycharm2、使用kill关闭所有pycharm进程 kill -9 <替换为你进程的PID>不确定可以执行如下代码&#xff0c;直接全部关闭&#xff1a; pkill -9 -f pycharm3、如果界面还是存在并且仍然卡死 如果 pycharm 界面仍然显…

QT异步编程之线程池QThreadPool

一、概述 在一个应用程序中&#xff0c;我们需要多次使用线程&#xff0c;也就意味着&#xff0c;我们需要多次创建并销毁线程。而创建线程并销毁线程的过程势必会消耗内存。QThreadPool是Qt框架中用于管理线程池的类。它提供了一种高效的方式来管理和重用线程&#xff0c;从而…

Python爬虫:WebAssembly案例分析与爬取实战

文章目录 一、WebAssembly简介1.1 什么是WebAssembly?1.2 WebAssembly的优势1.3 WebAssembly 的使用场景1.4 WebAssembly 对爬虫的挑战二、WebAssembly案例分析2.1 案例一:在线游戏2.2 案例二:图像处理应用三、Python爬虫实战:处理WebAssembly模块3.1 案例一3.2 案例二四、…

vue3配置端口,比底部vue调试

import { fileURLToPath, URL } from ‘node:url’ import { defineConfig } from ‘vite’ import vue from ‘vitejs/plugin-vue’ import vueJsx from ‘vitejs/plugin-vue-jsx’ // 关闭vue底部调试模式 // import vueDevTools from ‘vite-plugin-vue-devtools’ // htt…

算法仿真平台搭建1-FFMPEG+RtspSever快速搭建一个RTSP服务器

一、前言 本文相关的全部源码和RtspSever库&#xff0c;我已打包上传&#xff0c;欢迎大家免费下载&#xff0c;testRTSPSever。 每一个嵌入式视觉算法工程师&#xff0c;都应该有一套属于自己的算法仿真和测试环境。可以方便地进行视频、图像等素材进行在线导入&#xff0c;可…

大模型WebUI:Gradio全解12——LangChain原理、架构和组件(2)

大模型WebUI:Gradio全解12——LangChain原理、架构和组件(2) 前言12. LangChain原理及agents构建Gradio UI12.2 学习资料12.2.1 学习文档12.2.2 用途示例12.2.3 OpenAI和DeepSeek例程1. OpenAI示例2. DeepSeek例程参考文献前言 本系列文章主要介绍WEB界面工具Gradio。Gradi…

盛京开源社区加入 GitCode,书写东北开源生态新篇章

在数字化转型与开源技术蓬勃发展的浪潮下&#xff0c;开源社区已成为推动技术创新的核心力量。盛京开源社区&#xff08;SJOSC&#xff09;作为沈阳地区的开源交流平台&#xff0c;始终致力于连接开发者、企业及高校&#xff0c;构建区域技术生态圈。 现在&#xff0c;盛京开源…

安装Git(小白也会装)

一、官网下载&#xff1a;Git 1.依次点击&#xff08;红框&#xff09; 不要安装在C盘了&#xff0c;要炸了&#xff01;&#xff01;&#xff01; 后面都 使用默认就好了&#xff0c;不用改&#xff0c;直接Next&#xff01; 直到这里&#xff0c;选第一个 这两种选项的区别如…

Vue.js计算属性

计算属性​ 基础示例​ 模板中的表达式虽然方便,但也只能用来做简单的操作。如果在模板中写太多逻辑,会让模板变得臃肿,难以维护。比如说,我们有这样一个包含嵌套数组的对象: js const author = reactive({name: John Doe,books: [Vue 2 - Advanced Guide,Vue 3 - Bas…

代码审计入门学习

简介 HadSky轻论坛程序为个人原创PHP系统&#xff0c;作者为蒲乐天&#xff0c;后端基于puyuetianPHP框架驱动&#xff0c;前端基于 puyuetianUI框架驱动&#xff0c;默认编辑器为puyuetianEditor富文本编辑器&#xff0c;其他非原创框架及驱动JQuery.js 及Font-Awesome字体库…

测试金蝶云的OpenAPI

如何使用Postman测试K3Cloud的OpenAPI 1. 引言 在本篇博客中&#xff0c;我将带你逐步了解如何使用Postman测试和使用K3Cloud的OpenAPI。内容包括下载所需的SDK文件、配置文件、API调用及测试等步骤。让我们开始吧&#xff01; 2. 下载所需的SDK文件 2.1 获取SDK 首先&…

【愚公系列】《Python网络爬虫从入门到精通》034-DataFrame简单数据计算整理

标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度…

服务端驱动UI架构解析:React Server Components与流式渲染的革命

引言&#xff1a;重新定义前后端边界 Shopify采用React Server Components后&#xff0c;动态模块加载速度提升340%&#xff0c;客户端Bundle减少62%。Discord重构消息流服务&#xff0c;通过流式渲染使首屏TTI从4.2s降至1.1s。Vercel生产数据显示&#xff0c;混合渲染技术让L…

顶顶通呼叫中心中间件(mod_cti基于FreeSWITCH)-大模型电话机器人

语音流直接对接Realtime API 多模态大模型 直接把音频流输出给大模型&#xff0c;大模型返回音频流。 顶顶通CTI对Realtime API 的支持 提供了以下2个APP可对接任意 •cti_audio_stream 通过TCP推流和播放流&#xff0c;适合用于人机对话场景。 •cti_unicast_start 通过旁…

绕过 RAG 实时检索瓶颈,缓存增强生成(CAG)如何助力性能突破?

编者按&#xff1a; 你是否曾经遇到过这样的困扰&#xff1a;在开发基于 RAG 的应用时&#xff0c;实时检索的延迟让用户体验大打折扣&#xff1f;或者在处理复杂查询时&#xff0c;检索结果的不准确导致回答质量不尽如人意&#xff1f; 在当前大语言模型应用大规模落地的背景下…

后端返回文件流,前端导出excel文件

1、当后端接口返回文件流时&#xff0c;需前端导出excel文件&#xff0c;在请求中添加 responseType: blob限制条件&#xff0c;根据返回的文件流导出 封装的方法&#xff1a; /** * 公共的导出excel方法 * param {*} content 后端接口返回的二进制文件 * param {*} name 导出…

基于django图书信息管理系统的搭建(增删改查)

✍django项目搭建教程 ☞ ----------------- 教程 本文主要讲解django如何连接数据库MySQL并且可视化展示&#xff0c;实现增删改查功能 目录 一. 创建django应用 二. 数据库配置 三. 查看数据库 四. 编写代码 4.1视图函数 4.2 配置URL 4.3创建模板文件 4.…

鸿蒙NEXT开发-元服务和服务卡片的开发

注意&#xff1a;博主有个鸿蒙专栏&#xff0c;里面从上到下有关于鸿蒙next的教学文档&#xff0c;大家感兴趣可以学习下 如果大家觉得博主文章写的好的话&#xff0c;可以点下关注&#xff0c;博主会一直更新鸿蒙next相关知识 目录 1. 元服务基本概念 1.1 基本介绍 1.2 元…

HBuilder X中,uni-app、js的延时操作及定时器

完整源码下载 https://download.csdn.net/download/luckyext/90430165 在HBuilder X中&#xff0c;uni-app、js的延时操作及定时器可以用setTimeout和setInterval这两个函数来实现。 1.setTimeout函数用于在指定的毫秒数后执行一次函数。 例如&#xff0c; 2秒后弹出一个提…

IP属地是通过卫星定位的吗?如何保护用户隐私

在数字时代&#xff0c;网络空间成为了人们日常生活不可或缺的一部分。随着社交媒体、在线服务等平台的兴起&#xff0c;用户IP属地信息的重要性日益凸显。然而&#xff0c;关于IP属地是如何确定的&#xff0c;尤其是是否通过卫星定位这一问题&#xff0c;却常常引发公众的疑问…