ReferIt3D论文精度

发布于:2025-07-08 ⋅ 阅读:(14) ⋅ 点赞:(0)

Basic Information

Abstract

In this work we study the problem of using referential language to identify common objects in real-world 3D scenes. We focus on a challenging setup where the referred object belongs to a fine-grained object class and the underlying scene contains multiple object instances of that class. Due to the scarcity and unsuitability of existent 3D-oriented linguistic resources for this task, we first develop two large-scale and complementary visio-linguistic datasets: i) Sr3D, which contains 83.5K template-based utterances leveraging spatial relations among fine-grained object classes to localize a referred object in a scene, and ii) Nr3D which contains 41.5K natural, free-form, utterances collected by deploying a 2-player object reference game in 3D scenes. Using utterances of either datasets, human listeners can recognize the referred object with high (>86%, 92% resp.) accuracy. By tapping on this data, we develop novel neural listeners that can comprehend object-centric natural language and identify the referred object directly in a 3D scene. Our key technical contribution is designing an approach for combining linguistic and geometric information (in the form of 3D point clouds) and creating multi-modal (3D) neural listeners. We also show that architectures which promote object-to-object communication via graph neural networks outperform less context-aware alternatives, and that fine-grained object classification is a bottleneck for language-assisted 3D object identification.

在这项工作中,我们研究了使用指示性语言来识别真实世界3D场景中常见物体的问题。我们专注于一个具有挑战性的场景:被指代物体属于一个细粒度的对象类别,且该场景包含该类别的多个实例。由于现有的面向3D的语言资源在处理此任务时存在稀缺性和不适用性的问题,我们首先开发了两个大规模且互补的视觉语言数据集:i) Sr3D,包含8.35万条基于模板的话语,这些话语利用细粒度对象类别间的空间关系来定位场景中被指代的物体;ii) Nr3D,包含4.15万条自然的、自由形式的话语,这些话语是通过在3D场景中开展一个双人对象指代游戏收集而来的。使用这两个数据集中的任何一个,人类听者都能够以很高的准确率(分别为 >86% 和 92%)识别出被指代的物体。基于这些数据,我们开发了新颖的“神经监听器”,它能够理解以对象为中心的自然语言,并直接在3D场景中识别出被指代的物体。我们的关键技术贡献在于设计了一种方法,该方法能将语言信息与几何信息(以3D点云的形式)相结合,从而创建了多模态(3D)神经监听器。我们还证明了,通过图神经网络促进对象间通信的架构优于那些上下文感知能力较弱的替代方案,并且细粒度对象分类语言辅助3D对象识别任务中的一个瓶颈。

Current Issues, Challenges, Author’s Motivation, and Proposed Solution

在过去的十年里,连接语言和计算机视觉的研究取得了巨大进展 。这使得诸如视觉问答(VQA)和图像描述等任务变得流行 。这些技术通过语言增强了视觉内容的可访问性,比如在2D图像中定位语言所描述的物体。目前大多数研究集中在2D图像上,而2D图像只是我们三维现实世界的一个二维视图 。即使在具身AI(Embodied AI)的研究中,对细粒度3D对象的识别也未被明确地建模 。虽然有少量研究探索了3D视觉和自然语言的连接,例如从文本生成3D模型,但该领域的研究相对不足

在过去十年中,连接语言和视觉的进展重新点燃了人们对诸如视觉问答、图像描述以及句子与图像相似度匹配等任务的兴趣。近期的研究通过语言“锚定”增强了视觉内容的可访问性,在定位图像中由语言描述的视觉元素方面取得了显著成果。然而,这些工作大多侧重于开发更好的模型,将视觉与图像中的语言联系起来,而图像毕竟只表达了我们三维现实的二维视图。即使在具身AI中,大多数工作(例如,具身问答或具身视觉识别)也未明确地对细粒度的三维对象进行建模。然而,细粒度的三维理解对于更偏向三维的、基于视觉的具身任务至关重要,例如自主机器人代理需要执行的任务。

人类拥有惊人的能力来推理、描述和定位三维物体。随着时间的推移,我们已经发展出高效的沟通协议来用语言表达这些过程—— 例如,只要“放在主门旁边的桌子上的笔记本电脑”这句话传达了该物体的某个独特方面,人们就能识别出房间里被指代的对象。直接在三维空间中解决这样的指代问题——即不依赖于特定的摄像机视角——将使许多下游的机器人应用受益,包括具身问答、基于视觉和语言的导航、指令跟随以及场景中物体的操纵。尽管如此,开发数据集和方法,并使其具备能够让机器学习模型在此类三维指代任务上表现良好的特性,还远非易事;在这项工作中,我们将探讨如何解决这两个问题。

利用三维视觉理解来解决视觉和语言任务最近在视觉问答和视觉“锚定”中得到了探索。尽管如此,其焦点仍局限于合成数据集,最多也只是超越了多个二维视图,而没有实现真正的三维理解。一种替代方案是,一个更直接获得这种理解的方法是分析真实世界场景的点云数据点云携带了物体的完整几何和外观特征,并提供了比单个二维视图更大的空间上下文(在场景内)。这种灵活性使我们能够绕过摄像机视角依赖性(例如,当我们在语言上指代物体时,由于固定摄像机的原因,物体的某些部分被遮挡)

在本文中,我们研究当一个3D场景中存在同一细粒度对象类别的多个实例时,如何进行对象指代。在细粒度层面上,对对象类别的区分性理解至关重要,这可以通过结合外观理解和空间推理能力的模型来实现(例如,如果我们要在一张或多张餐椅中寻找唯一的办公椅,那么仅靠空间理解本身并非关键)。

  • 创建区分性的语言描述: 我们专注于设计一种数据收集策略,该策略同时涵盖基于空间和基于外观的识别。正如我们在实验中所展示的,对于通过自由形式的语言描述来进行3D视觉对象识别这一任务,此步骤的进展至关重要。我们的策略涉及话语的合成生成与人工生成,并具有以下特点:(i) 在每一个样本中,当语言描述目标3D对象时,场景里都存在该对象所属类别的多个实例;(ii) 对于人类生成的语言话语,我们明确要求测试者通过与同一对象类别的其他实例进行对比来描述目标对象。通过明确地、且只在同一细粒度类别的实例之间进行对比,所产生的话语是具有区分性的,即使这些话语是由不熟悉该环境的众包标注员说出的。图1展示了这方面的例子。

在这里插入图片描述

  • 开发3D神经监听器: 我们还设计了一种新颖的视觉语言图卷积网络,它通过在3D视觉场景中的对象之间建立通信,来根据给定的语言描述预测被指代的对象

我们的贡献可总结如下:

  1. 细粒度ReferIt3D任务:我们引入了一项基于语言识别特定3D对象的任务,该任务的完成需要以对象为中心的细粒度理解和多对象理解能力
  2. Nr3D和Sr3D数据集:我们贡献了一个新的数据集,其中分别包含名为Nr3D和Sr3D的自然语言描述和合成语言描述。针对Sr3D,我们提出了一种简单而有效的方法,用于在3D场景中构建基于模板且面向空间的对象指代语言。我们证明了,在自然语言数据(Nr3D 或 Scanrefer)的基础上再使用Sr3D进行训练,可以改进基于神经网络的处理流程
  3. ReferIt3DNet:我们通过设计一个名为 ReferIt3DNet 的新颖 视觉语言图神经网络,探索了理解根植于真实世界3D数据(包括语言和场景)的对象指代任务。

2D 高阶视觉与语言: 视觉与语言,有时也被称为视觉语义建模,已在多种2D任务中得到广泛研究。结合视觉与语义的早期方法包括零样本学习等任务,其中提供未见过类别的语言/未见过描述来形容它。类似的方法也已被开发用于建模图像-句子相似度,以实现根据句子对图像进行双向检索。近期,大规模2D视觉问答(VQA)数据集的开发催生了关于如何最好地结合问题和图像以进行回答的新方法。然而,这暴露了一个巨大的语言偏见问题:仅仅通过观察语言而完全不考虑视觉内容,答案的预测性能就已经很高。同样的情况也出现在图像描述生成等任务中。更多平衡的VQA基准测试缓解了其中一些偏见,并推动了更好的注意力机制和模块化网络等的发展。正如2D视觉与语言社区的例子所示,要正确建模3D视觉语言任务,需要在语言和以点云编码的3D视觉数据之间建立精心设计的连接。

2D ReferIt游戏与锚定视觉及语言: 已有数篇论文探索了使用指示性语言来连接图像区域以进行共指消解,在视频中生成指代表达,以及在诸如Flickr30k Entities和ActivityNet Entities等数据集中生成图像标题中的名词短语。作者们使用了指代表达,用于在真实世界环境中进行人机交互和对象定位,但他们使用的是2D图像,这与我们的工作形成对比。

视觉关系与空间推理: 在图像中检测视觉关系(例如<女人,提着,雨伞>)已经通过使用诸如VRD和近期更大规模的Visual Genome数据集等进行了探索。空间关系也已在Rosena等人的研究中得到描述。然而,这些作品中的关系并非以自由形式的语言描述,并且受限于固定的词汇表。此外,其目标也比在我们所设定的复杂3D环境中识别目标对象更为简单。

3D视觉与语言: 将3D视觉与自然语言相连接的研究相对不足。从生成的角度来看,有条件地从文本生成3D模型,可能在增强现实中很有用。在一项同期的工作中,Chen等人收集了自然语言来定位/发现场景中被指代的对象。与此相反,我们假设场景中分割出的对象实例是给定的,我们的重点是在同一细粒度类别中的多个实例中识别出被指代的对象

ReferIt 3D游戏: 我们收集的41,503条人类语言话语来自于两个人类玩家之间进行的指代游戏,其灵感来源于2D ReferIt游戏和ShapeGlot。这类游戏的基本编排可以追溯到维特根斯坦以及刘易斯。最近,这些方法已被采纳为上下文感知自然语言处理的基准。我们的论文超越了先前的工作,它通过在包含复杂(真实世界)3D场景中多个对象的参照任务中锚定语言行为,从而引发出组合式的、面向空间和颜色/形状的语言

Data

开发以指代为中心的3D数据

在真实的3D场景中,由语言驱动的常见对象消歧问题是新颖的,目前尚没有太多适合该任务的数据集。考虑到这一点,我们在本节中介绍一个由两部分组成的数据集:一个包含高质量合成(非人类)指代话语的数据集(Sr3D),以及一个包含自然(人类)指代话语的数据集(Nr3D)。Sr3D和Nr3D都构建于ScanNet之上,这是一个带有丰富语义标注的真实世界3D场景数据集,我们利用这些标注来创造具有对比性的交流情境

我们将一个“交流情境”定义为一个元组(场景, 目标, 干扰项)。其中,场景是ScanNet中707个独特室内场景之一;目标76个细粒度对象类别之一(例如,办公椅、扶手椅等);干扰项是与目标对象属于同一细粒度对象类别且位于同一场景中的实例。我们共生成了5878个独特的元组。

我们根据以下直观标准来筛选这76个对象类别:如果一个目标类别满足以下条件,则将其作为有效类别:(a) 它至少出现在5个场景中;(b) 每个场景包含多个干扰项,但数量不超过5个(这样做是为了避免细粒度(FG)分类问题变得过于困难,即使对人类标注员也是如此)。我们还加入了“至少有5个这样的场景”的约束,以促进泛化,并使问题不那么严重不平衡(所有已标注的ScanNet类别中,有15.26%只在一个场景中出现多次实例)。我们还排除了那些属于对象部件(例如,壁橱的门)或结构元素(例如,墙壁、地板、天花板)的类别,以确保我们处理的是常见对象。

创建基于模板的空间指代

我们引入了空间指代3D (Sr3D) 数据集,其中包含83,572条话语。每条话语都旨在通过定义目标对象与周围的锚点对象之间的关系,来唯一地指代ScanNet场景中的一个目标对象。锚点是ScanNet中100个对象类别中的任意对象实例,包括上述76个类别以及另外24个类别,这些类别:(a) 经常作为单例出现;(b) 是大型对象(例如,壁炉或电视)。然而,锚点永远不能与目标对象及其干扰项属于同一类别。

举个例子,在一个底层3D场景中,一个目标对象(例如桌子)可以通过其与一个锚点对象(例如门)的空间关系(例如最近的)而被完全地从其干扰项中区分开来。我们使用以下组合模板来合成具有区分性的Sr3D话语:

在这里插入图片描述

<目标类别> <空间关系> <锚点类别>

例如,“离门最近的桌子”。总的来说,Sr3D模板包含三个占位符。我们的目标是找到能够唯一地标识出场景中目标对象与其干扰项的组合。

我们定义了以下五种类型的对象间空间关系。

(i) 水平邻近性:此类型表示目标与场景中锚点的远近程度(图2,i)。它适用于物体在水平布局上的距离

(ii) 垂直邻近性:此类型表示目标位于锚点的上方或下方(图2,ii)

(iii) 中间关系:中间关系表示目标存在于两个锚点之间(图2,iii)

(iv) 客体中心关系:客体中心关系编码了目标相对于锚点内在自身朝向的位置信息(图2,iv)。为了定义上述朝向,我们需要知道:(a) 锚点的朝向包围盒以及 (b) 锚点是否具有内在的正面(例如,带靠背的椅子)或没有(例如,凳子)。为此,我们利用了ShapeNet模型和ScanNet对象之间的Scan2CAD[14]标注,这些标注提供了自由度的对齐信息;对于其他情况,我们结合使用了PartNet的标注[45]和手动标注

(v) 支撑关系:支撑关系表示目标被锚点支撑或正在支撑锚点(图2,v)

表1. Sr3D的统计数据。 第一行包含了按指代类型区分的不同交流情境的数量。第二行包含了合成生成的话语数量。请注意,Sr3D设置中的交流情境也考虑了空间邻近性和支撑关系。

关系 水平邻近性 垂直邻近性 支撑关系 客体中心关系 中间关系 全部
情境 34001 1589 747 1880 3569 41786
话语 68002 3178 1494 3760 7138 83572

讨论 我们生成Sr3D的协议虽然简单但很有效:

  • 在亚马逊土耳其机器人(AMT)上进行的一项用户研究显示,86.1%的情况下,用户在看到一个采样的话语后,都能猜对目标对象(2000个样本,p<0.001)。
  • 如第5节所示,Sr3D通过提供同质化的词汇表和特定的指代类型,以一种比Nr3D更受控的方式来研究指代问题。例如,它绕过了基于颜色或形状的指代,以及其他复杂的事实推理(例如,使用品牌名称或隐喻)。

Sr3D+:在上述数据集生成过程之外,我们还对数据集进行了扩充,增加了更多的话语。这些话语的目标对象来自于那些不符合“拥有超过一个干扰项”标准的数据。鉴于数据的合成特性,我们可以零成本地生成大量话语。我们在第5节中探索了Sr3D+对我们神经监听器最终性能的贡献。当我们把我们的方法与 Scanrefer 中的 唯一性 设置进行比较时,这组额外的数据会特别有用,因为在那种设置下,目标对象是场景中其所属类别的唯一实例。

3D场景中的自然指代

3D自然指代 (Nr3D) 数据集包含41,503条人类话语,这些话语是通过在AMT上部署一个在线指代游戏收集的。该游戏在两名玩家之间进行:一名“说话者”被要求描述一个指定的目标对象,一名“听话者”在听到说话者的描述后,被要求从干扰项中选择出被指代的对象。该游戏的结构设计使得当目标被成功选中时,“说话者”和“听话者”都会获得奖励,从而激励(玩家)在场景和普通受众的背景下,提供最具区分性的描述。

两名玩家都会看到同一个3D场景,其形式为一个经过减面的网格模型,并可以通过一个3D界面与之交互。为了消除任何摄像机视角的偏见,我们使用随机化的摄像机参数来初始化“说话者”和“听话者”的3D界面。考虑到所描绘的真实世界视觉内容的特殊性以及非专业玩家理解上的困难,我们使用包围盒(如果可用,则为有朝向的)来高亮显示目标和干扰项。我们为“说话者”和“听话者”分别使用红色和绿色来区分它们,两者之间没有区别。为了鼓励玩家探索场景并熟悉所有高亮显示的对象,我们还向他们提供了场景中预期会看到的包围盒总数。关于说话者界面的一个例子,我们请读者参考补充材料中的图1。

我们为每个目标对象从不同的玩家对中收集至少7条话语。在收集过程中,我们迭代遍历一个场景中同一细粒度对象类的所有实例(例如,补充材料图2中的所有6把沙发椅),从而为数据集提供了一种对称属性。在收集到的话语中,有一些来自于不成功的游戏结果;这些话语不被用于训练/学习目的。

讨论 在介绍我们的神经代理之前,我们先确定Nr3D的几个重要属性:

  • 在游戏化的数据收集中,(玩家)表现出色(92.2%),但“听话者”在更具挑战性的“困难”情境中犯了更多错误(90.0% vs. 94.7%, z = 17.5, p<0.001)。我们将包含超过2个干扰项的3D场景定义为“困难”情境(图5展示了“困难”与“简单”情境的例子)。
  • 在困难情境中,说话者自然会产生更长的话语来描述目标(大约12.5个词 vs 10.2个词, t=35, p<0.001)。在所有话语中(忽略标点符号),平均词数为11.4,中位数为10。

在这里插入图片描述

  • 不考虑情境的难度,我们发现了描述性话语的两个属性(图5):(a) 目标是在场景中可发现的,而不仅仅是在其干扰项中可发现。大多数话语(91.6%)会提及目标的细粒度类别或其近义词。这种自然产生的Nr3D属性使我们能够在房间中的所有对象中识别目标;(b) 目标的识别是视角无关的,因此不需要观察者将自己置于场景中面向某些特定对象的位置。尽管这个属性不如前一个那么突出(63%),但即使在存在视角依赖的情况下,说话者也被指示去引导听话者如何在场景中放置自己的视角。
  • 空间介词的使用是无处不在的(90.5%),这例证了为何Sr3D是具有现实意义的。在区分同一细粒度对象类别的实例时,对颜色和形状属性的指代使用得要少得多图3是一个关于不同类型语言使用情况的频率直方图。

在这里插入图片描述

在这里插入图片描述

Method

开发3D神经监听器

给定一个表示为 S ∈ R N × 6 S \in \mathbb{R}^{N \times 6} SRN×6 的N点RGB着色点云的3D场景 S S S,以及一个经过单词切分的话语 U = { u 1 , . . . , u t } U = \{u_1, ..., u_t\} U={u1,...,ut},我们希望构建一个能够识别被 指代对象 T ⊂ S T \subset S TS神经监听器。为此,我们假设能够访问场景 S S S的一个分区 S = { O 1 , . . . , O M } S = \{O_1, ..., O_M\} S={O1,...,OM},该分区代表了 S S S中的各个对象( O i O_i Oi)。虽然尝试直接在非结构化 S S S上进行识别(或更准确地说,在这种情况下是定位)是可行的,但实例定位问题(特别是对于细粒度类别)在很大程度上仍未解决。为了将我们的指代设置与3D实例分割问题解耦, 我们假设能够访问底层场景的实例级对象分割。这一选择使我们能够将3D指代问题转化为一个分类问题,该问题旨在从 M M M个分割好的3D实例中预测出被指代的目标

虽然上述假设消除了为 S S S每个对象定义边界的需要,但它仍然留下了以下问题:(i) 细粒度(FG)对象分类;(ii) 识别被指代对象的类别(根据话语);以及 (iii) 在 m m m个选项中选择被指代对象的原始问题。对于前两个任务,我们实验了一个利用两个辅助交叉熵损失 L f g L_{fg} Lfg, L t e x t L_{text} Ltext)的神经网络,旨在将这些内在方面与原始任务解耦。具体来说,这两个损失被添加到手头的主要任务的交叉熵损失 L r e f L_{ref} Lref)中,构成一个加权总和的最终损失

L t o t a l = α 1 L f g + α 2 L t e x t + L r e f L_{total} = \alpha_1 L_{fg} + \alpha_2 L_{text} + L_{ref} Ltotal=α1Lfg+α2Ltext+Lref

上下文场景理解

上述设计是对象感知的,但我们的底层任务也是面向场景的,并且严重依赖于场景中对象的配置。因此,提供一个能够明确了解其操作场景信息的神经监听器至关重要。我们为此探索的一个基准是创建一个PointNet++层级式场景特征(基于大量的点 S S S),我们将其与为每个对象 O i O_i Oi独立提取的每个视觉表示进行融合。虽然由此产生的表示同时具备了对象中心和场景感知的特性,但它没有考虑明确的对象间指代关系。一种更复杂的方法——也是我们ReferIt3DNet的一部分——是使用一种结构化和明确的方式来捕获对象间的交互,从而提供关于场景的信息。具体来说,我们使用一个动态图卷积网络(DGCN),该网络对场景中存在的对象的视觉特征进行操作(对象是图的节点)。该图的边在DGCN的每一层中,根据更新后的(每个节点的)视觉特征之间的欧几里得相似度动态计算。在我们的实验中,我们在节点之间使用k近邻图( k = 7 k=7 k=7,通过验证选择)。我们注意到, k = 7 k=7 k=7创建了一个相对稀疏的图(训练场景中对象数量的第90百分位数是52)。

在这里插入图片描述

语言的融合

一个重要的决定是如何在前述这样的流程中“融合”语言信号。尽管一把椅子在视觉上与一扇门不同,但我们的图网络应该检查这些对象之间的关系,特别是在指代需要这样做时(例如,“靠近门的那把椅子”)。为了促进这一行为,我们在将视觉(对象)特征传递给DGCN之,先将它们与语言特征(由RNN派生)进行融合。我们还探索了在DGCN之后添加语言特征以及在两个位置都添加的效果——这是表现最好的选项。我们流程的概览在图4中进行了说明。

Experiments

我们探索了不同的监听架构,并报告了监听准确率每个测试话语会获得一个二元得分(如果预测出正确对象为目标则为1,否则为0)。所有实验我们都使用官方的ScanNet数据集划分。

  1. 解耦方法:这是一个基线监听器,由一个文本分类器和一个(细粒度)对象分类器组成,两者分开训练。给定一个话语,我们使用文本分类器来预测被指代对象的类别。然后我们从 O i ∈ S O_i \in S OiS独立同分布地均匀选择(并输出)一个对象,该对象的分类结果与基于文本的预测相匹配。我们注意到,在Nr3D(Sr3D)上,这两个分类器的测试准确率分别为93.0% (100.0%) 和 64.7% (67.4%),这表明解决这两个任务的难度存在明显的不对称性
  2. 视觉+语言,无上下文 (V + L)受无上下文监听架构的启发,我们将一个RNN与每个对象 O i ∈ S O_i \in S OiS 的视觉特征进行“锚定”,并使用一个浅层分类器来预测每个 O i O_i Oi 是被指代对象的可能性。这个基线可以编码对象超出其细粒度类别之外的视觉属性,从而实现丰富的(无上下文的)区分(例如,“非常小的,或黄色的椅子”)。
  3. 视觉+语言+整体上下文 (V + L + C):与上述方法类似,但在解决指代任务时,它还将一个PointNet++场景特征与每个对象的视觉特征进行融合,以“锚定”RNN。这使得模型在处理时能够检视非结构化的上下文(PointNet++应用于未分割的场景点云)。
  4. 视觉+语言+图(结构化)上下文 (ReferIt3DNet):这是我们提出的监听器,它有三个变体,区别在于我们融合语言和视觉信息的方式

神经监听器:上述模型的比较呈现在表3中。我们观察到以下主要趋势:i) 使用视觉和语言的辅助分类损失可以提高性能;ii) 简化的语言(Sr3D)使识别更容易;iii) 场景上下文至关重要,但最重要的是我们如何融合上下文(例如,通过DGCN,或直接融合PointNet++)对性能有重要影响。正如预期的那样,更结构化的表示比一个基本的表示效果更好;iv) 我们在何处融合语言也很重要:ReferIt3DNet-A在DGCN之后融合,ReferIt3DNet-B在之前融合,而表现最好的(针对Nr3D的)模型则在两个地方都进行了融合。

在这里插入图片描述

图6 中展示的结果显示了神经监听器在具有挑战性的3D场景中理解和定位对象的能力。例如,右上角的例子是成功的,尽管话语很长。要在其他相似的垃圾桶中指代这一个特定的垃圾桶,需要空间推理和视觉3D理解能力。在第二行关于门和柜子的两个例子中也可以展示出类似的能力。最后,最后一行显示了我们模型的两个具有挑战性的失败案例。在左下角的例子中,话语错误地将听者放置在了房间中(椅子在9点钟方向,而不是3点钟方向)。右下角的例子尤其难以解决;场景几乎对称,并且缺乏视觉特征,使得在椅子之间进行区分变得困难。

在这里插入图片描述

结合Nr3D和Sr3D:在表2中,我们观察到结合这两个数据集如何为性能带来一致的提升。这证明了将一个合成生成的数据集添加到一个人类数据集中的贡献。当我们将Sr3D与ScanRefer[18]数据结合时,我们也得到了类似的结果(见表4)。我们遵循[17] 中的实现进行了这些实验。回到表2,结果显示我们的神经监听器在“简单”案例与“困难”案例中的表现有明显差距。这是符合预期的,并巩固了这样一种理解:当场景中存在多个干扰项时,在有区分度地辨别对象方面还需要做更多的工作。另一个重要发现是,视角无关的话语比视角相关的话语更容易解决。这并不奇怪,因为网络自然需要做更多的工作来理解与相对于另一个对象观察场景相关的细微差别

在这里插入图片描述

Conclusion

直接在3D环境中对3D对象进行语言辅助的对象消歧是一项新颖但极具挑战性的任务。当尝试在同一细粒度对象类别的多个实例之间进行区分时,这一点尤其突出。除了该问题本身的内在难度之外,还存在着合适数据集稀缺的问题。创建相关的视觉语言数据来让我们研究此问题,对于推动3D深度学习的发展至关重要,因为与2D视觉学习类似,它是一种数据密集型的方法。虽然我们的神经监听器是颇有前景的第一步,但在达到人类水平的性能和泛化能力之前,仍有更多的研究工作要做

总而言之,本文:( a ) 介绍了在真实世界场景中进行细粒度多实例3D对象识别的问题;( b ) 贡献了两个相关的公开数据集;以及 ( c ) 探索了一系列用于解决该指代任务的合理神经架构

Limitations and Direction For Improvment

1. 对预分割对象的强依赖 (Dependence on Pre-segmented Objects)

  • 局限性: 这是该论文最核心的局限。模型处理的起点不是原始的、完整的场景点云,而是假设场景已经被完美地分割成了M个独立的对象实例 。作者明确提到,这样做是为了“将我们的指代设置与3D实例分割问题解耦” 。但这在现实世界的机器人或AR应用中是不现实的,因为感知(分割)和推理(指代)是紧密相连的。一个真实的系统必须自己从原始传感器数据中找出物体。
  • 改进方向: 构建端到端的联合模型。将3D实例分割网络(如VoteNet, SPVCNN等)与ReferIt3DNet这样的指代推理模块结合起来,形成一个可以端到端训练的单一模型。这个模型直接输入整个场景的点云和语言指令,同时输出目标的分割掩码(mask)和类别。这将更接近真实应用,但挑战在于如何处理分割网络可能产生的噪声、漏检或错误分割。

2. 语言理解的深度有限 (Limited Depth of Language Understanding)

  • 局限性: 模型使用了相对简单的单向LSTM来编码语言 。虽然有效,但对于复杂语法、长距离依赖、隐含的常识或模糊的描述,LSTM的能力有限。补充材料甚至提到,使用预训练的GloVe词向量并没有带来显著性能提升 ,这可能暗示模型结构不足以利用更丰富的语义信息。从论文的失败案例中也可以看到,模型难以理解“在9点钟方向的椅子”这类更抽象的空间描述 。
  • 改进方向: 引入大型语言模型 (LLMs)。用一个强大的预训练语言模型(如BERT、T5的编码器部分,甚至是更强大的LLaMA、GPT系列模型)替换现有的RNN编码器。LLMs能够带来更深刻的语言理解能力和一定的世界知识,可能更好地处理复杂的空间关系和功能性描述(如“可以用来放书的那个架子”)。挑战在于如何高效地将这些大型模型与3D视觉特征进行跨模态对齐和融合。

3. 静态场景的假设 (Assumption of Static Scenes)

  • 局限性: 整个方法和数据集都是基于静态的3D扫描场景 。模型处理的是一个时间快照,无法理解动态变化、物体交互或智能体的自我运动。论文也提到,解决视角相关(view-dependent)的话语比解决视角无关的更困难 ,这暗示了动态视角和时间的重要性。
  • 改进方向: 引入时间维度,进行4D指代。将研究从静态的3D场景扩展到动态的4D(3D+时间)数据,例如连续的3D扫描序列或视频流。这需要模型具备时序建模能力,例如使用时间图网络(Temporal Graph Network)或Transformer来推理对象的状态变化、运动轨迹和交互历史,从而理解“刚刚被移动过的那把椅子”这类指令。

4. 数据收集中的潜在偏见 (Potential Bias in Data Collection)

  • 局限性:
    • Sr3D 使用的是固定的模板来生成话语 ,这使得语言模式单一,缺乏自然语言的多样性和模糊性。
    • Nr3D 在收集数据时,为“说话者”用不同颜色的框高亮了目标和干扰项 。这虽然简化了标注者的任务,但也引入了偏见。在现实中,用户描述物体时,并不会有这种“上帝视角”的提示,他们需要自己组织语言来区分物体。
  • 改进方向:
    • 更自然的合成数据:利用LLMs来对Sr3D中的模板进行释义(paraphrase)或直接生成更多样化的合成描述,摆脱模板的束缚。
    • 更真实的众包流程:在未来的数据收集中,不对“说话者”提供高亮提示,迫使他们产生更具信息量和区分度的自然语言,从而得到更困难但也更贴近现实的数据集。

Appendix

Appendix1:ReferIt3D完整流程总结

第一部分:全流程详解

我们有一个机器人管家,它需要理解我们的指令来操作家里的物品。

场景 (Scene)
在我们的客厅里,有一个3D点云扫描数据。这个场景里有:

  • 两把椅子:一把是红色的扶手椅,一把是蓝色的扶手椅。它们属于同一个细粒度类别:“扶手椅”。
  • 一张桌子:它是一个“锚点”对象。
  • 其他物品:一盏灯、一个沙发等。

任务 (Task)
我们对机器人说出一句话(Utterance):“请把那把靠近桌子的蓝色扶手椅拿过来。

机器人的“大脑”,也就是这篇论文提出的ReferIt3DNet,需要准确地识别出我们指的是蓝色的那把扶手椅,而不是红色的那把。

下面是ReferIt3DNet的流程拆解:

预处理阶段:场景分割 (Assumption)
在模型开始工作前,论文做一个关键的假设:整个场景的点云已经被预先处理好,分割成了M个独立的对象实例 。

  • 输入:整个客厅的巨大点云文件。
  • 输出:一个对象列表,比如 [红扶手椅的点云, 蓝扶手椅的点云, 桌子的点云, 灯的点云, ...]. 假设我们场景里共有M=10个对象。

模型处理流程 (ReferIt3DNet Pipeline)

第1步:分别理解每个“看”到的物体 (Visual Encoding)
模型首先需要理解场景中每个物体的样子。

  • 输入:M=10个对象的点云列表。
  • 操作:它使用一个共享的 PointNet++ 网络,像一个“视觉专家”,依次处理每个对象的点云数据(包含xyz坐标和RGB颜色) 。
  • 输出:为每个对象生成一个浓缩的视觉特征向量(Visual Feature Vector)。这个向量可以理解为模型对这个物体“长什么样”的数字描述。例如,蓝扶手椅的向量会包含关于“蓝色”、“有扶手”、“椅子形状”等信息。
  • 细节:我们现在得到了10个视觉特征向量,每个向量代表一个物体。

第2步:理解“听”到的话 (Language Encoding)
模型需要理解我们说的话到底是什么意思。

  • 输入:文本指令 “the blue armchair close to the table.”
  • 操作:它使用一个循环神经网络 RNN (比如GRU),像一个“语言专家”,来处理这个句子 。
  • 输出:生成一个单一的语言特征向量(Language Feature Vector),这个向量是整个句子意思的数字表示,浓缩了“蓝色”、“扶手椅”、“靠近”、“桌子”这些核心概念。

第3步:进行初步“联想”与融合 (Feature Fusion)
在进行复杂的推理之前,模型需要将“看到”的和“听到”的初步关联起来。

  • 输入:10个视觉特征向量 和 1个语言特征向量。
  • 操作:模型将语言特征向量复制10份,然后分别与10个视觉特征向量进行拼接(concatenate)。
  • 输出:10个融合后的特征向量。现在,每个物体的表示不仅包含它自己的样子,还带上了我们的指令信息。可以想象成给每个物体贴上了一个“便利贴”,上面写着我们的指令,让它们“思考”一下自己和指令的关系。

第4步:进行上下文推理(核心步骤:DGCN)
这是整个方法最核心、最创新的部分。模型需要像人一样,在物体之间进行比较和推理。

  • 输入:10个融合了语言信息的特征向量。
  • 操作
    1. 构建关系图 (Build Graph):模型将这10个对象看作图中的10个节点。然后,它根据对象特征的相似度来动态地建立节点间的连接(边)。比如,红扶手椅和蓝扶手椅因为都是“扶手椅”,特征相似,它们之间的连接就会很强 。
    2. 信息传递 (Message Passing)动态图卷积网络 (DGCN) 开始工作。它在图的连接上传递信息。这使得每个对象能够“看到”它的邻居,并根据邻居的信息更新自己的理解。例如,蓝扶手椅“知道”了旁边有个红扶手椅,也“知道”了指令是“蓝色”,它就能推理出自己比红扶手椅更符合要求。它还能“看到”桌子,并结合指令中的“靠近桌子”,进一步确认自己的可能性。这个过程就是上下文推理 (Contextual Reasoning)
  • 输出:10个经过了上下文推理后、更新过的最终特征向量。每个向量现在不仅包含了物体自身信息、指令信息,还包含了它与场景中其他物体对比后的推理信息。

第5步:最终决策 (Final Prediction)

  • 输入:10个最终的、包含丰富上下文信息的特征向量。
  • 操作:一个简单的全连接网络 (MLP分类器) 依次处理这10个向量 。
  • 输出:为每个对象输出一个最终得分(0到1之间),代表该对象是被指代目标的概率。
  • 结果:理想情况下,蓝色的扶手椅会得到最高的得分(比如0.95),而红色的扶手椅得分会很低(比如0.03),桌子和其他物体的得分接近于0。模型最终选择得分最高的那个,任务完成!

辅助任务 (Auxiliary Tasks):在训练过程中,模型还会做两个“副业”来帮助主业做得更好 :

  1. 视觉分类:仅用视觉特征向量去预测每个物体的类别(“椅子”、“桌子”…)。
  2. 文本分类:仅用语言特征向量去预测话语中提到的对象类别(“椅子”)。
    这两个“副业”能迫使视觉和语言编码器学习到更准确、更有用的特征,从而辅助主任务。
第二部分:PyTorch伪代码
import torch
import torch.nn as nn

# 假设已经定义好了下面的模块
# from models import PointNetEncoder, RNNEncoder, DynamicGraphConvNet, MLP

class ReferIt3DNet(nn.Module):
    def __init__(self, obj_classes, text_vocab_size, D_vis=256, D_lang=256, D_fused=512):
        """
        初始化模型的各个组件
        D_vis: 视觉特征维度
        D_lang: 语言特征维度
        D_fused: 融合后特征维度
        """
        super().__init__()

        # --- 1. 视觉和语言编码器 ---
        # 视觉编码器,处理每个对象的点云,是共享的 
        self.visual_encoder = PointNetEncoder(output_dim=D_vis)
        
        # 语言编码器,处理整个句子 
        self.language_encoder = RNNEncoder(vocab_size=text_vocab_size, output_dim=D_lang)

        # --- 2. 核心组件:图网络和分类器 ---
        # 动态图卷积网络,用于上下文推理 
        self.dgcn = DynamicGraphConvNet(input_dim=D_fused, output_dim=D_fused)
        
        # 主任务分类器:预测哪个是目标对象 
        self.ref_classifier = MLP(input_dim=D_fused, output_dim=1)
        
        # --- 3. 辅助任务分类器  ---
        # 辅助任务1:预测每个对象的类别(细粒度分类)
        self.fg_class_classifier = MLP(input_dim=D_vis, output_dim=obj_classes)
        
        # 辅助任务2:从文本预测对象类别
        self.text_class_classifier = MLP(input_dim=D_lang, output_dim=obj_classes)
        
        # 损失函数
        self.ref_loss_fn = nn.CrossEntropyLoss()
        self.fg_loss_fn = nn.CrossEntropyLoss()
        self.text_loss_fn = nn.CrossEntropyLoss()


    def forward(self, scene_objects, language_utterance, target_labels, obj_class_labels, text_class_label):
        """
        模型的前向传播完整流程

        输入 (Inputs):
        - scene_objects (list of Tensors): 一个列表,包含场景中M个对象的点云。
          - 数据结构: [obj1_tensor, obj2_tensor, ..., objM_tensor]
          - 每个Tensor的维度 (Shape): (N_points, 6),N_points是该对象的点数,6代表(x,y,z,R,G,B)
        - language_utterance (Tensor): 经过tokenize和padding的语言指令。
          - 维度 (Shape): (L_sent),L_sent是句子长度。
        - target_labels (Tensor): 主任务的标签,指明哪个对象是目标。
          - 维度 (Shape): (1),值为0到M-1之间的整数。
        - obj_class_labels (Tensor): 辅助任务1的标签,每个对象的类别。
          - 维度 (Shape): (M),每个值是类别ID。
        - text_class_label (Tensor): 辅助任务2的标签,话语中提到的对象类别。
          - 维度 (Shape): (1),值为类别ID。

        *注:为了简化,这里展示的是单个样本的处理流程。在实际中,会有一个Batch维度B。*
        """

        # --- 步骤1: 视觉编码 ---
        # 逐个处理每个对象的点云,并将特征向量收集起来
        # 输入: M个 (N_points, 6) 的点云
        visual_features_list = [self.visual_encoder(obj_pc) for obj_pc in scene_objects]
        # 将列表堆叠成一个Tensor
        visual_features = torch.stack(visual_features_list, dim=0)
        # 输出 visual_features -> Shape: (M, D_vis),M是对象数量, D_vis是视觉特征维度

        # --- 步骤2: 语言编码 ---
        # 输入: (L_sent) 的句子
        language_feature = self.language_encoder(language_utterance)
        # 输出 language_feature -> Shape: (D_lang),D_lang是语言特征维度

        # --- 步骤3: 辅助任务计算 (在特征融合前进行) --- 
        # 辅助任务1:细粒度对象分类
        # 输入: (M, D_vis)
        fg_class_logits = self.fg_class_classifier(visual_features) # Shape: (M, obj_classes)
        loss_fg = self.fg_loss_fn(fg_class_logits, obj_class_labels)
        
        # 辅助任务2:文本中引用的对象分类
        # 输入: (D_lang)
        text_class_logits = self.text_class_classifier(language_feature.unsqueeze(0)) # Shape: (1, obj_classes)
        loss_text = self.text_loss_fn(text_class_logits, text_class_label)
        
        # --- 步骤4: 特征融合 (为DGCN做准备) ---
        # 论文探讨了三种融合策略(前、后、都融合),这里展示最有效的“都融合”策略中的“前融合”部分 
        # 将语言特征扩展,以匹配视觉特征的数量
        # 输入: visual_features (M, D_vis), language_feature (D_lang)
        lang_expanded = language_feature.unsqueeze(0).repeat(visual_features.size(0), 1) # Shape: (M, D_lang)
        
        # 沿特征维度拼接
        fused_features_before_dgcn = torch.cat([visual_features, lang_expanded], dim=1)
        # 输出 fused_features_before_dgcn -> Shape: (M, D_vis + D_lang) -> (M, D_fused)

        # --- 步骤5: 上下文推理 (DGCN) ---
        # 输入: (M, D_fused)
        contextualized_features = self.dgcn(fused_features_before_dgcn)
        # 输出 contextualized_features -> Shape: (M, D_fused)
        # 这里的特征已经包含了对象间相互比较和推理后的信息

        # --- 步骤6: 最终决策与主任务计算 ---
        # 输入: (M, D_fused)
        # MLP分类器为每个对象打分
        final_scores = self.ref_classifier(contextualized_features).squeeze(-1) # Shape: (M)
        
        # 计算主任务的交叉熵损失
        # CrossEntropyLoss需要 (N, C) 和 (N) 的输入,这里 M=C,我们给它 (1, M) 和 (1)
        loss_ref = self.ref_loss_fn(final_scores.unsqueeze(0), target_labels)

        # --- 步骤7: 计算总损失 ---
        # 论文中提到的加权总和 
        alpha1, alpha2 = 0.5, 0.5 # 权重系数,可调
        total_loss = loss_ref + alpha1 * loss_fg + alpha2 * loss_text
        
        # --- 输出 (Outputs) ---
        return {
            "scores": torch.softmax(final_scores, dim=0), # 返回每个对象是目标的概率, Shape: (M)
            "total_loss": total_loss,
            "ref_loss": loss_ref,
            "fg_loss": loss_fg,
            "text_loss": loss_text
        }

网站公告

今日签到

点亮在社区的每一天
去签到