库名称: transformers
流水线标签: 图像文本到文本
许可证: mit
Magma-8B模型卡
智能体演示
用户界面导航
机器人操作
游戏控制
任务:模型控制机器人收集绿色方块。
模型详情
模型描述
Magma是一个多模态智能AI模型,能够根据输入的文本和图像生成文本。该模型专为研究目的设计,旨在促进多模态AI领域特别是多模态智能AI的知识共享与研究加速。该模型的主要创新点在于引入了两项技术创新:标记集合(Set-of-Mark)和标记轨迹(Trace-of-Mark),并利用大量未标记视频数据来学习时空定位与规划能力。更多技术细节请参阅我们的论文。
亮点
- 数字与物理世界: Magma是首个面向多模态AI智能体的基础模型,能够处理虚拟与现实环境中的复杂交互!
- 多功能能力: 作为单一模型,Magma不仅具备通用图像视频理解能力,还能生成目标驱动的视觉规划与动作,适用于多种智能任务!
- 最先进性能: 在各类多模态任务上达到最先进水平,包括UI导航、机器人操作以及通用图像视频理解,特别是在空间理解与推理方面!
- 可扩展预训练策略: Magma设计为可从海量未标记视频中扩展学习,结合现有智能数据,使其具备强大的泛化能力,适合现实世界应用!
许可证
本模型由微软开发,由微软研究院资助。模型由微软研究院共享,采用MIT许可证授权。
快速开始使用模型
要开始使用模型,首先需要确保安装了transformers
和torch
,以及以下依赖项:
pip install torchvision Pillow open_clip_torch
⚠️ 请注意需要安装我们定制版的transformers库:
pip install git+https://github.com/jwyang/transformers.git@dev/jwyang-v4.48.2
安装原因请参见此处。
然后可以运行以下代码:
import torch
from PIL import Image
from io import BytesIO
import requests
from transformers import AutoModelForCausalLM, 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")
url = "https://assets-c4akfrf5b4d3f4b7.z01.azurefd.net/assets/2024/04/BMDataViz_661fb89f3845e.png"
image = Image.open(BytesIO(requests.get(url, stream=True).content))
image = image.convert("RGB")
convs = [
{"role": "system", "content": "你是具备视觉、语言和行动能力的智能体。"},
{"role": "user", "content": "<image_start><image><image_end>\n这张图片里有什么?"},
]
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": 128,
"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)
训练详情
训练数据
我们的训练数据包含:
数据收集过程涉及从公开文档中获取信息,并采用细致方法过滤不良文档和图像。为保护隐私,我们仔细过滤了各类图像和文本数据源,从训练数据中移除或