介绍终身机器人学习的数据集LIBERO

介绍终身机器人学习的数据集LIBERO
在这里插入图片描述

1 LIBERO的作用

在这里插入图片描述

LIBERO是一个用于研究多任务和终身机器人学习中知识迁移的综合基准测试平台,LIBERO是基于robosuite框架构建的。它专注于机器人操作任务,这些任务需要两类知识:

  1. 陈述性知识:关于物体和空间关系的知识
  2. 程序性知识:关于运动和行为的知识

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个任务,分为四个主要任务套件:

  1. LIBERO-Spatial(10个任务)
  2. LIBERO-Object(10个任务)
  3. LIBERO-Goal(10个任务)
  4. LIBERO-100(100个任务)

LIBERO-100进一步分为LIBERO-90(90个任务,用于预训练)和LIBERO-10(10个任务,用于测试下游持续学习性能)。

3.1 LIBERO-Spatial(空间关系迁移)

这10个任务都涉及将黑碗放到盘子上,但黑碗的初始位置不同:

  1. 拾取盘子和小碗之间的黑碗并放到盘子上
  2. 拾取小碗旁边的黑碗并放到盘子上
  3. 拾取桌子中央的黑碗并放到盘子上
  4. 拾取饼干盒上的黑碗并放到盘子上
  5. 拾取木柜顶部抽屉中的黑碗并放到盘子上
  6. 拾取小碗上的黑碗并放到盘子上
  7. 拾取饼干盒旁边的黑碗并放到盘子上
  8. 拾取炉子上的黑碗并放到盘子上
  9. 拾取盘子旁边的黑碗并放到盘子上
  10. 拾取木柜上的黑碗并放到盘子上
3.2 LIBERO-Object(物体知识迁移)

这10个任务都是将不同物体放入篮子:

  1. 拾取字母汤罐头并放入篮子
  2. 拾取奶油奶酪并放入篮子
  3. 拾取沙拉酱并放入篮子
  4. 拾取烧烤酱并放入篮子
  5. 拾取番茄酱并放入篮子
  6. 拾取番茄酱罐并放入篮子
  7. 拾取黄油并放入篮子
  8. 拾取牛奶并放入篮子
  9. 拾取巧克力布丁并放入篮子
  10. 拾取橙汁并放入篮子
3.3 LIBERO-Goal(目标导向迁移)

这10个任务涉及不同的操作目标:

  1. 打开柜子的中间抽屉
  2. 将碗放到炉子上
  3. 将酒瓶放到柜子顶部
  4. 打开顶部抽屉并将碗放入
  5. 将碗放到柜子顶部
  6. 将盘子推到炉子前面
  7. 将奶油奶酪放入碗中
  8. 打开炉子
  9. 将碗放到盘子上
  10. 将酒瓶放到架子上
3.4 LIBERO-10(综合测试套件)

这10个任务来自不同场景,涉及复合操作:

  1. 客厅场景2:将字母汤和番茄酱都放入篮子
  2. 客厅场景2:将奶油奶酪盒和黄油都放入篮子
  3. 厨房场景3:打开炉子并将摩卡壶放上去
  4. 厨房场景4:将黑碗放入柜子底部抽屉并关闭
  5. 客厅场景5:将白色杯子放到左边盘子上,黄白杯子放到右边盘子上
  6. 书房场景1:拾取书并放入收纳盒后部隔间
  7. 客厅场景6:将白色杯子放到盘子上,巧克力布丁放到盘子右边
  8. 客厅场景1:将字母汤和奶油奶酪盒都放入篮子
  9. 厨房场景8:将两个摩卡壶都放到炉子上
  10. 厨房场景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的行为克隆策略

架构组成

  1. 图像编码器:处理RGB/深度图像,输出固定维度的嵌入
  2. 语言编码器:编码任务描述
  3. 额外模态编码器:处理关节状态、夹爪状态、末端执行器位置等
  4. LSTM网络:处理时序信息
  5. 策略头:输出动作分布
2. BCTransformerPolicy

基于Transformer的行为克隆策略

架构组成

  1. 图像编码器:与RNN策略类似
  2. 语言编码器
  3. 额外模态token化:将额外模态转换为token
  4. 时序Transformer:处理时序依赖
  5. 策略头
3. BCViLTPolicy

基于视觉-语言Transformer的行为克隆策略

架构组成

  1. 图像编码器:使用patch embedding
  2. 空间语言编码器时序语言编码器
  3. 位置嵌入和模态嵌入:用于区分不同输入
  4. 空间Transformer:融合图像和语言信息
  5. 时序Transformer策略头

前向传播包括空间编码和时序编码两个阶段。

所有策略网络都继承自BasePolicy基类,实现了统一的接口。三种网络的主要区别在于时序建模方式:RNN使用LSTM,Transformer使用自注意力机制,ViLT则采用双层Transformer分别处理空间和时序信息。所有算法都基于行为克隆,通过模仿学习从人类演示中学习策略。

5 待解决的问题

LIBERO旨在解决终身机器人学习中的几个核心挑战:

5.1. 知识迁移评估

通过受控的分布偏移,系统可以系统性地研究不同类型知识的迁移能力。前三个任务套件分别测试空间关系、物体知识和目标导向知识的迁移。

5.2. 灾难性遗忘

终身学习算法需要在学习新任务时保持对旧任务的性能。系统通过混淆矩阵跟踪这一问题,记录在学习任务k后对任务p的性能。

5.3. 前向和后向迁移

系统计算两个关键指标:

  • 前向迁移:学习速度,通过成功率AUC衡量
  • 后向迁移:学习新任务后对旧任务性能的影响

6 实验评估方法

6.1 评估指标

训练过程中系统跟踪多个指标:

  1. 损失混淆矩阵:记录在不同训练阶段各任务的BC损失
  2. 成功率混淆矩阵:记录在不同训练阶段各任务的成功率
  3. 学习曲线AUC:衡量智能体学习和成功的速度

6.2 实验流程

对于顺序学习算法,系统按以下流程进行:

  1. 对每个任务i,训练智能体
  2. 在所有已见任务(0到i)上评估损失和成功率
  3. 更新混淆矩阵和前向迁移指标

对于多任务学习基线,所有任务同时训练。

6.3 计算效率

系统报告策略网络的计算复杂度,以GFLOPs和参数量(MParams)衡量。

7 下载及安装

7.1 项目下载

# 安装 pip install libero # 下载示范数据与套件 python -m libero.download_suite --suite libero_100 # 顺序微调实验(以 bc_transformer 为例) python libero/lifelong_train.py \ --suite libero_100 \ --policy bc_transformer_policy \ --algo sequential 

7.3 数据集下载

(1)直接下载链接
libero_object: https://utexas.box.com/shared/static/avkklgeq0e1dgzxz52x488whpu8mgspk.zip
libero_goal: https://utexas.box.com/shared/static/iv5e4dos8yy2b212pkzkpxu9wbdgjfeg.zip
libero_spatial: https://utexas.box.com/shared/static/04k94hyizn4huhbv5sz4ev9p2h1p6s7f.zip
libero_100: https://utexas.box.com/shared/static/cv73j8zschq8auh9npzt876fdc1akvmk.zip

(2)HuggingFace (推荐)
HuggingFace仓库地址: download_utils.py:108
仓库ID: yifengzhu-hf/LIBERO-datasets
完整地址: https://huggingface.co/datasets/yifengzhu-hf/LIBERO-datasets
下载方法
使用下载脚本: download_libero_datasets.py:1-27

# 使用HuggingFace下载(推荐)  python benchmark_scripts/download_libero_datasets.py --use-huggingface 
# 下载特定数据集  python benchmark_scripts/download_libero_datasets.py --datasets libero_spatial --use-huggingface 

脚本会提示原始链接可能失效,建议使用HuggingFace源。

Read more

零基础入门:Clawdbot对接Qwen3-32B的Web网关配置全攻略

零基础入门:Clawdbot对接Qwen3-32B的Web网关配置全攻略 你是否试过在本地部署一个大模型,却卡在“怎么让聊天界面连上它”这一步?明明Ollama里qwen3:32b已经跑起来了,Clawdbot也启动了,但输入问题后页面一直转圈、无响应——不是模型没加载,而是中间那层“连接通道”没搭对。 本文不讲抽象原理,不堆参数术语,只聚焦一件事:从零开始,把Clawdbot和你私有部署的Qwen3-32B真正连通,让Web界面能稳定、低延迟地收发消息。 全程基于真实可复现的操作步骤,所有命令、配置、端口映射逻辑都经过实测验证。即使你没碰过Ollama、没配过反向代理、第一次听说Clawdbot,也能照着一步步走通。 我们用的不是云端API,而是完全自主可控的本地链路: Clawdbot前端(8080端口) → 内部代理 → Qwen3-32B(Ollama API) 整条链路不依赖外网,不调用任何第三方服务,所有数据留在你自己的机器里。 1. 理解整个链路:三步到位,缺一不可 很多初学者失败,不是因为命令写错了,而是没理清“谁在跟谁说话”。我们先用一句话说清核心逻辑:

前端小白别懵!input的type值全解析(附实战避坑指南)

前端小白别懵!input的type值全解析(附实战避坑指南)

前端小白别懵!input的type值全解析(附实战避坑指南) * 前端小白别懵!input的type值全解析(附实战避坑指南) * 引言:那天我差点被一个 input 搞自闭了 * input 到底是个啥玩意儿 * type 值全家桶大起底 * text:最老实的打工人 * password:表面神秘,其实只是把字符藏起来 * email:自带格式校验,但别太信它 * number:弹出数字键盘,但小心它返回字符串 * tel:电话专用,iOS 安卓都给你调数字拨号盘 * url:输入网址时自动补 http?想多了,它只校验格式 * search:带小×清空按钮,细节控狂喜 * date / time / datetime-local:时间选择器三兄弟,兼容性一言难尽 * month / week:冷门但有用,比如做财务报表或排班系统 * color:点一下弹出调色板,设计师看了直呼内行

OpenWebUI环境变量配置全指南

概览 Open WebUI 提供了广泛的环境变量,允许您自定义和配置应用程序的各个方面。本页面作为所有可用环境变量的全面参考,提供了它们的类型、默认值和描述。 随着新变量的引入,本页面将不断更新以反映日益增长的配置选项。 :::info 本页面内容与 Open WebUI 版本 v0.6.42 同步,但仍在完善中,后续将包含更准确的描述、环境变量的可用选项列表、默认值以及改进的描述。 ::: 关于 PersistentConfig 环境变量的重要说明 :::note 首次启动 Open WebUI 时,所有环境变量都被平等对待并用于配置应用程序。但是,对于标记为 PersistentConfig 的环境变量,它们的值会被持久化并存储在内部数据库中。 初始启动后,如果您重新启动容器,PersistentConfig 环境变量将不再使用外部环境变量的值,而是使用内部存储的值。 相比之下,普通环境变量在每次后续重启时都会继续更新和应用。 您可以直接在 Open WebUI 内部更新 PersistentConfig 环境变量的值,