metamotivo
Meta Motivo 是由 Meta FAIR 推出的首个行为基础模型,专为控制基于物理仿真的虚拟全身人形智能体而设计。它旨在解决传统机器人控制方法泛化能力弱、难以应对复杂多变全身动作任务的难题,实现了在无需额外训练(零样本)的情况下,灵活执行行走、奔跑、跳跃等多种高难度动作。
该项目主要面向人工智能研究人员、机器人学开发者以及强化学习领域的工程师。通过提供基于 PyTorch 的完整实现和多个预训练模型,Meta Motivo 让用户能够快速复现论文结果或开展新的实验。其核心技术亮点在于采用了 FB-CPR 架构,并发布了从轻量级(2450 万参数)到高性能(2.88 亿参数)的多款模型,所有模型均支持在 HumEnv 环境中进行高保真度的物理仿真与评估。
用户只需简单的几行代码,即可从 Hugging Face 加载预训练模型,直接用于推理或作为基线进行二次开发。项目不仅提供了详尽的训练与评估脚本,还开放了完整的训练数据缓冲区,极大地降低了全身人形控制的研究门槛,是推动通用具身智能发展的重要开源资源。
使用场景
某机器人实验室的研究团队正致力于开发一款能在复杂灾难现场执行搜救任务的虚拟人形机器人,需要其具备快速适应多种全身动作的能力。
没有 metamotivo 时
- 训练成本高昂:针对行走、攀爬、搬运等每种新任务,团队都需从头收集数据并重新训练专用模型,耗时数周且算力消耗巨大。
- 泛化能力受限:传统控制器在遇到未见过地形或突发干扰时容易失衡摔倒,缺乏应对未知环境的鲁棒性。
- 动作协调性差:难以实现手眼脚协同的复杂全身动作,往往顾此失彼,导致任务执行效率低下。
- 零样本迁移困难:无法直接将模拟环境中学到的技能无缝迁移到新场景中,必须针对每个场景进行繁琐的微调。
使用 metamotivo 后
- 即插即用控制:利用预训练的 behavioral foundation model,团队可直接加载模型实现零样本(Zero-Shot)控制,瞬间掌握行走、跳跃等多种技能,无需重复训练。
- 超强环境适应:基于物理的全身控制算法让机器人在崎岖不平的废墟上也能保持动态平衡,从容应对滑倒风险或外部撞击。
- 全身协同作业:metamotivo 能自然协调四肢与躯干,流畅完成“边攀爬边抓取”等高难度复合动作,大幅提升搜救成功率。
- 通用任务覆盖:单个模型即可覆盖广泛的全身任务库,研究人员只需更换指令即可切换任务模式,极大简化了开发流程。
metamotivo 通过将行为基础模型引入人形机器人控制,彻底改变了以往“一任务一模型”的低效范式,实现了真正通用的智能全身运动控制。
运行环境要求
- 未说明
未说明 (代码示例支持 CPU 运行,但强化学习训练通常建议 GPU)
未说明

快速开始
Meta Motivo
概述
本仓库提供了 Meta Motivo 的 PyTorch 实现及预训练模型。详细信息请参阅论文《通过行为基础模型实现零样本全身人形机器人控制》(链接)。
特性
- 我们提供了 6 个预训练的 FB-CPR 模型,用于控制 HumEnv 中定义的人形机器人模型。
- 完全可复现 的脚本,用于在 HumEnv 中评估模型。
- 完全可复现 的 FB-CPR 在 HumEnv 中的训练代码,以复现论文中的全部结果;以及 FB 在 DMC 中的训练代码,便于更快速地进行实验。
安装
该项目可以通过 pip 直接安装到您的环境中。
pip install "metamotivo[huggingface,humenv] @ git+https://github.com/facebookresearch/metamotivo.git"
它需要 Python 3.10 或更高版本。可选依赖包括 humenv["bench"] 和 huggingface_hub,用于测试、训练以及从 HuggingFace 加载模型。
预训练模型
为确保可复现性,我们提供了所有 5 个模型(metamotivo-S-X),这些模型是我们为生成 论文 中的结果而训练的,每个模型使用不同的随机种子进行训练。此外,我们还提供了最大且性能最优的模型(metamotivo-M-1),您也可以在我们的 演示页面 上对其进行交互式测试。
| 模型 | 参数量 | 下载链接 |
|---|---|---|
| metamotivo-S-1 | 24.5M | 链接 |
| metamotivo-S-2 | 24.5M | 链接 |
| metamotivo-S-3 | 24.5M | 链接 |
| metamotivo-S-4 | 24.5M | 链接 |
| metamotivo-S-5 | 24.5M | 链接 |
| metamotivo-M-1 | 288M | 链接 |
快速入门
库安装完成后,您可以轻松创建一个 FB-CPR 代理,并从 Hugging Face 模型库下载预训练模型。请注意,该模型是 torch.nn.Module 的实例,默认情况下以“推理”模式初始化(即 no_grad 和 eval 模式)。
我们提供了一些简单的代码片段来演示如何使用该模型。更多详细的示例,请参阅我们的教程:与模型交互、运行评估以及 从头开始训练。
下载预训练模型
以下代码片段展示了如何实例化模型:
from metamotivo.fb_cpr.huggingface import FBcprModel
model = FBcprModel.from_pretrained("facebook/metamotivo-S-1")
下载缓冲区
对于每个模型,我们提供:
- 训练缓冲区(可用于推理或离线训练)
- 小型奖励推理缓冲区(包含进行奖励推理所需的最少信息)
from huggingface_hub import hf_hub_download
import h5py
local_dir = "metamotivo-S-1-datasets"
dataset = "buffer_inference_500000.hdf5" # 可用于奖励推理的小型缓冲区
# dataset = "buffer.hdf5" # 模型的完整训练缓冲区
buffer_path = hf_hub_download(
repo_id="facebook/metamotivo-S-1",
filename=f"data/{dataset}",
repo_type="model",
local_dir=local_dir,
)
hf = h5py.File(buffer_path, "r")
print(hf.keys())
# 创建一个 DictBuffer 对象,可用于采样
data = {k: v[:] for k, v in hf.items()}
buffer = DictBuffer(capacity=data["qpos"].shape[0], device="cpu")
buffer.extend(data)
FB-CPR 模型
FB-CPR 模型包含多个网络:
- 前向网络
- 后向网络
- 评论家网络
- 判别器网络
- 行动者网络
我们提供了用于评估这些网络的函数:
def backward_map(self, obs: torch.Tensor) -> torch.Tensor: ...
def forward_map(self, obs: torch.Tensor, z: torch.Tensor, action: torch.Tensor) -> torch.Tensor: ...
def actor(self, obs: torch.Tensor, z: torch.Tensor, std: float) -> torch.Tensor: ...
def critic(self, obs: torch.Tensor, z: torch.Tensor, action: torch.Tensor) -> torch.Tensor: ...
def discriminator(self, obs: torch.Tensor, z: torch.Tensor) -> torch.Tensor: ...
我们还提供了简单的函数,用于向模型输入提示并获得表示要执行任务的上下文向量 z:
# 奖励提示(标准和加权回归)
def reward_inference(self, next_obs: torch.Tensor, reward: torch.Tensor, weight: torch.Tensor | None = None,) -> torch.Tensor: ...
def reward_wr_inference(self, next_obs: torch.Tensor, reward: torch.Tensor) -> torch.Tensor: ...
# 目标提示
def goal_inference(self, next_obs: torch.Tensor) -> torch.Tensor: ...
# 跟踪提示
def tracking_inference(self, next_obs: torch.Tensor) -> torch.Tensor:
一旦我们有了上下文向量 z,就可以调用行动者网络来获取动作。我们提供了一个使用标准接口在环境中执行动作的函数:
def act(self, obs: torch.Tensor, z: torch.Tensor, mean: bool = True) -> torch.Tensor:
请注意,这些函数不允许梯度计算,并且处于评估模式,因为它们预期用于推理(torch.no_grad() 和 model.eval())。如果需要训练,则应直接访问类的属性。此外,我们还为前向、后向和评论家网络定义了目标网络。
执行策略
以下是一个执行随机策略的最小示例:
from humenv import make_humenv
from gymnasium.wrappers import FlattenObservation, TransformObservation
import torch
from metamotivo.fb_cpr.huggingface import FBcprModel
device = "cpu"
env, _ = make_humenv(
num_envs=1,
wrappers=[
FlattenObservation,
lambda env: TransformObservation(
env, lambda obs: torch.tensor(obs.reshape(1, -1), dtype=torch.float32, device=device), env.observation_space # 对于 gymnasium <1.0.0,请移除最后一个参数:env.observation_space
),
],
state_init="Default",
)
model = FBcprModel.from_pretrained("facebook/metamotivo-S-1")
model.to(device)
z = model.sample_z(1)
observation, _ = env.reset()
for i in range(10):
action = model.act(observation, z, mean=True)
observation, reward, terminated, truncated, info = env.step(action.cpu().numpy().ravel())
HumEnv 中的评估
为确保论文的可重复性,我们提供了使用 HumEnv 对模型进行评估的方法。我们提供了包装器,可用于将 Meta Motivo 与 humenv.bench 的奖励、目标和跟踪评估相集成。
以下是使用包装器进行奖励评估的示例:
from metamotivo.fb_cpr.huggingface import FBcprModel
from metamotivo.wrappers.humenvbench import RewardWrapper
import humenv.bench
model = FBcprModel.from_pretrained("facebook/metamotivo-S-1")
# 启用奖励重新标注和上下文推理
model = RewardWrapper(
model=model,
inference_dataset=buffer, # 参见上文如何下载并创建缓冲区
num_samples_per_inference=100_000,
inference_function="reward_wr_inference",
max_workers=80,
)
# 创建 humenv 的评估
reward_eval = humenv.bench.RewardEvaluation(
tasks=["move-ego-0-0"],
env_kwargs={
"state_init": "Default",
},
num_contexts=1,
num_envs=50,
num_episodes=100
)
scores = reward_eval.run(model)
您可以对 humenv.bench 中提供的其他评估执行相同的操作。有关完整的评估流程,请参阅 tutorial_benchmark.ipynb。
渲染基于奖励或跟踪的策略
我们展示了如何渲染一个基于奖励策略的 episode。
import os
os.environ["OMP_NUM_THREADS"] = "1"
from humenv import STANDARD_TASKS
import mediapy as media
task = STANDARD_TASKS[0]
model = FBcprModel.from_pretrained("facebook/metamotivo-S-1", device="cpu")
rew_model = RewardWrapper(
model=model,
inference_dataset=buffer, # 参见上文如何下载并创建缓冲区
num_samples_per_inference=100_000,
inference_function="reward_wr_inference",
max_workers=40,
process_executor=True,
process_context="forkserver"
)
z = rew_model.reward_inference(task)
env, _ = make_humenv(num_envs=1, task=task, state_init="DefaultAndFall", wrappers=[gymnasium.wrappers.FlattenObservation])
done = False
observation, info = env.reset()
frames = [env.render()]
while not done:
obs = torch.tensor(observation.reshape(1,-1), dtype=torch.float32, device=rew_model.device)
action = rew_model.act(obs=obs, z=z).ravel()
observation, reward, terminated, truncated, info = env.step(action)
frames.append(env.render())
done = bool(terminated or truncated)
media.show_video(frames, fps=30)
同样,也可以轻松渲染用于跟踪运动的策略。
import os
os.environ["OMP_NUM_THREADS"] = "1"
from metamotivo.wrappers.humenvbench import TrackingWrapper
from pathlib import Path
from humenv.misc.motionlib import MotionBuffer
model = FBcprModel.from_pretrained("facebook/metamotivo-S-1", device="cpu")
track_model = TrackingWrapper(model=model)
motion_buffer = MotionBuffer(files=ADD_THE_DESIRED_MOTION, base_path=ADD_YOUR_MOTION_ROOT, keys=["qpos", "qvel", "observation"])
ep_ = motion_buffer.get(motion_buffer.get_motion_ids()[0]
ctx = track_model.tracking_inference(next_obs=ep_["observation"][1:])
observation, info = env.reset(options={"qpos": ep_["qpos"][0], "qvel": ep_["qvel"][0]})
done = False
observation, info = env.reset()
frames = [env.render()]
for t in range(len(ctx)):
obs = torch.tensor(observation.reshape(1,-1), dtype=torch.float32, device=track_model.device)
action = track_model.act(obs=obs, z=ctx[t]).ravel()
observation, reward, terminated, truncated, info = env.step(action)
frames.append(env.render())
media.show_video(frames, fps=30)
引用
@article{tirinzoni2024metamotivo,
title={Zero-shot Whole-Body Humanoid Control via Behavioral Foundation Models},
author={Tirinzoni, Andrea and Touati, Ahmed and Farebrother, Jesse and Guzek, Mateusz and Kanervisto, Anssi and Xu, Yingchen and Lazaric, Alessandro and Pirotta, Matteo},
}
许可证
Meta Motivo 采用 CC BY-NC 4.0 许可证授权。详情请参阅 LICENSE。
版本历史
v0.1.22025/01/27v0.1.12024/12/20v0.1.02024/12/16常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
LLMs-from-scratch
LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备
Deep-Live-Cam
Deep-Live-Cam 是一款专注于实时换脸与视频生成的开源工具,用户仅需一张静态照片,即可通过“一键操作”实现摄像头画面的即时变脸或制作深度伪造视频。它有效解决了传统换脸技术流程繁琐、对硬件配置要求极高以及难以实时预览的痛点,让高质量的数字内容创作变得触手可及。 这款工具不仅适合开发者和技术研究人员探索算法边界,更因其极简的操作逻辑(仅需三步:选脸、选摄像头、启动),广泛适用于普通用户、内容创作者、设计师及直播主播。无论是为了动画角色定制、服装展示模特替换,还是制作趣味短视频和直播互动,Deep-Live-Cam 都能提供流畅的支持。 其核心技术亮点在于强大的实时处理能力,支持口型遮罩(Mouth Mask)以保留使用者原始的嘴部动作,确保表情自然精准;同时具备“人脸映射”功能,可同时对画面中的多个主体应用不同面孔。此外,项目内置了严格的内容安全过滤机制,自动拦截涉及裸露、暴力等不当素材,并倡导用户在获得授权及明确标注的前提下合规使用,体现了技术发展与伦理责任的平衡。