LIBERO:用于多任务与终身机器人学习的知识迁移基准平台

Benchmarking Knowledge Transfer in Lifelong Robot Learning

Branch2Tags0
FilesLast commitLast update
3 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
3 years ago
2 years ago
3 years ago
3 years ago

Tests Passing GitHub Contributors Issues

探索永生机器人学习中的知识转移基准

Bo Liu, Yifeng Zhu, Chongkai Gao, Yihao Feng, Qiang Liu, Yuke Zhu, Peter Stone

[官方网站] [论文] [文档]


pull_figure

LIBERO 是为了研究多任务和终身机器人学习中知识转移而设计的。成功解决这些问题需要关于对象/空间关系的声明性知识以及关于运动/行为的过程性知识。LIBERO 提供:

  • 一种理论上可以生成无限数量操纵任务的程序化生成管道。
  • 分为四个任务集合的 130 个任务:LIBERO-SpatialLIBERO-ObjectLIBERO-GoalLIBERO-100。前三个任务集合具有受控分布变化,意味着它们需要特定类型的知识转移。相反,LIBERO-100 包含 100 个需要交织知识转移的操纵任务。LIBERO-100 进一步分为用于预训练策略的 LIBERO-90 和用于测试代理下游终身学习性能的 LIBERO-10
  • 五个研究主题。
  • 三种视觉运动策略网络架构。
  • 使用顺序微调和多任务学习基线的三种终身学习算法。

内容

安装

请按顺序运行以下命令以安装 LIBERO 的依赖项。

conda create -n libero python=3.8.13
conda activate libero
git clone https://github.com/Lifelong-Robot-Learning/LIBERO.git
cd LIBERO
pip install -r requirements.txt
pip install torch==1.11.0+cu113 torchvision==0.12.0+cu113 torchaudio==0.11.0 --extra-index-url https://download.pytorch.org/whl/cu113

然后安装 libero 包:

pip install -e .

数据集

我们为 LIBERO 的四个任务集合提供了高质量的人类远程操作示范。要下载演示数据集,请运行:

python benchmark_scripts/download_libero_datasets.py

默认情况下,数据集将存储在 LIBERO 文件夹下,并且所有四个数据集都将被下载。要下载特定数据集,请使用

python benchmark_scripts/download_libero_datasets.py --datasets DATASET

其中 DATASET 可选自 [libero_spatial, libero_object, libero_100, libero_goal]

开始使用

有关详细说明,请参阅文档或 notebooks 目录下提供的笔记本示例。以下是获取任务、训练和评估的示例脚本。

任务

以下是从特定任务集合中检索特定任务的最小示例。

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


benchmark_dict = benchmark.get_benchmark_dict()
task_suite_name = "libero_10"  # 也可以选择 libero_spatial、libero_object 等
task_suite = benchmark_dict[task_suite_name]()

# 检索特定任务
task_id = 0
task = task_suite.get_task(task_id)
task_name = task.name
task_description = task.language
task_bddl_file = os.path.join(get_libero_path("bddl_files"), task.problem_folder, task.bddl_file)
print(f"[info] 获取任务 {task_id} 从集合 {task_suite_name},语言指令是 {task_description},BDDL 文件是 {task_bddl_file}")

# 步进环境
env_args = {
    "bddl_file_name": task_bddl_file,
    "camera_heights": 128,
    "camera_widths": 128
}
env = OffScreenRenderEnv(**env_args)
env.seed(0)
env.reset()
init_states = task_suite.get_task_init_states(task_id)  # 为了基准测试,我们固定一组初始状态
init_state_id = 0
env.set_init_state(init_states[init_state_id])

dummy_action = [0.] * 7
for step in range(10):
    obs, reward, done, info = env.step(dummy_action)
env.close()

目前,我们仅支持稀疏奖励函数(即,当任务完成时,代理会收到 +1)。由于稀疏奖励强化学习极其困难,我们当前主要关注终身模仿学习。

训练

要启动一个终身学习实验,请选择:

  • BENCHMARK[LIBERO_SPATIAL, LIBERO_OBJECT, LIBERO_GOAL, LIBERO_90, LIBERO_10]
  • POLICY[bc_rnn_policy, bc_transformer_policy, bc_vilt_policy]
  • ALGO[base, er, ewc, packnet, multitask]

然后运行:

export CUDA_VISIBLE_DEVICES=GPU_ID && \
export MUJOCO_EGL_DEVICE_ID=GPU_ID && \
python libero/lifelong/main.py seed=SEED \
                               benchmark_name=BENCHMARK \
                               policy=POLICY \
                               lifelong=ALGO

请查看文档以详细了解如何重现研究结果。

评估

默认情况下,政策将在训练期间在线进行评估。如果您有限的 GPU 计算资源,我们可以提供一个单独的评估脚本供您使用。

python libero/lifelong/evaluate.py --benchmark BENCHMARK_NAME \
                                   --task_id TASK_ID \ 
                                   --algo ALGO_NAME \
                                   --policy POLICY_NAME \
                                   --seed SEED \
                                   --ep EPOCH \
                                   --load_task LOAD_TASK \
                                   --device_id CUDA_ID

引用

如果 LIBERO 在您的研究中很有帮助,请考虑引用我们的论文:

@article{liu2023libero,
  title={LIBERO: Benchmarking Knowledge Transfer for Lifelong Robot Learning},
  author={Liu, Bo and Zhu, Yifeng and Gao, Chongkai and Feng, Yihao and Liu, Qiang and Zhu, Yuke and Stone, Peter},
  journal={arXiv preprint arXiv:2306.03310},
  year={2023}
}

许可证

组件 许可证
代码库 MIT 许可证
数据集 知识共享署名 4.0 国际 (CC BY 4.0)