从大模型中蒸馏功能性重排列任务的先验知识

2024-01-30 06:28

本文主要是介绍从大模型中蒸馏功能性重排列任务的先验知识,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

图片

图片

导读

本文是VCC朱家辉同学对论文 Distilling Functional Rearrangement Priors from Large Models 的解读,该工作来自北京大学和中山大学,并已被发表在国际机器人顶会ICRA 2024上。

项目主页: 

https://sites.google.com/view/lvdiffusion/ 

该工作提出了一种结合大语言模型和图像生成模型来获得功能性重排列任务的先验知识的方法。该方法专注于生成符合功能要求的物体目标位置,这些位置在随后的机器人操控任务中具有重要意义。通过这种结合,算法不仅能更精准地生成目标位置,还能有效解决图像生成模型中提示词与生成结果不一致的问题。

I 引言 

近年来,基于图像生成模型的机器人重排列任务引起了广泛关注。这种方法的核心在于,通过使用预训练的图像生成模型,根据物体的初始状态输出重排列目标图像。与传统生成方法(例如,从零开始人工标注数据集或设计奖励函数)相比,这种方法能够灵活生成各种场景下的目标图像。尽管最新的生成模型能较好地生成符合功能性要求的图像,但由于模型的随机性,所以常常无法精确地复现初始场景中相同种类和数量的物体。因此,这类方法在测试阶段通常需加入过滤模块,以筛选出符合数量要求的图像。

本篇导读论文介绍了一种新方法,通过蒸馏大模型来获取功能性重排列的先验知识。该方法结合了大语言模型和图像生成模型,用于收集各种不同排列的示例数据集(包括物体的类别和位置)。随后,通过训练扩散模型,使其符合数据集的分布。在测试阶段,扩散模型能根据物体的类别和初始位置生成每个物体的目标位置。这种通过蒸馏的方法比以往方法更精确地生成目标位置,并能将生成过程从数分钟缩短至数秒,极大满足了机器人重排列任务对实时性的需求。

图片

图1 之前方法跟本论文方法的总览图

技术贡献 

本工作主要贡献如下:

  • 提出了一种新的框架,从大语言模型和图像生成模型中蒸馏功能性重排列的先验知识,用于训练扩散模型,以满足功能性重排列的要求;

  • 提出了利用大语言模型帮助缓解图像生成模型在提示词与生成结果不一致的问题;通过大量实验验证了该方法在生成目标位置和真实机器人操控任务中的有效性。

图片

图2 机器人生成目标图像并执行动作过程

III 方法介绍 

本方法的关键在于训练一个能够生成与初始物体数量相同且符合功能性要求的扩散模型。整个方法分为三个主要步骤:第一,数据收集:首先,利用大语言模型和图像生成模型收集数据集。数据集中包含物体的二维位置、大小和类别标签,这些信息共同定义了物体的数据分布。第二,模型训练:接着,使用这个数据集来训练基于分数的扩散模型。该模型旨在对条件分布进行建模,从而能够精确地生成目标位置。第三,推理:在推理阶段,目标检测器从当前图片中提取物体的初始位置和类别信息,并将这些信息输入到训练好的扩散模型中。模型随后生成符合功能性要求的物体目标位置。值得注意的是,这里的生成内容是物体的目标位置而非目标图像,如图3所示,在推理阶段生成的是“Goal Poses”,图中只是将每个物体的目标位置进行了可视化处理。最终,机器人根据这些信息将物体从初始位置移动到目标位置,完成重排列任务。

图片

图3 算法三大步骤

接下来分别介绍每一步的具体做法:

通过大语言模型和图像生成模型来收集数据

数据收集第一阶段:使用图像生成大模型(例如Stable Diffusion XL)生成初始物体摆放示例。这涉及使用特定的提示词模板,如“Realistic photo of [adjective] [setting description] with [num1] [object1], [num2] [object2], ..., [functional layout], [view point]”,图3中左上角展示了一个具体示例。然后,使用目标检测器(如GroundingDino)来获取物体的位置和类别信息。由于图像生成模型的随机性,需要过滤掉那些不符合提示词要求(如物体数量过多或物体类别未知)的图像。

数据收集第二阶段:优化初始重排列示例。首先,向大语言模型(如GPT-4)输入任务描述、用户习惯、以及目标检测器提供的物体包围盒和类别信息。目的是生成符合个人偏好的功能性排列要求。接着,让大语言模型推断出符合功能性要求的物体类别和数量,删除多余物体,并重新摆放剩余物体,以生成符合要求的物体位置。这一阶段使用思维链策略进行提问,并在第二次提问时加入具体示例,以确保获得统一格式和符合要求的物体位置。这些信息用于构建数据集。

将收集的数据集蒸馏到扩散模型中

这一步骤旨在将收集的数据用于训练条件扩散生成模型中,以对数据分布进行建模,该模型训练后能生成符合功能性要求的目标位置(不是图像)。这里采用基于分数的扩散模型来估计数据分布,更具体地,使用方差爆炸随机方程构建了一个连续扩散过程,并在训练过程中估计加噪声后数据分布的得分函数。通过降噪分数匹配(Denoising Score Matching)训练得分网络来估计噪声,这里估计的噪声相当于估计数据分布,具体公式请看原论文。得分网络的架构主要是一个图神经网络,适应不同数量物体的输入。所有物体构成一个完全连接的图,每个节点包含物体的位置、大小和类别,得分网络输入这个图,输出每个节点的得分。

使用训练后扩散模型重排列物体

在测试时,用目标检测器得到当前观察图片中物体的位置、大小和类别,然后通过训练好的得分网络生成目标位置。现在就可以计算出从初始位置到目标位置之间的平移,然后通过现成的SuctionNet来得到抓取物体的点,并根据前面得到的平移来计算放置物体的点,最后机器人对每个物体执行到达这个抓取点,抓取物体,到达放置点这些动作,直到完成任务。

IV 部分结果展示 

在这部分,我们将展示本论文算法在整理桌面任务中的效果。考虑了从简单到复杂的六种不同场景(S1至S6),每个场景的复杂度逐渐增加。第一行展示的是初始的物体位置,第二行展示了基线DALL-E-Bot整理后的结果。可以观察到,本论文提出的方法在整理效果上显著优于基线模型。原因在于,基线DALL-E-Bot采用的DALL-E2图像生成模型具有较高的随机性,无法保证生成的物体数量与初始场景一致。当生成的图像中物体过多时,算法难以匹配当前场景中的物体与生成图像中的对应物体,因此只能按照相似度最高的方式进行整理。而本论文的方法专注于生成物体的目标位置,这些位置是根据功能性重排列数据集的分布生成的,且允许物体之间发生重叠,从而在整理桌面的舒适度上优于DALL-E-Bot。

图片

图4 相较于现有方法,本文在整理餐桌时舒适度有较大提高

此外,我们还比较了四种不同场景下,整理后的物体位置与真实物体位置之间的差距。差距越小意味着结果越接近真实摆放情况。与其他方法相比,本文结果最接近真实例子。关于其他消融实验和基线方法的具体实现,请参考原文。

图片

图5 本论文与现有方法的整理结果比较

V总结与展望 

近年来,大语言模型和扩散模型的快速发展为机器人感知和操控领域带来了新的活力,如何有效地结合大语言模型和扩散模型至关重要。尽管现有方法主要使用扩散模型来生成目标图像,但仍有提升空间。本研究提出的结合大语言模型和扩散模型的方法,显著缩小了这一差距,使得生成符合功能性要求的目标位置成为可能。

未来的工作应当考虑物体可能发生的旋转,并探索如何提高算法在不同场景下的泛化能力。

VI 思考与讨论 

Q: Pormpt在LLM尤为重要,第一步的LLM的prompt具体是什么? 

A: 在整理左撇子餐桌的例子。第一阶段的向LLM提出功能性要求,用户输入Prompt和LLM回答是:

图片

图6 第一阶段的prompt

第二阶段是提示LLM 推断符合上述功能性要求下场景所需的物体类型和数量,删除多余的物品,并重新定位剩余的物体以生成预期的坐标级布局,与第一阶段中确定的功能要求相一致。用户输入prompt是:

图片

图7 第二阶段的prompt总览

由于篇幅原因,更具体的 Output format 和 In Context Example 的 prompt 请参考原论文。 

Q: 得分网络的具体网络架构是怎样的? 

A: 网络输入一个完全连接的图,其中第i个节点包含了物体的位置、大小和类别标签,经过两层MLP编码升维后,经过两次EdgeConv,能有效地捕捉图中节点间的关系,也就是更能理解物体的位姿和条件之间的关系,输出是每个节点上的得分。

图片

图8 得分网络架构

Q: 第二阶段训练后扩散模型只能生成数据集相关场景下的目标位置,如何让算法在其他未见过的场景中生成目标位置或图像,从而提高泛化到其他场景中的表现能力。

这篇关于从大模型中蒸馏功能性重排列任务的先验知识的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/659358

相关文章

Spring Boot 集成 Quartz并使用Cron 表达式实现定时任务

《SpringBoot集成Quartz并使用Cron表达式实现定时任务》本篇文章介绍了如何在SpringBoot中集成Quartz进行定时任务调度,并通过Cron表达式控制任务... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启动 Sprin

Linux之计划任务和调度命令at/cron详解

《Linux之计划任务和调度命令at/cron详解》:本文主要介绍Linux之计划任务和调度命令at/cron的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux计划任务和调度命令at/cron一、计划任务二、命令{at}介绍三、命令语法及功能 :at

SpringQuartz定时任务核心组件JobDetail与Trigger配置

《SpringQuartz定时任务核心组件JobDetail与Trigger配置》Spring框架与Quartz调度器的集成提供了强大而灵活的定时任务解决方案,本文主要介绍了SpringQuartz定... 目录引言一、Spring Quartz基础架构1.1 核心组件概述1.2 Spring集成优势二、J

Redis实现延迟任务的三种方法详解

《Redis实现延迟任务的三种方法详解》延迟任务(DelayedTask)是指在未来的某个时间点,执行相应的任务,本文为大家整理了三种常见的实现方法,感兴趣的小伙伴可以参考一下... 目录1.前言2.Redis如何实现延迟任务3.代码实现3.1. 过期键通知事件实现3.2. 使用ZSet实现延迟任务3.3

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Linux中的计划任务(crontab)使用方式

《Linux中的计划任务(crontab)使用方式》:本文主要介绍Linux中的计划任务(crontab)使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言1、linux的起源与发展2、什么是计划任务(crontab)二、crontab基础1、cro

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

如何使用Python实现一个简单的window任务管理器

《如何使用Python实现一个简单的window任务管理器》这篇文章主要为大家详细介绍了如何使用Python实现一个简单的window任务管理器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 任务管理器效果图完整代码import tkinter as tkfrom tkinter i