【多模态】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.rhkb.cn/news/25757.html

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

相关文章

spring Boot入门

目录 Spring Boot 概述 新建Spring Boot项目 方式一&#xff1a;使用Spring Initializr创建SpringBoot项目 方式二&#xff1a;使用Maven方式构建Spring Boot项目 Spring Boot 概述 简介 •Spring Boot是基于Spring框架开发的全新框架&#xff0c;其设计目的是简化Java…

手机隐私数据彻底删除工具:回收或弃用手机前防数据恢复

软件介绍 有这样一款由吾爱网友chenwangjun 原创开发的数据处理软件&#xff0c;名为 AndroidDiskClear。它的核心功能十分强大&#xff0c;能够将你手机里已经删除的各类文件&#xff0c;像图片、普通文件、文字信息等彻底清除干净&#xff0c;有效杜绝数据恢复类软件的二次恢…

docker使用代理的简单配置

1准备代理服务器 准备代理服务器&#xff0c;例如192.168.120.168:52209 配置docker.service文件 查看service文件的位置 systemctl status docker 编辑service文件 vim /usr/lib/systemd/system/docker.service 添加代理配置 ... [Service] Environment"HTTP_PROXY…

Coze与Dify:企业级大模型应用开发认知陷阱与破局之道

前言 当前大模型应用开发似乎陷入了一种“范式陷阱”&#xff1a;当人们谈论AI Agent或智能体时&#xff0c;脑海里浮现的往往是Coze、Dify这类以对话交互为核心的低代码平台。这些工具确实降低了体验大模型的门槛&#xff0c;但也让行业陷入一种危险的认知偏差——将大模型等…

GitHub 语析 - 基于大模型的知识库与知识图谱问答平台

语析 - 基于大模型的知识库与知识图谱问答平台 GitHub 地址&#xff1a;https://github.com/xerrors/Yuxi-Know &#x1f4dd; 项目概述 语析是一个强大的问答平台&#xff0c;结合了大模型 RAG 知识库与知识图谱技术&#xff0c;基于 Llamaindex VueJS FastAPI Neo4j 构…

由浅入深系列——Distinctive Image Featuresfrom Scale-Invariant Keypoints(SIFT)

第一章&#xff1a;为什么我们需要"图像指纹"&#xff1f;——SIFT的诞生 想象一下&#xff0c;你带着一张埃菲尔铁塔的明信片来到巴黎。站在铁塔脚下&#xff0c;你举起明信片想拍张对比照——但无论怎么调整角度&#xff0c;手机APP就是识别不出两张图片的对应关系…

spring注解开发(Spring整合MyBatis——Mapper代理开发模式、(Spring、MyBatis、Jdbc)配置类)(6)

目录 一、纯MyBatis独立开发程序。 &#xff08;1&#xff09;数据库与数据表。 &#xff08;2&#xff09;实体类。 &#xff08;3&#xff09;dao层接口。&#xff08;Mapper代理模式、无SQL映射文件——注解配置映射关系&#xff09; &#xff08;4&#xff09;MyBatis核心配…

Redis缓存一致性难题:如何让数据库和缓存不“打架”?

标题&#xff1a;Redis缓存一致性难题&#xff1a;如何让数据库和缓存不“打架”&#xff1f;&#xff08;附程序员脱发指南&#xff09; 导言&#xff1a;当数据库和缓存成了“异地恋” 想象一下&#xff1a;你刚在美团下单了一份麻辣小龙虾&#xff0c;付款后刷新页面&#…

eMMC安全简介

1. 引言 术语“信息安全”涵盖多种不同的设计特性。一般而言&#xff0c; 信息安全是指通过实践防止信息遭受未经授权的访问、使用、披露、中断、篡改、检查、记录或销毁。 信息安全的三大核心目标为 机密性&#xff08;Confidentiality&#xff09;、完整性&#xff08;Integr…

如何用python画一棵分形树

这个代码会生成一个彩色的分形树图案&#xff0c;可以通过调整draw_tree函数中的参数来改变树的形状和大小 import turtle import random# 递归函数绘制分形树 def draw_tree(branch_len, t):if branch_len > 5:t.color(random.choice(colors))t.pensize(branch_len / 10)t…

linux中安装部署Jenkins,成功构建springboot项目详细教程

参考别人配置Jenkins的git地址为https&#xff0c;无法连上github拉取项目&#xff0c;所以本章节介绍通过配置SSH地址来连github拉取项目 目录&#xff1a; 1、springboot项目 1.1 创建名为springcloudproject的springboot项目工程 1.2 已将工程上传到github中&#xff0c;g…

sqli-lab

没了解sql注入的知识&#xff0c;本篇更像是复现 数据库层面 │ ├── 数据库1&#xff08;Database 1&#xff09; │ │ ├── 表1&#xff08;Table 1&#xff09; │ │ │ ├── 主键字段&#xff08;Primary Key&#xff09;&#xff1a;唯一标识表中的每…

线程间的通信

一、实现方式 各线程之间栈区独享、并且与进程共享文本段、数据段、堆区&#xff0c;所以可以通过全局变量实现多线程间通信。 int num 0; //创建一个全局变量void *thread1(void *arg) {while (1){num 100; …

Deepseek开源周第四天:从 DualPipe 到 EPLB

Deepseek开源周第四天&#xff1a;从 DualPipe 到 EPLB 前言 上周deepseek宣布&#xff0c;将在本周陆续发布五个开源项目&#xff0c;这些库已经在生产环境中经过了记录、部署和实战测试。 今天是deepseek开源周的第四天&#xff0c;deepseek发布了三个开源项目&#xff0c;…

字符函数和字符串函数1

1、字符分类函数 C语⾔中有⼀系列的函数是专⻔做字符分类的&#xff0c;也就是⼀个字符是属于什么类型的字符的。 这些函数的使⽤都需要包含⼀个头⽂件是 ctype.h 在这里介绍一下islower函数&#xff0c;其他的非常相似。 函数原型&#xff1a; 1 int islower(int c); islo…

算法系列之排序算法-堆排序

在数据结构中&#xff0c;堆&#xff08;Heap&#xff09;是一种特殊的树形数据结构&#xff0c;通常用于实现优先队列。堆分为最大堆和最小堆两种类型。最大堆的每个节点的值都大于或等于其子节点的值&#xff0c;而最小堆的每个节点的值都小于或等于其子节点的值。Java 提供了…

Mercury、LLaDA 扩散大语言模型

LLaDA 参考&#xff1a; https://github.com/ML-GSAI/LLaDA https://ml-gsai.github.io/LLaDA-demo/ 在线demo&#xff1a; https://huggingface.co/spaces/multimodalart/LLaDA Mercury 在线demo&#xff1a; https://chat.inceptionlabs.ai/ 速度很快生成

YOLO - pose detect 输入输出接口与执行效率测试

0.参考资料&#xff1a; Pose - Ultralytics YOLO Docs 下面仅对这个模型的输入输出接口和效率做了判断&#xff0c;尚不涉及训练。 pose和segment 相对class detect是相对自然的扩展。object box内部的 subclass就是seg&#xff0c;object box 内部的point array 就是Pose。…

DeepSeek 开源狂欢周(一)FlashMLA:高效推理加速新时代

上周末&#xff0c;DeepSeek在X平台&#xff08;Twitter&#xff09;宣布将开启连续一周的开源&#xff0c;整个开源社区为之沸腾&#xff0c;全球AI爱好者纷纷为关注。没错&#xff0c;这是一场由DeepSeek引领的开源盛宴&#xff0c;推翻了传统推理加速的种种限制。这周一&…

MySQL数据库基本概念

目录 什么是数据库 从软件角度出发 从网络角度出发 MySQL数据库的client端和sever端进程 mysql的client端进程连接sever端进程 mysql配置文件 MySql存储引擎 MySQL的sql语句的分类 数据库 库的操作 创建数据库 不同校验规则对查询的数据的影响 不区分大小写 区…