RobotMem + LIBERO
为终身机器人学习提供持久化记忆 —— 将一个 LIBERO 任务套件中学到的技能迁移到下一个,同时避免遗忘。
快速开始
from robotmem import RobotMemory
from libero.libero import benchmark
mem = RobotMemory(db="libero_lifelong.db")
task_suite = benchmark.get_benchmark("libero_long")
for task in task_suite.get_task_names():
env = task_suite.make_env(task)
obs = env.reset()
# 检索与当前观测匹配的历史技能
prior = mem.recall(obs["agentview_image"], top_k=3)
action = policy.predict(obs, prior_experiences=prior)
obs, reward, done, info = env.step(action)
# 将成功的轨迹持久化,供未来任务使用
mem.save_perception(
observation=obs,
action=action,
reward=reward,
metadata={"task": task, "suite": "libero_long"}
)
集成功能
LIBERO 是一个专为研究机器人操作中的终身学习而设计的基准测试框架。它提供了超过 130 个程序化生成的任务,分为五个套件 —— LIBERO-Spatial、LIBERO-Object、LIBERO-Goal、LIBERO-Long 和 LIBERO-100 —— 每个套件测试知识迁移的不同维度。其核心挑战是灾难性遗忘:当机器人学习新任务时,往往会丢失之前学到的技能。
RobotMem 通过提供一个持久化、可查询的记忆层来解决这个问题,该记忆层与 LIBERO 的任务套件并行工作。每条成功的轨迹 —— 观测、执行的动作、获得的奖励以及任务上下文 —— 都存储在本地 SQLite 数据库中。当智能体遇到新任务时,它可以通过对观测进行语义相似度搜索来检索相关的历史经验。这意味着在 LIBERO-Spatial 上训练的策略可以在遇到新的 LIBERO-Goal 任务时利用之前学到的操作基元,而无需在旧数据上重新训练。
该集成设计得非常轻量。RobotMem 不修改 LIBERO 的环境封装器或任务定义,而是作为一个旁路记忆运行,你的策略可以在推理时进行查询。这使得它与你选择的任何学习算法兼容 —— 行为克隆、扩散策略、基于 Transformer 的策略或强化学习方法。
- 跨套件技能迁移 —— 在解决 LIBERO-Goal 任务时检索 LIBERO-Spatial 中的操作技能,弥合空间知识与语义知识之间的差距。
- 抗遗忘缓冲 —— 永久保存成功的轨迹,确保先前的任务知识永远不会丢失,无论训练了多少新任务。
- 基于观测的检索 —— 通过向量相似度使用原始摄像头观测(agentview 或手眼相机)查询记忆,无需手动特征工程。
- 任务感知元数据 —— 为每条记忆标记套件名称、任务 ID、成功率和自定义标注,实现细粒度的检索过滤。
- 零配置持久化 —— 所有数据存储在单个 SQLite 文件中,可在训练重启、机器重启和实验重跑后保持不变。
为什么 LIBERO 需要持久化记忆
标准的终身学习方法使用驻留在内存中的回放缓冲区,训练结束后即消失。LIBERO 的基准测试协议评估跨任务序列的前向和后向迁移能力,但大多数基线方法缺乏跨训练轮次存储和检索经验的机制。RobotMem 填补了这一空白:它为每个实验提供一个持久化记忆,在机器人的整个生命周期中积累知识,而不仅仅是单次训练会话。
在实践中,这意味着你可以今天在 LIBERO-Spatial 上训练,关闭机器,明天继续使用 LIBERO-Object —— 你的智能体仍然记得昨天学到的空间操作技能。这更接近真实机器人需要的运行方式:持续学习,同时不丢弃已有知识。