>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML
Jupyter

LIBERO:教机器人不忘旧技能

1,987 星标

想象一下,你教会了一个操作机器人小心地把一本书放到书架上。太棒了!现在你让它把一个杯子放到桌子上,结果……它完全忘记了如何处理书籍。机器学习领域常见的情况?这个被称为"灾难性遗忘"的现象,是机器人研究人员最头疼的问题之一。只能完成一项任务的机器人在现实世界中几乎毫无用处。

这正是LIBERO项目(Lifelong-Robot-Learning,终身机器人学习)创建的目的。它不仅仅是一段代码,而是一个完整的框架和基准,用于开发和测试能够进行"终身学习"的机器人——即在积累知识和技能的同时不丢失现有能力。让我们来了解一下这个项目是什么,以及为什么你应该关注它。

LIBERO 是什么?谁需要它?

简单来说,LIBERO 是一个机器人人工智能的"健身房"和"考试场"。它为研究人员和开发人员提供了一切所需,让他们能够训练 AI 智能体按顺序执行多个任务,并将知识从一个任务迁移到另一个任务。

该项目对以下人群特别有用:

  • AI/ML 和机器人研究人员:LIBERO 提供了一套标准化的任务和指标,用于比较不同的终身学习方法。
  • 学生和研究生:这是一个现成的沙盒环境,可用于学习和实验高级机器人学习概念。
  • 实践工程师:那些想在真实条件下测试自己算法的人——在机器人需要不断适应的场景中。

无需每次从头创建环境和任务,你获得的是一个现成的工具包,让你能够专注于最重要的东西——学习算法。

LIBERO workflow diagram

核心特性:里面有什么?

LIBERO 不仅仅是一堆脚本,而是一个综合平台。以下是它最有趣的组件。

1. 无限任务生成器

该项目的主要亮点之一是程序化任务生成。这意味着从理论上讲,LIBERO 可以创建无限数量的独特操作场景。这解决了"数据集记忆"问题:模型将无法简单地为一个有限的示例集记忆正确的动作。它必须学会泛化。

2. 现成的任务套件

为了方便使用,作者将 130 个任务分成了四个主题集:

  • LIBERO-Spatial:需要理解空间关系的任务("把立方体放在上面","把物体推到桌子下面")。
  • LIBERO-Object:专注于与不同物体的交互。机器人需要将从一种物品的工作中获得的技能迁移到另一种物品上。
  • LIBERO-Goal:目标会发生变化而物体和环境保持相同的任务。
  • LIBERO-100:最具挑战性的 100 个多样化任务集,需要混合知识迁移。它进一步分为 LIBERO-90 用于预训练和 LIBERO-10 用于最终测试智能体的持续学习能力。

这种划分允许有针对性地测试模型如何迁移特定类型的知识——程序性知识(如何移动)或陈述性知识(什么在哪里)。

3. "配套齐全":算法和架构

为了让实验更容易上手,LIBERO 已经内置了基础算法和神经网络架构:

  • 三种视觉运动架构:bc_rnn_policybc_transformer_policybc_vilt_policy。这些是机器人的现成"大脑",将相机图像转换为操作动作。
  • 五种学习算法:包括基础方法(顺序微调、多任务学习)和更先进的持续学习方法(erewcpacknet)。

这意味着你可以立即开始比较不同的方法,而无需花时间从头实现它们。

实际工作中是如何运作的?

开始使用 LIBERO 非常简单。通过标准的 condapip 安装后,你就可以访问整个工具包。

例如,要下载带有人类演示的数据集(是的,该项目专注于模仿学习),你只需要运行一个脚本。顺便说一句,他们最近增加了直接从 HuggingFace 下载的功能——非常方便!

# Скачать все датасеты с HuggingFace
python benchmark_scripts/download_libero_datasets.py --use-huggingface

以下是加载和运行其中一个任务的最小示例:

from libero.libero import benchmark
from libero.libero.envs import OffScreenRenderEnv

# Получаем список доступных наборов задач
benchmark_dict = benchmark.get_benchmark_dict()
task_suite_name = "libero_10"
task_suite = benchmark_dict[task_suite_name]()

# Выбираем конкретную задачу по её ID
task_id = 0
task = task_suite.get_task(task_id)
task_description = task.language

print(f"Загружена задача: {task_description}")

# Инициализируем окружение для симуляции
env_args = {
    "bddl_file_name": os.path.join(get_libero_path("bddl_files"), task.problem_folder, task.bddl_file),
    "camera_heights": 128,
    "camera_widths": 128
}
env = OffScreenRenderEnv(**env_args)
env.reset()

# Выполняем 10 шагов с пустым действием
for step in range(10):
    obs, reward, done, info = env.step([0.] * 7)
env.close()

如你所见,API 相当简单直观。你可以轻松地将自己的模型和算法集成到这个流程中。

结论:值得一试吗?

如果你的工作或研究与机器人学习有任何关系,答案是绝对值得一试。LIBERO是一个强大且文档完善工具,解决了这个领域的一个真实问题。它不会替你训练机器人,但它提供了一个出色的实验环境。

LIBERO 特别适合的人群:

  • 研究人员:发布可复现且可比较的结果。
  • 爱好者:亲自动手实践机器人领域的最新方法。
  • 教师:作为机器学习和机器人学课程的教学平台。

该项目正在积极开发中,其作者为 AI 最复杂和最有趣的领域之一创建了统一标准,做了大量工作。因此,如果你想教机器人不仅能放下杯子,还能不忘书籍,请查看该项目的 GitHub。这是一个很好的起点。