1 LIBERO 的作用
LIBERO 是一个用于研究多任务和终身机器人学习中知识迁移的综合基准测试平台,基于 robosuite 框架构建。它专注于机器人操作任务,这些任务需要两类知识:
- 陈述性知识:关于物体和空间关系的知识
- 程序性知识:关于运动和行为的知识
2 核心原理
任务生成与基准设计
LIBERO 提供了一个程序化生成管道,原则上可以生成无限数量的操作任务。系统包含 130 个任务,分为四个任务套件,每个套件都有受控的分布偏移:
- LIBERO-Spatial/Object/Goal:专注于特定类型知识的迁移
- LIBERO-100:包含需要迁移纠缠知识的 100 个操作任务
学习框架
系统采用模仿学习作为主要学习方法,因为任务使用稀疏奖励函数(任务完成时获得 +1 奖励)。LIBERO 提供高质量的人类遥操作演示数据集用于训练。
算法与策略架构
LIBERO 实现了三种视觉运动策略网络:
bc_rnn_policy:基于 RNN 的行为克隆策略
bc_transformer_policy:基于 Transformer 的行为克隆策略
bc_vilt_policy:基于视觉 - 语言 Transformer 的行为克隆策略
以及五种终身学习算法:
base:顺序微调(基线)
er:经验回放(Experience Replay)
ewc:弹性权重巩固(Elastic Weight Consolidation)
packnet:渐进式网络架构方法
multitask:多任务学习(基线)
3 任务套件概览
LIBERO 包含130 个任务,分为四个主要任务套件:
- LIBERO-Spatial(10 个任务)
- LIBERO-Object(10 个任务)
- LIBERO-Goal(10 个任务)
- LIBERO-100(100 个任务)
LIBERO-100 进一步分为LIBERO-90(90 个任务,用于预训练)和LIBERO-10(10 个任务,用于测试下游持续学习性能)。
3.1 LIBERO-Spatial(空间关系迁移)
这 10 个任务都涉及将黑碗放到盘子上,但黑碗的初始位置不同:
- 拾取盘子和小碗之间的黑碗并放到盘子上
- 拾取小碗旁边的黑碗并放到盘子上
- 拾取桌子中央的黑碗并放到盘子上
- 拾取饼干盒上的黑碗并放到盘子上
- 拾取木柜顶部抽屉中的黑碗并放到盘子上
- 拾取小碗上的黑碗并放到盘子上
- 拾取饼干盒旁边的黑碗并放到盘子上
- 拾取炉子上的黑碗并放到盘子上
- 拾取盘子旁边的黑碗并放到盘子上
- 拾取木柜上的黑碗并放到盘子上
3.2 LIBERO-Object(物体知识迁移)
这 10 个任务都是将不同物体放入篮子:
- 拾取字母汤罐头并放入篮子
- 拾取奶油奶酪并放入篮子
- 拾取沙拉酱并放入篮子
- 拾取烧烤酱并放入篮子
- 拾取番茄酱并放入篮子
- 拾取番茄酱罐并放入篮子
- 拾取黄油并放入篮子
- 拾取牛奶并放入篮子
- 拾取巧克力布丁并放入篮子
- 拾取橙汁并放入篮子
3.3 LIBERO-Goal(目标导向迁移)
这 10 个任务涉及不同的操作目标:
- 打开柜子的中间抽屉
- 将碗放到炉子上
- 将酒瓶放到柜子顶部
- 打开顶部抽屉并将碗放入
- 将碗放到柜子顶部
- 将盘子推到炉子前面
- 将奶油奶酪放入碗中
- 打开炉子
- 将碗放到盘子上
- 将酒瓶放到架子上
3.4 LIBERO-10(综合测试套件)
这 10 个任务来自不同场景,涉及复合操作:
- 客厅场景 2:将字母汤和番茄酱都放入篮子
- 客厅场景 2:将奶油奶酪盒和黄油都放入篮子
- 厨房场景 3:打开炉子并将摩卡壶放上去
- 厨房场景 4:将黑碗放入柜子底部抽屉并关闭
- 客厅场景 5:将白色杯子放到左边盘子上,黄白杯子放到右边盘子上
- 书房场景 1:拾取书并放入收纳盒后部隔间
- 客厅场景 6:将白色杯子放到盘子上,巧克力布丁放到盘子右边
- 客厅场景 1:将字母汤和奶油奶酪盒都放入篮子
- 厨房场景 8:将两个摩卡壶都放到炉子上
- 厨房场景 6:将黄白杯子放入微波炉并关闭
3.5 LIBERO-90
包含 90 个任务用于预训练。
系统支持 21 种不同的任务顺序排列,用于评估持续学习算法在不同任务序列下的表现。
4 框架算法详解
4.1 终身学习算法
1. Sequential (base)
顺序微调基线,也是所有终身学习算法的父类。
原理:按顺序在每个任务上训练策略网络,不采用任何防止遗忘的机制。每个任务开始时初始化优化器和调度器,然后通过 observe() 方法学习数据点。
学习过程包括:
- 将数据移到设备上
- 计算策略损失
- 反向传播并应用梯度裁剪
- 更新参数
2. Experience Replay (ER)
经验回放算法。
原理:维护一个包含之前任务数据的缓冲区。学习新任务时,从缓冲区采样旧任务数据与当前任务数据混合训练,防止灾难性遗忘。
每个任务结束后,将该任务的数据集截断并添加到缓冲区。学习时合并当前数据和缓冲区数据。
3. Elastic Weight Consolidation (EWC)
弹性权重巩固算法。
原理:通过添加正则化惩罚项来保护重要参数不被修改。计算 Fisher 信息矩阵来估计参数重要性,然后在损失函数中添加惩罚项,限制重要参数的变化。
每个任务结束后计算 Fisher 信息,学习时在损失中加入惩罚项。
4. PackNet
渐进式网络剪枝算法。
原理:为每个任务分配网络的不同子集。学习新任务时,先将之前任务使用的权重冻结,然后在剩余可训练权重上学习。任务结束后进行剪枝,保留当前任务的重要权重。
学习时将固定参数的梯度置零,任务结束后进行剪枝并可选地进行微调。
5. Multitask
多任务学习基线,所有任务同时训练。
4.2 神经网络架构
1. BCRNNPolicy
基于 RNN 的行为克隆策略。
架构组成:
- 图像编码器:处理 RGB/深度图像,输出固定维度的嵌入
- 语言编码器:编码任务描述
- 额外模态编码器:处理关节状态、夹爪状态、末端执行器位置等
- LSTM 网络:处理时序信息
- 策略头:输出动作分布
2. BCTransformerPolicy
基于 Transformer 的行为克隆策略。
架构组成:
- 图像编码器:与 RNN 策略类似
- 语言编码器
- 额外模态 token 化:将额外模态转换为 token
- 时序 Transformer:处理时序依赖
- 策略头
3. BCViLTPolicy
基于视觉 - 语言 Transformer 的行为克隆策略。
架构组成:
- 图像编码器:使用 patch embedding
- 空间语言编码器和时序语言编码器
- 位置嵌入和模态嵌入:用于区分不同输入
- 空间 Transformer:融合图像和语言信息
- 时序 Transformer和策略头
前向传播包括空间编码和时序编码两个阶段。
所有策略网络都继承自 BasePolicy 基类,实现了统一的接口。三种网络的主要区别在于时序建模方式:RNN 使用 LSTM,Transformer 使用自注意力机制,ViLT 则采用双层 Transformer 分别处理空间和时序信息。所有算法都基于行为克隆,通过模仿学习从人类演示中学习策略。
5 待解决的问题
LIBERO 旨在解决终身机器人学习中的几个核心挑战:
5.1. 知识迁移评估
通过受控的分布偏移,系统可以系统性地研究不同类型知识的迁移能力。前三个任务套件分别测试空间关系、物体知识和目标导向知识的迁移。
5.2. 灾难性遗忘
终身学习算法需要在学习新任务时保持对旧任务的性能。系统通过混淆矩阵跟踪这一问题,记录在学习任务 k 后对任务 p 的性能。
5.3. 前向和后向迁移
系统计算两个关键指标:
- 前向迁移:学习速度,通过成功率 AUC 衡量
- 后向迁移:学习新任务后对旧任务性能的影响
6 实验评估方法
6.1 评估指标
训练过程中系统跟踪多个指标:
- 损失混淆矩阵:记录在不同训练阶段各任务的 BC 损失
- 成功率混淆矩阵:记录在不同训练阶段各任务的成功率
- 学习曲线 AUC:衡量智能体学习和成功的速度
6.2 实验流程
对于顺序学习算法,系统按以下流程进行:
- 对每个任务 i,训练智能体
- 在所有已见任务(0 到 i)上评估损失和成功率
- 更新混淆矩阵和前向迁移指标
对于多任务学习基线,所有任务同时训练。
6.3 计算效率
系统报告策略网络的计算复杂度,以 GFLOPs 和参数量(MParams)衡量。
7 下载及安装
7.1 项目下载
pip install libero
python -m libero.download_suite --suite libero_100
python libero/lifelong_train.py \
--suite libero_100 \
--policy bc_transformer_policy \
--algo sequential
7.2 数据集下载
(1)直接下载链接
(2)HuggingFace (推荐)
仓库 ID: yifengzhu-hf/LIBERO-datasets
完整地址:https://huggingface.co/datasets/yifengzhu-hf/LIBERO-datasets
下载方法:使用下载脚本
python benchmark_scripts/download_libero_datasets.py --use-huggingface
python benchmark_scripts/download_libero_datasets.py --datasets libero_spatial --use-huggingface
脚本会提示原始链接可能失效,建议使用 HuggingFace 源。