LLARVA: Vision-Action Instruction Tuning Enhances Robot Learning

发表时间:17 Jun 2024

作者单位:Berkeley AI Research, UC Berkeley

Motivation:先前用于机器人应用的 LMM 已经在语言和动作数据上进行训练,但它们在不同设置中进行泛化的能力通常小于所需的。为了解决这个问题,我们引入了 LLARVA,这是一种使用一种新颖的指令调整方法训练的模型,该方法利用结构化提示来统一一系列机器人学习任务、场景和环境。

解决方法:在这里,我们提出了一种视觉动作指令调整方法,可以弥合语言模型的基本预训练目标——下一个词预测)之间的差距,以及使模型能够处理各种机器人设置的目标。我们的关键思想是制定一种新颖的指令提示,它将机器人类型、任务、场景配置和控制机制封装在适合当代 LMM 的自然语言前缀中

我们引入了一种新的指令调优方法,该方法利用结构化提示来统一 一系列机器人学习任务、场景和环境和二维视觉跟踪,以进一步对齐视觉和动作空间。该模型通过包含机器人模型、控制模式、机器人任务、本体感受信息和预测步数的语言指令工作,并输出下一个机器人动作的文本以及剧集其余部分的视觉跟踪。

也是利用现有的机器人数据生成instruction(与上一篇LLaRA类似的思想) ,然后对LLaRVA进行指令调优。

为什么要预测二维图像的视觉轨迹?

  1. 我们发现预测中间的二维表示,我们称之为视觉轨迹,可以帮助对齐不同机器人和任务配置的视觉和动作空间。

  2. 尽管最近的机器人模型使用 3D 表示,例如体素和点云来克服这一点,但这些表示很难合并到大多数现有的开源 LMM 中,因为它们通常接受单个图像加上语言作为输入。由于这些原因,我们利用二维图像,这些图像易于扩展并与现有的LMMs集成。

  3. 图 3 还定性地表明,视觉轨迹可以通过充当内存缓冲区来帮助长期任务,该缓冲区补偿模型可以处理的先前机器人状态数量有限。

实现方式:为了实现视觉输入和机器人动作之间的对齐,我们将视觉轨迹预测为辅助任务,因为我们发现这有助于获得更好的细粒度定位,从而更准确地预测机器人动作。具体来说,我们生成末端执行器的二维视觉轨迹(投影),并迫使模型预测下一个轨迹以及下一个机器人动作。该航路点预测有助于将每个机器人动作与末端执行器的位置对齐,使模型能够专注于细粒度的定位,从而更准确地预测机器人动作。为此,我们使用 Open X-Embodiment 数据集 (OXE) [10] 构建具有此类视觉轨迹的指令,仔细分类动作空间、机器人类型和控制类型。

模型结构:

输入:The input to our LLARVA architecture comprises two components. 首先,我们有视觉观察 ot,这是一个在时间步 t 捕获环境状态的图像。其次,我们有语言指令输入lt,它提示模型预测一定数量的后续步骤,整合机器人、控制模式和以前的本体感受状态等具体信息以及任务指令。(如下图所示)

具体来说,我们制定了一个指令模板,其中包含机器人类型 R(例如,Franka、UR5、xArm)、控制模式 M(例如关节或末端执行器控制、绝对或增量控制)、任务指令 I(例如,“打开抽屉”)、本体感觉信息 S(例如位置或速度)以及指示要预测的未来动作数量的查询,表示为 n。完整的指令公式如下:

输出:the language head in our model is trained to predict both robotic actions and visual traces in "natural" language(按照语言的形式输出机器人动作和视觉轨迹), this is made possible by using language instructions as a unified way to generalize across various robotic settings。

训练方式:

While keeping the vision encoder and language encoder frozen, we use instruction tuning to train the auto-regressive transformers using standard LoRA adapters [11] for both the pre-training and fine-tuning stages. 我们的两步训练过程、大规模预训练和下游任务的微调:

Step 1: Vision-Action Instruction Pre-training.

为了跨机器人任务、场景和环境进行泛化,该模型在我们的大规模视觉-动作指令数据集上进行了预训练。由于该数据集的多样性,我们的模型同时针对机器人类型 R、控制模式 M 或任务指令 I 1 等多个提示变量配置进行训练。

我们注意到这个预训练阶段与标准 LMM 预训练不同。与在VL中使用投影仪对齐两种模式不同,这里我们对齐两种模态来泛化到机器人配置。(与标准 LMM 预训练的目的不同,标准 LMM 预训练的目的是对齐视觉和语言模态,这里的对齐两种模态的目的是泛化到机器人任务)

Step 2: Fine-tuning for Downstream Tasks.

我们使用具有固定配置的小型数据集微调预训练模型,用于第 2.2 节中定义的因素(例如,指令具有相同的机器人类型 R、控制模式 M 等)。在看到不同的数据样本后,模型很容易适应特定的下游设置,类似于它在预训练期间已经遇到的设置。

我们使用与 [7] 中相同的 18 个 RLBench 任务进行评估。在微调阶段,根据前 5 个关节位置(即 h = 5),选择前视图作为 ot。LLARVA 预测视觉轨迹和下一个动作步骤(即 n = 1),这是一个由 7 个关节速度和二进制夹具状态组成的 8 维向量。

这两个Step应该都是按照本文的指令调优的方式,遵循本文设计的指令数据形式,只不过数据集不同。

实验:LLARVA is implemented using PyTorch [13] with the official LLaVA 1.5 [4] implementation. The base LMM uses a Llama 2 7B-parameter LLM, the default image projection layer, and the CLIP ViTL/14 vision encoder.

我们在 RLBench 模拟环境的 18 个不同的任务上评估 LLARVA,并使用真实的 7-DoF Franka Emika Panda 机器人拾取、堆叠和去堆叠任务。

结论:我们注意到语言模型解码器对于将多模态输入转换为机器人技术中的可操作输出至关重要。通过利用共享的视觉动作嵌入空间,我们的解码器产生机器人系统可以使用的响应。

  • 我们认为未来的指令应该包括有关现实世界的 3-D 信息

  • LMM 有必要能够利用深度或体素处理多个视图,这可能需要使用交错标记,就像在一些现有的 LMM 中所做的那样。

### 如何复现 InstructBLIP 通用视觉-语言模型及其指令微调方法 #### 准备工作环境 为了成功复现 InstructBLIP 模型,首先需要准备适当的工作环境。这通常涉及安装必要的软件包和依赖项。建议使用 Python 和 PyTorch 来构建此项目。 ```bash conda create -n instructblip python=3.8 conda activate instructblip pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113 ``` #### 获取数据集 InstructBLIP 的训练依赖于大规模的数据集来学习丰富的特征表示。这些数据集应包含配对的图像和文本描述。常用的数据集包括 COCO Captions, Visual Genome 等[^2]。 #### 下载预训练模型权重 由于从头开始训练这样的大型模型非常耗时且计算资源密集,因此推荐下载官方发布的预训练模型权重作为起点。可以从 GitHub 或其他公开平台获取最新的预训练版本。 #### 实施指令微调流程 按照论文中的指导,在已有的基础之上实施特定任务导向的指令微调过程。具体来说: - **定义目标任务**:明确希望模型执行的任务类型,比如生成图片说明、问答等。 - **调整输入格式**:确保输入遵循预期结构,即每条记录由一对或多张图像以及相应的自然语言命令组成。 - **修改损失函数**:根据所选任务定制化设计适合的优化目标。 ```python from transformers import BlipForConditionalGeneration, BlipProcessor processor = BlipProcessor.from_pretrained("Salesforce/blip-image-captioning-base") model = BlipForConditionalGeneration.from_pretrained("Salesforce/blip-image-captioning-base") def fine_tune_model(training_data): optimizer = AdamW(model.parameters(), lr=5e-5) for epoch in range(num_epochs): model.train() for batch in training_data: inputs = processor(images=batch['image'], text=batch['instruction'], return_tensors="pt", padding=True) outputs = model(**inputs) loss = outputs.loss optimizer.zero_grad() loss.backward() optimizer.step() fine_tune_model(prepared_dataset) ``` 通过上述步骤可以有效地实现 InstructBLIP 模型的本地部署与进一步开发应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KKdlg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值