3D- vista:预训练的3D视觉和文本对齐Transformer

论文:https://arxiv.org/abs/2308.04352

代码: GitHub - 3d-vista/3D-VisTA: Official implementation of ICCV 2023 paper "3D-VisTA: Pre-trained Transformer for 3D Vision and Text Alignment"

摘要

三维视觉语言基础(3D- vl)是一个新兴领域,旨在将三维物理世界与自然语言联系起来,这对实现具身智能至关重要。目前的3D-VL模型严重依赖于复杂的模块、辅助损耗和优化技巧,这需要一个简单而统一的模型。在本文中,我们提出了3D- vista,一个预训练的3D视觉和文本对齐转换器,可以很容易地适应各种下游任务。3D-VisTA简单地利用self attention层进行单模态建模和多模态融合,而无需任何复杂的特定任务设计。为了进一步提高其在3D- vl任务上的性能,我们构建了ScanScribe,这是第一个用于3D- vl预训练的大规模3D场景文本对数据集。ScanScribe包含2,995个RGBD扫描,用于源自ScanNet和3R-Scan数据集的1,185个独特的室内场景,以及从现有3D-VL任务,模板和GPT-3生成的配对278K场景描述。3D-VisTA通过屏蔽语言/对象建模和场景文本匹配在ScanScribe上进行预训练。它在各种3D-VL任务上实现了最先进的结果,从视觉基础和密集的字幕到问题回答和情境推理。此外,3D-VisTA展示了卓越的数据效率,即使在下游任务微调期间注释有限也能获得强大的性能。

背景

1.

将三维物理世界与自然语言结合起来是实现具身人工智能的关键一步[18,26,37],智能体可以在现实世界中理解并进一步执行人类指令[5,29]。最近,3D视觉语言(3D- vl)任务引起了越来越多的关注[19],包括3D视觉基础(3D visual grounding)[8,1]、密集字幕(dense captioning)[11]、语法学习(grammar learning)[23]、问题回答(question answering)[3,56]和情境推理(situated reasoning [36]。 

然而,大多数为3D-VL开发的模型只关注这些3D-VL任务中的一个或两个,并采用特定的任务设计[7,3,36,35,10]。

例如,3D-SPS[35]和BUTD-DETR[27]通过关注VL特征,对每一层的物体进行检测,逐步发现目标物体。3DVG[55]、MVT[24]和ViL3DRel[10]通过在模型设计中明确地注入空间关系信息,改善了三维视觉基础。

3DJCG[7]通过共享的3D对象建议模块shared 3D object proposal module[16]和两个独立的任务头two separate task-specific heads[7],共同学习3D密集字幕和视觉接地(dense captioning and visual grounding)。

此外,训练这些模型通常需要手动指定辅助损耗(例如,3D物体检测/分类和文本分[35,24,7,3,36])或优化技巧(例如,知识蒸馏[4,53])。

缺乏一个简单而统一的方法会造成严重的开发通用3D-VL模型的差距

为了填补这一空白,我们引入了3D-VisTA,一个基于transformer的模型的3D视觉和文本对齐,可以易于适应各种下游任务。与之前的在设计复杂的任务特定模块的模型中,我们简单地使用一个普通的self attention transformer[46]对于单模态建模和多模态融合3 d-vista。作为一般做法进一步加强三维空间理解[10,55,7],我们明确的将成对的空间关系编码成为对象间的self attention权重用于3D对象建模。

2.

受NLP[15、41、42、6、52、31]、CV[22、17、21、25、38]和2D-VL[30、2、34、40]中大规模预训练成功的启发,我们提出在3D场景文本数据上预训练3D- vista,以期在3D- vl任务上获得更好的性能。为此,我们构建了ScanScribe,这是第一个用于3D- vl预训练的大规模3D场景文本对数据集。

我们在提议的ScanScribe数据集上预训练3D-VisTA。我们的预训练任务包括掩码语言建模、掩码对象建模和场景文本匹配。值得注意的是,类似的目标在2D-VL中被广泛采用,但在3D-VL领域却很少被探索。所提出的预训练过程有效地学习了三维点云和文本之间的对齐,从而消除了下游任务微调中对辅助损失和优化技巧的需要。

贡献

1)提出3D- vista,一个简单而统一的transformer,用于对齐3D视觉和文本。所建议的Transformer只是利用了自注意机制,没有任何复杂的特定于任务的设计。

2)构建了ScanScribe,这是一个大规模3D- vl预训练数据集,包含278K 3D场景文本对,用于1,185个独特室内场景的2,995个RGB-D扫描。

3)提出了一种基于掩码语言/对象建模和场景文本匹配的自监督预训练方案。它有效地学习了三维点云和文本对齐,进一步简化和提高了下游任务的微调。

4)对3D-VisTA进行微调,并在各种3D-VL任务上实现最先进的性能,从视觉基础和密集字幕到问题回答和情境推理。3D-VisTA还展示了卓越的数据效率,即使在有限的注释下也能获得强大的结果。

相关工作

3D Vision-language Learning 3D视觉语言学习

在这一新兴领域,Chen等人[8]和Achlioptas等人[1]同时引入了scanreferenceReferIt3D数据集,用于对自然语言基于3D对象属性和关系进行基准测试。除了3D视觉基础,Azuma等人[3]开发了一个名为ScanQA的3D问答数据集,该数据集需要一个模型来回答关于给定3D场景的物体及其关系的问题。最近,Ma等人[36]提出了一种称为SQA3D的情境推理任务,用于3D场景中的具体化场景理解。

针对这些基准[8,1,35,27,55,24,10,20,43]几个模型已经提出了。值得注意的是,3D-SPS[35]和BUTD-DETR[27]利用交叉注意机制和语言引导逐步发现目标对象3DVG[55]、MVT[24]和ViL3DRel[10]通过将空间关系信息明确地注入其模型来解决3D视觉接地问题。尽管这些工作在连接3D视觉和语言方面取得了令人印象深刻的成果,但它们仍然严重依赖于模型设计中的特定任务知识[55,24,10]和复杂的优化技术[10,27,35]。相比之下,我们的3D-VisTA通过一个简单的基于transformer的架构统一了视觉基础、问答和定位推理。训练3D-VisTA也很简单,不需要任何辅助损失或复杂的优化技术。3DVisTA与其他3D-VL模型在任务、辅助Loss、架构等方面的详细对比见表1。

Large-scale Pre-training 大规模预训练

近年来,大规模预训练已成为自然语言处理(NLP)、计算机视觉(CV)和2D视觉与语言(2D- vl)领域的基石。引入基于transformer的架构[47],特别是BERT[15]和GPT[41,42,6],已经导致了各种NLP任务的显着改进。这些模型的成功导致了更先进的预训练技术的发展,如XLNet[52]和RoBERTa[31]。这些模型在广泛的NLP任务上取得了最先进的性能,包括文本分类、问题回答和语言生成。CV中最成功的预训练方法是ImageNet[14]预训练,它已被用作广泛的下游任务(如目标检测和图像分割)的起点。最近,引入基于transformer的模型,如ViT[17]和Swin Transformer[32],已经导致各种CV任务的显着改进。

由于预训练技术,2D-VL领域也取得了重大进展。
特别是ViLBERT[34]和LXMERT[45]模型的引入,在视觉问答和图像字幕等任务上取得了最先进的性能。最近,CLIP的发展[40],ALIGN[50]和Flamingo[2]表明,对图像-文本对进行大规模预训练可以更好地进行跨模态理解,并以zero-shot 或few-shot的方式出现上下文学习

大规模预训练在3D-VL中却很少被探索。[7,9]探索了视觉基础和密集字幕的多任务学习,然后在每个任务上进一步微调他们的模型。由于缺乏大规模的预训练数据集,3D-VL预训练的探索可能会受到阻碍。因此,我们构建了ScanScribe,这是第一个用于3D- vl预训练的大规模3D场景文本对数据集。

 如表2所示,ScanScribe比现有的3D-VL数据集大得多,文本也更多样化。在ScanScribe上预训练3D-VisTA已经导致了3D-VL任务的显着改进,因此我们相信ScanScribe可以在未来推动3D-VL预训练的探索。

方法

3D-VisTA

如图2所示,3D-VisTA以一对场景点云和句子作为输入。首先通过文本编码模块对句子进行编码,然后通过场景编码模块对点云进行处理。然后通过多模态融合模块将文本和3D对象标记融合,以捕获3D对象和文本之间的对应关系。3D-VisTA使用自我监督学习进行预训练,可以很容易地对各种下游任务进行微调。

Text Encoding 文本编码

我们采用四层Transformer将句子S编码为文本标记{wcls,w1,w2,···,wM}序列,其中wcls为特殊分类标记([CLS]), M为句子长度。该文本编码模块由预训练BERT的前四层进行初始化[15]。?

Scene Encoding 场景编码

给定一个3D场景的点云,我们首先使用分割蒙版将场景分解成一包(bag)物体。
分割掩码既可以从ground truth中获得,也可以从实例分割模型中获得[16,28,44]。

1)对于每个对象,我们采样1024个点,并将其坐标归一化为单位球。

2)将目标点云输入PointNet++[39]获取其点特征和语义类。我们将点特征fi、嵌入语义类ci和位置li(即3D位置、长度、宽度、高度)组合为对象标记i的表示。其中Wc和Wl是附加的投影矩阵,将ci和li映射到与fi相同的维度↓

3)为了进一步提供对象的上下文表示,我们通过将对象token注入四层Transformer来捕获对象到对象的交互。受前人研究[55,24,10]的启发,我们将对象的成对空间关系明确编码到Transformer中(图2中的spatial Transformer)。

我们按照[10]定义了对象对i, j的成对空间特征↓

其中dij是欧几里得距离θh, θv是连接两个物体i,j中心的直线的水平线和对顶角

 两两空间特征S = [sij]∈RN×N×5用于调节Transformer中自关注层的关注权重:

 

其中w∈R5用于将空间特征映射到注意分数,σ为sigmoid函数。

Multi-modal Fusion 多模态融合

我们简单地将文本和3D对象标记连接起来(?如何连接?直接相加还是相乘?看代码),并将它们发送到l层变压器(图2中的统一变压器)进行多模态融合。可学习的type embeddings 被添加到token中,以区分文本和3D对象。对于[CLS]、文本标记和3D对象标记,我们将多模态融合模块的输出分别表示为{wcls,w1:M, o1:N}。
 

Self-supervised Pre-training 自监督预训练

为了以自监督的方式学习3D场景和文本对齐,我们通过以下代理任务对3D- vista进行3D场景-文本对的预训练:

Masked Language Modeling (MLM)

Masked Object Modeling (MOM)

Scene-Text Matching (STM)

Downstream Task Finetuning

预训练的3D-VisTA可以很容易地适应各种
3D-VL任务通过添加轻量级任务头。更具体地说,我们在以下任务上微调3D-VisTA↓

3D Visual Grounding

3D Dense Captioning

3D Question Answering

3D Situated Reasoning

ScanScribe

scanscribe是我们建立的一个大规模的三维场景文本对数据集

如表3所示,ScanScribe中三维场景文本对的构建包括两部分:

3D场景:

我们从ScanNet[12]和3R-Scan[48]收集室内场景的RGB-D扫描。为了增加这些场景中3D对象的多样性,每个场景中10%的对象实例根据类别随机替换为Objaverse 3D对象数据库[13]中的对象。对于每个ScanNet和3R-Scan对象类别,我们从Objaverse下载大约40个对象实例作为候选对象替换。因此,我们收集了1,185个室内场景的2,995个RGB-D扫描,其中包含56.1K唯一对象实例

 文本:

对于来自ScanNet的扫描,我们将基于ScanNet的现有数据集中的文本转换为场景描述,包括来自ScanQA[3]的问答对和来自Scan- reference[8]和refit3d[1]的引用表达式。对于来自3RScan的扫描,我们同时采用模板和GPT-3[6],基于它们的场景图注释生成场景描述[51]。

具体地说,对于每个对象,我们首先从场景图中提取所有的〈object, relation, neighbor〉三元组。然后我们使用模板“This is a object, a neighbor is relation to object” 来生成描述。

注意,在基于模板的生成中,我们只选择邻居少于7个的对象。

我们进一步探索使用GPT-3生成带有如下提示“object is relation to neighbor...(repeat until all the neighbors have been used). Where is object? or Summarize the scene.”最终,对收集到的3D场景生成278K的场景描述。

这个貌似就可以解决我LISA:通过大语言模型进行推理分割_Scabbards_的博客-CSDN博客中如何用gpt3生成/改写提示的疑问了

实验

实现细节

预训练运行30个epoch,批大小为128。

AdamW[33]优化器,β1 = 0.9, β2 = 0.98。学习率设为1e−4,预热3000步,余弦衰减。

预训练过程中,我们使用ground-truth segmentation masks生成对象级点云

微调过程中,我们使用ground-truth mask或Mask3d[44],这取决于任务设置。在scanreference数据集上,我们还合并了PointGroup[28]与之前的方法进行比较。

消融实验中,为了简单起见,我们在所有任务中都使用ground-truth masks

预训练和微调都在单个NVIDIA A100 80GB GPU上进行。

实验结果

1.即使从头开始训练,3D-VisTA也可以通过SOTA方法获得具有竞争力的性能。

2.ScanScribe上的预训练显着提高了3D-VisTA的性能。

3.预训练的3D-VisTA在性能上大大优于SOTA。

4.在有限注释的下游任务上微调3D-VisTA可以获得强大的结果。

 

消融实验

Transformer Depth

 

Pre-training Objectives

Pre-training Data

 

定性研究和附加结果

我们进行额外的研究,以更好地理解预训练是如何帮助的。

如图4所示,预训练提高了3D-VisTA在视觉基础上的空间理解能力,使其更符合人类对空间关系的先验观点和推理。当模型需要将目标对象与同一类的多个实例区分开来时,这非常有用。预训练还有助于更好地理解颜色和形状等视觉概念,以及回答问题和情境推理的情况。

 此外,预训练增强了长文本与3D场景对齐的能力,如图5所示,较长查询的改进幅度更大。

未来工作

 目前,3D- vista使用离线3D物体检测模块,这可能是进一步改进的瓶颈。在预训练阶段共同优化目标检测模块是一个有趣的未来方向。此外,对于大规模3D-VL预训练,ScanScribe的数据量仍然不足,因此,扩大预训练数据集和模型大小是进一步提高3D-VL学习的一个有希望的方向。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/96809.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jmeter参数化类型

1.参数在多个请求报文中出现,执行一次需要使用同一个参数--随机生成(随机变更) 2.参数在请求报文中出现,执行过程需要使用同一个参数(--固定参数) 3.参数从指定几个固定中随机获取一个 4.参数从本地文件中获取 5.参数在多个请求报文中出现,每…

C++笔记之左值与右值、右值引用

C笔记之左值与右值、右值引用 code review! 文章目录 C笔记之左值与右值、右值引用1.左值与右值2.右值引用——关于int&& r 10;3.右值引用——对比int&& r 10;和int& r 10;4.右值引用(rvalue reference)的概念 1.左值与右值 2.…

CNN卷积详解(三)

一、卷积层的计算 4 ∗ * ∗ 4的输入矩阵 I I I 和 3 ∗ * ∗ 3 的卷积核 K K K: 在步长(stride)为 1 时,输出的大小为 ( 4 − 3 1 ) ( 4 − 3 1) 计算公式: ● 输入图片矩阵 I I I 大小: w w w w ww ●…

i.MX6ULL开发板无法进入NFS挂载文件系统的解决办法

问题 使用NFS网络挂载文件系统后卡住无法进入系统。 解决办法 此处不详细讲述NFS安装流程 查看板卡挂载在/home/etc/rc.init下的自启动程序 进入到../../home/etc目录下,查看rc.init文件,首先从第一行排查,查看/home/etc/netcfg文件代码内容&…

【C++进阶】继承、多态的详解(多态篇)

【C进阶】继承、多态的详解(多态篇) 目录 【C进阶】继承、多态的详解(多态篇)多态的概念多态的定义及实现多态的构成条件(重点)虚函数虚函数的重写(覆盖、一种接口继承)C11 override…

qsort函数详解

大家好,我是苏貝,本篇博客带大家了解qsort函数,如果你觉得我写的不错的话,可以给我一个赞👍吗,感谢❤️ 文章目录 一. qsort函数参数详解1.数组首元素地址base2.数组的元素个数num和元素所占内存空间大小w…

java语言B/S架构云HIS医院信息系统源码【springboot】

医院云HIS全称为基于云计算的医疗卫生信息系统( Cloud- Based Healthcare Information System),是运用云计算、大数据、物联网等新兴信息技术,按照现代医疗卫生管理要求,在一定区域范围内以数字化形式提供医疗卫生行业数据收集、存储、传递、…

对前端PWA应用的部分理解和基础Demo

一、什么是PWA应用? 1、PWA简介 ​ 渐进式Web应用(Progressive Web App),简称PWA,是 Google 在 2015 年提出的一种使用web平台技术构建的应用程序,官方认为其核心在于Reliable(可靠的&#xf…

数据结构--最短路径 Floyd算法

数据结构–最短路径 Floyd算法 F l o y d 算法:求出每⼀对顶点之间的最短路径 \color{red}Floyd算法:求出每⼀对顶点之间的最短路径 Floyd算法:求出每⼀对顶点之间的最短路径 使⽤动态规划思想,将问题的求解分为多个阶段 对于n个顶…

python入门篇02- 注释,变量,数据类型,运算符及条件控制语句

目录 1. 前言:2. python基础使用-> 2.1 注释的使用---> 2.1.1 单行注释示例: ---> 2.1.2 多行注释 -> 2.2 变量---> 2.2.1 整数类型/浮点类型/字符串类型---> 2.2.2 变量的简单使用---> 2.2.3 查看类型与类型转换---> 2.2.4 变量命名语法规则--->2.…

【设计模式——学习笔记】23种设计模式——策略模式Strategy(原理讲解+应用场景介绍+案例介绍+Java代码实现)

文章目录 案例引入传统方案实现实现分析 介绍基本介绍登场角色 案例实现案例一类图实现 案例二类图实现问答 策略模式在JDK源码中的使用总结文章说明 案例引入 有各种鸭子,比如野鸭、北京鸭、水鸭等。 鸭子有各种行为,比如走路、叫、飞行等。不同鸭子的…

外网连接局域网的几种方式?快解析内网穿透安全便利吗?

外网连接局域网是一项网络连接中的关键技术,它能够让远程用户通过互联网访问内部局域网中的资源和服务。外网连接局域网为企业提供了更大的灵活性和便捷性,但也需要严格的安全措施来防止未经授权的访问。 外网连接局域网的几种方式 在将外网连接到局域…

【数据结构与算法】十大经典排序算法-归并排序

🌟个人博客:www.hellocode.top 🏰Java知识导航:Java-Navigate 🔥CSDN:HelloCode. 🌞知乎:HelloCode 🌴掘金:HelloCode ⚡如有问题,欢迎指正&#…

RocketMQ 5.0 架构解析:如何基于云原生架构支撑多元化场景

作者:隆基 本文将从技术角度了解 RocketMQ 的云原生架构,了解 RocketMQ 如何基于一套统一的架构支撑多元化的场景。 文章主要包含三部分内容。首先介绍 RocketMQ 5.0 的核心概念和架构概览;然后从集群角度出发,从宏观视角学习 R…

改进YOLO系列:4.添加ACmix注意力机制

添加ACmix注意力机制 1. ACmix注意力机制论文2. ACmix注意力机制原理3. ACmix注意力机制的配置3.1common.py配置3.2yolo.py配置3.3yaml文件配置1. ACmix注意力机制论文 论文题目:On the Integration of Self-Attention and Convolution 论文链接:On the Integration…

【ROS】话题通信--从理论介绍到模型实现(C++)

1.简单介绍 话题通信是ROS中使用频率最高的一种通信模式,话题通信是基于发布订阅模式的,也即:一个节点发布消息,另一个节点订阅该消息。像雷达、摄像头、GPS… 等等一些传感器数据的采集,也都是使用了话题通信,换言之…

相机的位姿在地固坐标系ECEF和ENU坐标系的转换

在地球科学和导航领域,通常使用地心地固坐标系(ECEF,Earth-Centered, Earth-Fixed)和东北天坐标系(ENU,East-North-Up)来描述地球上的位置和姿态。如下图所示: ​地心地固坐标ecef和…

Python标准库-追踪异常,定位问题-traceback

在日常的编程过程中,我们经常会遇到各种错误和异常。而当程序发生异常时,了解如何有效地追踪异常信息并定位问题,是每个开发者必备的技能之一。 Python 提供了一个强大的工具,称为 Traceback,它可以帮助我们跟踪异常的…

java 工程管理系统源码+项目说明+功能描述+前后端分离 + 二次开发 em

Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下: 首页 工作台:待办工作、消息通知、预警信息,点击可进入相应的列表 项目进度图表:选择(总体或单个)项目显…

Tomcat的部署及优化(多实例和动静分离)

目录 绪论 1、tomact 1.1 核心组件 1.2 什么是 servlet 1.3 什么是 JSP? 1.4 Tomcat 功能组件结构 1.5 Tomcat 请求过程 2、Tomcat 服务部署 2.1 tomcat自身优化: 2.2 内核优化 2.3 jvm 2.3.1 jvm配置 2.3.2 Tomcat配置JVM参数 2.3.3 jvm优化 3、tom…