Low-Shot Part Segmentation for 3D Point Clouds via PretrainedImage-Language Models
通过预先训练的图像语言模型对三维点云进行小样本部件分割
图1. 我们提出了PartSLIP,这是一种利用预训练的图像语言模型进行三维点云部件分割的零样本/小样本方法。图中显示了文本提示和相应的语义分割结果(放大查看细节)。我们的方法还支持部件级的实例分割。更多结果见图5和图7。
摘要
在视觉和机器人领域,可通用的三维零件分割非常重要,但也具有挑战性。通过传统的监督方法来训练深度模型需要大规模的三维数据集,其中包括细粒度的部分注释,而这些注释的收集成本很高。本文通过利用预先训练好的图像语言模型GLIP,探索了一种对3D点云进行低照度分割的替代方法,该模型在开放词汇的2D检测上取得了卓越的性能。我们通过基于GLIP的点云渲染部分检测和一种新型的2D-3D标签提升算法,将丰富的知识从2D转移到3D。我们还利用多视角的三维先验和少量的提示调整来显著提高性能。对PartNet和PartNet-Mobility数据集的广泛评估表明,我们的方法能够实现出色的零样本的三维零件分割。我们的零样本版本不仅在很大程度上超过了现有的零样本方法,而且与完全监督的对应方法相比,也取得了极具竞争力的结果。此外,我们证明了我们的方法可以直接应用于iPhone扫描的点云,而不存在明显的领域差距。
1. 简介
人类的视觉感知可以将物体解析为不同的部分,并将其概括为未见过的物体,这对于了解其结构、语义、移动性和功能至关重要。三维部分分割在赋予机器这种能力方面起着关键作用,并促进了广泛的应用,如机器人操纵、AR/VR以及形状分析和合成[2, 31, 40, 70]。
最近的零件注释的三维形状数据集[41,68,73]促进了设计各种数据驱动的三维零件分割方法的进展[34, 45, 66, 74]。虽然标准的监督训练使这些方法取得了显著的效果,但它们往往在处理非分布式的测试形状(如未见过的类)时很困难。然而,与图像数据集相比,这些3D部件注释数据集的规模仍然小了好几个数量级,因为建立3D模型和注释细粒度的3D物体部件是很费力和耗时的。因此,提供足够的涵盖所有物体类别的训练数据是具有挑战性的。例如,最近的PartNet数据集[41]只包含24个物体类别,远远少于智能代理在现实世界中遇到的情况。
为了设计一个可通用的三维零件分割模块,最近的许多工作都集中在小样本的设置上,在训练中只假设每个类别的几个三维形状。他们设计了各种策略来学习更好的表征,并补充香草监督学习[33, 54, 55, 61, 81]。虽然它们显示出比原始管道的改进,但在这些模型所能做到的和下游应用所需要的之间仍有很大差距。可推广的三维零件分割问题还远远没有解决。另一个平行的工作重点是学习通用物体部件的概念,并将一个三维形状分解成一组(分层的)细粒度的部件[37, 65, 75]。然而,这些工作没有考虑零件的语义标签,在实际使用中可能会受到限制。
在本文中,我们试图通过利用预训练的图像语言模型来解决小样本(零样本和小样本)的三维零件分割问题,这是受其最近在小样本学习中的突出表现的启发。通过对大规模图像-文本对的预训练,图像语言模型[1,22,29,46,47,51,77]学习了广泛的视觉概念和知识,可以通过自然语言进行引用。由于其令人印象深刻的零距离拍摄能力,它们已经实现了各种2D/3D视觉和语言任务[10, 16, 20, 48, 50, 52, 78]。
如图1所示,我们的方法将三维点云和文本提示作为输入,并以零样本和小样本的方式生成三维语义和实例分割。具体来说,我们整合了GLIP[29]模型,该模型在二维视觉接地和检测任务上进行了预训练,有超过2700万个图像-文本对,具有识别物体部分的强大能力。为了将我们的三维输入与二维GLIP模型连接起来,我们为点云渲染多视角二维图像,然后将这些图像与包含感兴趣的部件名称的文本提示一起输入GLIP模型。然后,GLIP模型对每个二维视图的感兴趣部分进行检测,并以二维边界框的形式输出检测结果。由于将二维方框转换为三维是不容易的,我们提出了一个新颖的三维投票和分组模块,以融合多视图二维边界方框并为输入点云生成三维实例分割。另外,预训练的GLIP模型可能不能完全理解我们对零件的定义,只能通过文字提示。我们发现,一个有效的解决方案是用小样本分割的三维形状进行提示调谐。在提示调谐中,我们在固定预训练的GLIP模型参数的同时,为每个零件名称的语言嵌入学习一个偏移特征向量。此外,我们提出了一个多视图视觉特征聚合模块,以融合多个二维视图的信息,从而使GLIP模型对输入的三维形状有更好的全局理解,而不是从每个孤立的二维视图预测边界盒。
为了更好地了解各种方法的通用性及其在小样本环境下的表现,我们提出了一个基准PartNet-Ensembled(PartNetE),将两个现有的数据集PartNet[41]和PartNetMobility[68]结合起来。通过对PartNetE的广泛评估,我们表明,我们的方法能够实现出色的零样本三维零件分割。通过小样本的提示性调整,我们的方法不仅在很大程度上超过了现有的小样本方法,而且与完全监督的对应方法相比,也取得了极具竞争力的性能。我们还证明,我们的方法可以直接应用于iPhone扫描的点云,而没有明显的领域差距。综上所述,我们的贡献主要包括:
– 我们介绍了一种新型的三维零件分割方法,该方法利用预训练的图像语言模型,实现了出色的零样本和小样本性能。
– 我们提出了一个三维投票和分组模块,它有效地将多视角的二维边界框转换为三维语义和实例分割。
– 我们利用小样本的提示调整和多视图特征聚合来提高GLIP的检测性能。
– 我们提出了一个基准PartNetE,它有利于未来的低照度和文本驱动的三维零件分割工作。
2. 相关工作
2.1. 三维零件分割
三维零件分割涉及两个主要任务:语义分割和实例分割。大多数三维骨干网络[44, 45, 57, 66]能够通过预测每个几何基元(例如,点或体素)的语义标签进行语义分割。现有的基于学习的方法通过将各种分组[9, 15, 23, 30, 59, 63, 64, 76]或区域建议[17,71,74]策略纳入管道来解决实例分割问题。与使用每点部分标签的标准训练不同,一些工作利用了弱监督,如边界框[8,35]、语言参考游戏[26]或宜家手册[62]。[4,43]也没有关注单一物体,而是考虑了场景规模输入的部分分割。此外,与语义和实例分割这两个经典任务不同,另一个平行的工作线将一个三维形状分解为一组(分层的)细粒度的部分,但不考虑语义标签[37, 65, 75],这与我们的目标不同。最近,一些作品也提出要学习一个连续的隐性语义场[25, 82]。
2.2. 数据高效的三维分割
为了用小样本数据训练一个可通用的三维零件分割网络,许多现有的工作都集中在利用各种前提任务和辅助损失上[3, 12, 14, 53, 56]。此外,[13, 42]研究了三维零件的组成泛化。[61]对输入的形状进行变形,使其与少许的模板形状相一致。[54]通过投射3D形状和学习密集的多视图对应关系来利用2D对比学习。[7]利用分叉自动编码器对形状集合进行共同分割。另外,一些工作旨在通过利用原型学习[81]、强化学习[33]和数据增强[55]来学习更好的表示。此外,还有一系列研究标签有效的三维分割的工作[18, 32, 36, 69, 72, 79, 79, 80],假设一小部分训练数据是有注释的(例如,0.1%的点标签)。虽然这种设置在室内和自动驾驶场景中可能是有用的,但它与我们的目标不一致,因为在我们的设置中,训练形状的数量已经很有限。
2.3. 图像语言模型的三维学习
通过对大规模图像-文本对进行预训练,预训练的图像语言模型最近取得了很大的进展[1, 22, 29, 46, 47, 51, 77]。由于它们学到了丰富的视觉概念和令人印象深刻的零距离拍摄能力,它们已被应用于广泛的3D视觉任务,如3D头像的生成和操作[5,16,21],一般的3D形状生成[19,24,39,52],低拍摄的3D形状分类[78],神经辐射场[20,60],3D视觉基础[10,58],以及3D表示学习[50]。据我们所知,我们是第一批利用预训练的图像语言模型来帮助完成三维零件分割任务的人之一。
图2. 该图显示了我们的整体管道。我们建议的组件以橙色突出显示。
3.建议的方法:PartSLIP
3.1.概述:用GLIP进行三维物体分割
我们的目标是通过利用预先训练的图像语言模型(ILMs)来解决三维物体部分的语义和实例分割。在过去的几年里,出现了各种大规模的ILMs。为了实现可推广的三维物体部分分割,预计预训练的ILM能够生成区域级输出(如二维分割或二维边界框)并识别物体部分。在比较了几个已发布的预训练ILM(例如CLIP[46])后,我们发现GLIP[29]模型是一个不错的选择。GLIP[29]模型专注于二维视觉定位和检测任务。它将自由格式的文本描述和二维图像作为输入,并通过输出输入图像的多个二维边界框来定位文本的所有短语。通过对大规模的图像-文本对进行预训练(例如,27M的接地数据),GLIP模型学习了广泛的视觉概念(例如,物体部分),并实现了开放式词汇的二维检测。
图2显示了我们的整体管道,我们把三维点云作为输入。在这里,我们考虑的是来自解投影和融合多个RGB-D图像的点云,这在现实世界的应用中是一个常见的设置,会导致具有颜色和法线的密集点。为了将二维GLIP模型与我们的三维点云输入连接起来,我们从K个预定义的相机姿势来渲染点云。摄像机姿势在输入点云周围均匀分布,目的是覆盖形状的所有区域。由于我们假设输入的是密集的彩色点云1,我们通过简单的栅格化来渲染点云,而不引入明显的人工痕迹。渲染后的K图像与文本提示一起被分别送入预训练的GLIP模型。我们通过串联所有感兴趣的部分名称和物体类别来格式化文本提示。例如,对于一个椅子点云,文本提示可以是 “椅子的手臂、背部、座位、腿、车轮”。请注意,与传统的分割网络不同,我们的方法更灵活,可以在文本提示中包括任何部分的名称,而传统的分割网络仅限于一组封闭的部分类别。对于每个二维渲染的图像,GLIP模型预计会根据文本提示,为所有出现的零件实例预测多个边界框。然后,我们将所有来自K视图的边界框融合到三维中,为输入点云生成语义和实例分割(第3.2节)。
上述管道为三维零件分割引入了一种直观的零次拍摄方法,不需要任何三维训练。然而,其性能可能受到GLIP预测的限制。因此,我们提出了两个额外的组件,它们可以被纳入上述管道,以鼓励更准确的GLIP预测:(a)用少量的三维数据进行提示性调整,这使GLIP模型能够快速适应每个零件名称的含义(第3.3节);(b)多视图特征聚合,这使GLIP模型能够对输入的三维形状有一个更全面的视觉理解(第3.4节)。
3.2.检测到的二维边界框到三维点的分割
尽管二维像素和三维点之间的对应关系是可用的,但在将检测到的二维边界框转换为三维点分割时仍有两个主要挑战。首先,界线盒并不像点状标签那样精确。一个二维边界框可能也包括其他部分实例的点。另外,尽管每个边界框可能表示一个零件实例,但我们没有提供它们在不同视图中的关系。要确定哪几组二维边界框表示同一个三维零件实例并不是很简单的事情。
因此,我们提出了一个免学习模块,将GLIP预测转换为三维点分割,主要包括三个步骤。(a) 将输入的点云重叠成超级点的集合;(b) 通过三维投票为每个超级点分配一个语义标签;(c) 根据边界框覆盖的相似性将每个零件类别中的超级点分组为实例。
三维超级点的生成。
我们遵循文献[28]中的方法,将输入的点云过度为超级点的集合。具体来说,我们利用点的法线和颜色作为特征,用l0-cut追求算法解决一个广义的最小分割问题[27]。由于每个生成的超级点中的点具有相似的几何形状和外观,我们假定它们属于一个部分实例。在分配语义和实例标签时,超级点分区作为一个重要的三维先验。它还可以加快标签分配的速度,因为超级点的数量要比三维点的数量小几个数量级。
三维语义投票。
虽然单个边界框可能会覆盖其他部分的不相关点,但我们希望利用来自多个视图和超级点分区的信息来抵消不相关点的影响。具体来说,对于每一对超级点和零件类别,我们计算一个分数si,j,以衡量第i个超级点被零件类别j的任何边界框覆盖的比例:
其中,SPi表示第i个超级点,[-]是Iverson括号,VISk(p)表示三维点p在视图k中是否可见,BBk j是视图k中j类的预测边界盒列表,INSb(p)表示点p在视图k中的投影是否在边界盒b内。
请注意,对于每个视图,我们只考服务器托管网虑可见的点,因为边界框只包含每个部分实例的可见部分。VISk(p)和INSb(p)都可以根据点云栅格化的信息来计算。之后,对于每个超级点i,我们将得分最高的部分类别j作为其语义标签。
三维实例分组。
为了将超级点分组为部分实例,我们首先将每个超级点视为一个单独的实例,然后考虑是否将每对超级点合并。对于一对超级点SPu和SPv,我们在以下情况下将其合并。(a)它们具有相同的语义标签,(b)它们在三维空间中是相邻的,(c)对于每个边界盒来说,它们要么都被包括在内,要么都被排除在外。
具体来说,对于第二个标准,我们为输入点构建一个kNN图,以检查SPu和SPv在三维中是否相邻。对于第三条标准,我们考虑来自它们都可见的视图的界线盒。
其中VISk(SPu)表示超点SPu在视图k中是否能(部分)可见,BBk表示视图k的所有预测边界盒。然后我们构建两个n维向量Iu和Iv,描述SPu和SPv的边界盒覆盖。具体来说,Iu[i]的计算方法是:
其中B[i]表示B的第i个边界框,VISB[i](p)表示P在B[i]的相应视图中是否可见,INSB[i](p)表示P的投影是否在B[i]内。如果
小于预定义的阈值,我们认为它们满足第三个标准。
在检查了所有的超级点对之后,超级点被划分为多个连接组件,然后每个组件被认为是一个部分实例。我们发现,我们的基于超级点的模块在实践中运行良好。
3.3.用少量的3D数据进行提示性调校
在我们的方法中,我们利用自然语言来指代一个零件。然而,自然语言可以是灵活的。一个物体部件可以用多种方式命名(例如,水壶的壶嘴和壶口;椅子的脚轮和轮子),而且一些部件的定义可能是模糊的(见图1中的分配器)。因此,我们希望使用一些具有地面真实零件分割的三维形状对GLIP模型进行微调,以便GLIP模型能够迅速适应文本提示中零件名称的实际定义。
图3显示了GLIP模型的整体架构。它首先采用一个语言编码器和一个图像编码器,分别提取语言特征和多尺度视觉特征,然后将其输入视觉语言融合模块,以融合不同模式的信息。然后,检测头将语言识别的图像特征作为输入,并预测出二维边界框。在预训练期间,GLIP网络受到检测损失和图像-语言对齐损失的监督。
改变视觉模块或整个GLIP模型的参数是不可取的,因为我们的目标是只利用一些三维形状进行微调。相反,我们遵循GLIP[29]中介绍的提示调整策略,在冻结预训练的GLIP模型参数的同时,只对每个零件名称的语言嵌入进行微调。具体来说,我们对每个物体类别分别进行提示调谐。假设一个对象类别的输入文本包括l个标记,并将提取的语言特征(VL融合前)表示为fl,其中c是通道的数量。我们的目标是为fl学习偏移特征fo,并将它们的总和fl+fo反馈给剩余的GLIP管道。偏移特征fo由每个标记(部件名称)的常数向量组成,它可以被解释为语言嵌入空间中部件定义的局部调整。请注意,fo不是由网络预测的,而是在提示调整过程中作为可训练变量直接优化的。另外,在提示调谐之后,fo将被固定在每个对象类别上。
为了利用检测和对齐的损失进行优化,我们将带有地面实景实例分割的少数照片的3D形状转换成带有边界框的2D图像。具体来说,对于每个三维点云,我们从预定义的相机姿势渲染K个二维图像。为了生成相应的二维真实边界框,我们将每个部分实例从三维投影到二维。请注意,在投影之后,我们需要去除遮挡点(即每个视图中不可见的点)和噪声点(即可见但孤立于微小区域的点)以生成合理的边界盒。我们发现,通过只用一个或几个三维形状进行及时调整,GLIP模型可以迅速适应我们的零件定义,并可推广到其他实例。
3.4.多视图视觉特征聚合
GLIP模型对相机视图很敏感。例如,从一些不熟悉的角度拍摄的图像(如橱柜的后视图)可能是没有信息的,令人困惑的,使GLIP模型难以准确预测。然而,与常规的二维识别任务不同,我们的输入是一个三维点云,不同的二维视图之间存在着像素级的对应关系。因此,我们希望GLIP模型能够利用这些三维先验因素来进行更好的预测,而不是孤立地关注每个视图。
为了充分利用预训练的GLIP模型,我们提出了一个免训练的多视图视觉特征聚合模块,它可以被插入到原始的GLIP网络中,而不需要改变任何现有的网络权重。具体来说,特征聚合模块将K个特征图{fk}作为输入,其中m是特征图的空间分辨率,c是通道的数量。输入的特征图{fk}是由GLIP模块为输入点云的每个二维视图分别生成的。我们的特征聚合模块将其融合并生成K个相同形状的融合特征图{f 0k },然后用来替换原始特征图并输入GLIP模型的剩余层。
如图4所示,对于特征图fi的每个单元(u, v),我们在每个特征图fk中找到其对应的单元(u i→k , vi→k),并使用它们的加权平均值作为该单元的融合特征:
具体来说,我们将Pi(u, v)定义为在视图i中可见且其投影位于单元格(u, v)内的三维点的集合。然后我们选择视图k中3D点重叠最多的单元格作为对应的单元格:
并将权重定义为
请注意,如果Pi(u, v)中的所有三维点在一个视图k中不可见,那么特征图fk将不会对fi 0 [u, v]做出贡献。由于GLIP模型产生了多尺度的视觉特征,我们的聚合模块将每个尺度层次的特征分别融合。
对于融合哪些视觉特征,有多种选择(见图3)。一个直观的选择是在检测头之前融合最初的视觉特征,我们把这种选择称为后期融合。我们发现,晚期融合并没有改善甚至降低了原有的性能。这主要是因为最终的视觉特征包含了太多预测的二维边界盒的形状信息。直接对最终的视觉特征进行平均化在某种程度上可以被看作是对二维边界盒的平均化,这并没有意义。相反,我们选择在视觉-语言融合之前融合视觉特征(表示为早期融合)。由于文本提示还没有涉及,视觉特征主要描述输入形状的几何和外观。因此,将这些特征与三维先验融合在一起,可以导致对输入形状更全面的视觉理解。
4.实验
4.1.数据集和指标
为了评估各种方法的通用性及其在低照度环境下的表现,我们策划了一个名为PartNet-Ensembled(PartNetE)的集合数据集,它由现有数据集PartNet[41]和PartNet-Mobility[68]的形状组成。请注意,PartNet-Mobility包含更多的对象类别,但形状实例较少,而PartNet包含更多的形状实例,但对象类别较少。因此,我们利用PartNet-Mobility中的形状进行少量的学习和测试,并利用PartNet中的形状作为转移学习的额外大规模训练数据。因此,PartNetE的测试集包含1,906个形状,涵盖45个对象类别。此外,我们从这45个物体类别中的每一个中随机保留8个形状,用于少量的训练。此外,我们还可以利用PartNet中额外的28,367个形状进行训练,这些形状涵盖了45个对象类别中的17个,并且与测试集的部件注释一致。PartNet中的一服务器托管网些原始零件类别(例如椅子的 “后框竖条”)过于精细和模糊,无法评估无监督文本驱动的零件分割方法。因此,在构建PartNetE数据集时,我们选择了103个零件的子集,其中既包括常见的粗粒度零件(如椅子背和桌面),也包括细粒度零件(如轮子、把手、按钮、旋钮、开关、触摸板),这些零件在下游任务(如机器人操作)中可能很有用。关于数据集的更多细节,见补充资料。
我们遵循[41],利用类别mIoU和mAP(50% IoU阈值)分别作为语义和实例分割的指标。我们首先计算所有测试形状中每个部分类别的mIoU/mAP50,然后平均属于每个对象类别的部分mIoU/mAP50,以计算对象类别mIoU/mAP50。
4.2.实施细节
对于每个三维形状(即ShapeNet[6]网格),我们使用BlenderProc[11]渲染6幅分辨率为512512的RGB-D图像和分割掩码。我们将图像解投影到世界空间,以获得带有颜色、法线和地面真实部分标签的融合点云。融合后的点云被用作我们方法和基线方法的输入。
对于我们的方法,我们用Pytorch3D[49]将每个输入点云渲染成K=10的彩色图像。在少量的实验中,我们利用每个物体类别的8个点云(810个带二维边界框的渲染图像)进行提示调整。部分实例分组中的阈值根据经验设定为0.3。
4.3.与现有方法的比较
4.3.1 低照度设置和基准方法
我们考虑了三种低照度设置:(a) 零照度:不涉及三维训练/调整;(b) 少照度(458):在训练中只利用每个物体类别的8个形状;(c) 少照度与附加数据(458+28k):在训练中除了利用458的形状外,还利用来自PartNet[41]的28367个形状。这2800个形状涵盖了45个物体类别中的17个。在这里,最后一个设置(458+28k)描述了一个现实的设置,我们对一些常见的类别(在我们的例子中是17个类别)有大规模的部件注释,但对其他类别只有少数形状。我们的目的是研究17个类别的28k数据是否能帮助其他28个代表性不足的类别的零件分割。所有的设置都在同一个测试集上测试。
我们与PointNet++[44]和PointNext[45]进行语义分割的比较,与PointGroup[23]和SoftGroup[59]进行实例分割的比较。我们在PartNetE数据集上训练四种基线方法,将带法线的点云作为输入。对于语义分割,我们按照[41]的做法,对每个形状取样10,000个点作为网络输入。对于实例分割,我们对每个形状取样多达50,000个点。对于每一对基线和设置,我们训练一个单一的网络。
除了上面提到的四条基线,我们还与两种专门用于少数照片的三维语义分割的方法进行比较。ACD[12]和Prototype[81]。在ACD中,我们用CoACD[67]将每个三维形状的网格分解为近似的凸分量,并利用分解结果为PointNet++的管道增加一个辅助损失。在Prototype中,我们利用学习到的少数照片形状的点特征(通过PointNext骨干)为每个零件类别构建100个原型,然后用这些原型对测试形状的每个点进行分类。关于基线方法的更多细节,见补充说明。
4.3.2 评价结果
表1显示了语义分割的结果。我们的方法在一些常见的物体类别(如瓶子、椅子和桌子)上取得了令人印象深刻的零拍性能,但在某些类别(如水壶)上也表现不佳。这主要是由于预训练的GLIP模型可能不理解文本提示的含义(例如,水壶的水嘴)。在用8次拍摄的三维数据进行提示调整后,我们的方法达到了59.4%的mIoU,并超过了所有来自少数拍摄设置的基线方法,甚至超过了458+28k的设置。对于458+28k的设置,基线方法是用覆盖17个类别的额外28k形状来训练的。对于这些重叠的类别,它是一个完全监督的设置,但我们的8次拍摄版本可以实现非常有竞争力的整体mIoU(56.3%对58.5%)。请注意,28k的训练数据对基线归纳到非重叠类别的帮助有限。我们的方法在非重叠类别上的表现远远超过了所有基线。ACD和Prototype这两个少见的策略改善了原始骨干的性能,但与我们的方法相比仍有很大差距。我们的方法的实例结果请见图1,定性比较请见补充。
表2显示了实例分割的结果。我们观察到与语义分割类似的现象。我们的方法在0-shot设置中实现了18.0%的mAP50,在8-shot设置中实现了44.8%的mAP50,在458和458+28k设置中都优于所有基线方法。定性的例子见图5。
4.4.消融研究拟议的组件。
我们对提议的组件进行消融,结果如表3所示。
对于第一行,我们只利用预训练的GLIP模型。为了获得三维语义分割,我们将部分标签分配给边界框内的所有可见点。这些数字表明,这种策略不如我们提出的三维投票和分组模块(第二行)有效。此外,如果没有我们提出的模块,我们就不能得到三维实例分割。第二行和第三行比较了(8次)提示调谐的影响。我们观察到明显的改进,特别是在水壶类别上,因为零星的GLIP模型不能理解 “水口 “的含义,但在经过几次提示调整后,它就适应了这个定义。第二行和第四行比较了我们的多视图特征聚合模块。在不利用任何额外数据进行微调的情况下,我们利用多视角三维先验来帮助GLIP模型更好地理解输入的三维形状,从而提高性能。在整合所有三个模块后,我们达到了最终的良好性能(最后一行)。
输入点云的变化。
表4评估了我们的方法对输入点云的变化的稳健性。我们观察到,当输入点云是部分的,没有覆盖物体的所有区域时,我们的方法仍然表现良好(第二行)。另外,我们发现在去除ShapeNet模型的纹理并使用灰度图像生成输入点云后,我们的方法也能取得良好的性能,这表明纹理在识别物体部分时不太重要。然而,我们发现,当输入点云变得稀疏时,我们方法的性能可能会下降。一方面,稀疏的点云会导致点云的二维渲染出现较大的域差距。另一方面,稀疏性使得我们的超级点生成算法很难产生好的结果。既然如此,我们想指出,密集的点云在我们的日常生活中已经大部分可以使用了(见4.5节)。
提示性调整中的形状数量。
我们消减了用于提示调谐的形状的数量,结果显示在图6(左)。我们观察到,在某些类别中,只使用一个单一的形状进行提示性调谐已经可以大大改善预训练的GLIP模型的性能(例如,Kettle)。另外,在使用超过4个形状之后,增加形状的数量所带来的收益会减慢。我们还发现,对于具有更丰富的外观和结构变化的物体类别(如StorageFurniture),提示调谐的效果较差。
二维视图的数量。
在我们的主要实验中,我们为每个输入点云渲染K=10个二维视图。我们消减了K的值,结果显示在图6(右)。我们观察到,当K减少到5时,性能明显下降,而当使用更大的K时,也有轻微的增益。
早期融合与后期融合。
在第3.4节的最后一段,我们讨论了多视图特征聚合的两种选择:早期融合和后期融合。表5比较了这两种选择,并验证了晚期融合甚至会降低性能,而早期融合则有帮助。GLIP与CLIP:我们也考虑过使用其他预训练的视觉语言模型,如CLIP[46]。然而,我们发现预训练的CLIP模型不能识别细粒度的物体部分,并且难以生成区域级的输出。详见补充资料。
4.5.现实世界的演示
由于GLIP模型具有很强的通用性,我们的方法可以直接部署在现实世界中,没有明显的领域差距。如图7所示,我们使用配备了LiDAR传感器的iPhone 12 Pro Max来拍摄视频,并将融合后的点云反馈给我们的方法。我们观察到与我们的合成实验中类似的性能。请注意,现有的3D网络对输入格式是敏感的。例如,他们假设物体在每个类别的标准姿势中被规范化。另外,它们需要克服显著的领域差距,这使得它们很难直接部署在真实场景中。更多细节见补充说明。
5.讨论和限制
目前的管道利用GLIP模型的预测边界盒。我们注意到GLIPv2[77]具有二维分割能力,但他们的预训练模型在提交时还没有发布。我们承认,使用来自预训练模型的二维分割结果会更自然,它比边界框更准确。然而,我们想指出的是,即使从多视角的二维分割中得到三维实例分割仍然是不难的,我们提出的方法的所有组成部分仍然有用(经过必要的调整)。一个更大的问题是我们的方法不能处理物体的内部点。由于点云渲染和GLIP模型的多次推断,它还存在运行时间长的问题。因此,使用我们的方法来提炼二维VL模型的知识并训练三维地基模型是一个有希望的未来方向,这可能会导致更有效的推断。
S.补充材料
在这份补充材料中,我们首先介绍了所提出的数据集PartNet-Ensembled的更多细节(S.1节)。然后,我们展示了更多真实世界的演示结果(S.2节)和各种消融研究的可视化(S.3节)。我们还比较了CLIP和GLIP的物体部分识别(S.4节),并展示了我们的方法和基线方法之间的定性比较(S.5节)。最后,我们介绍了基线方法的实施细节(S.6节)和定量比较的完整表格(S.7节)。
S.1. PartNet-Ensembled数据集
表S6显示了提议的PartNetEnsembled(PartNetE)数据集的统计数据。少量照片和测试形状来自PartNet-Mobility[68],额外的训练形状来自PartNet[41]。这三组数据都有一致的零件定义。为了构建一个多样化的、清晰的、一致的三维物体部件数据集,我们从原始的PartNet和PartNet-Mobility注释中选择了100个物体部件的子集,并手动注释了三个额外的部件(即水壶嘴、厨房锅把手和鼠标线)。具体来说,我们过滤掉了极其精细的部件(例如,椅子的 “后框竖条”)、模糊的部件、注释不一致的部件以及原始数据集中很少见的部件。因此,在我们的PartNetE数据集中,每个物体类别包含1-6个部件,既包括常见的粗粒度部件(如椅子背和桌面),也包括细粒度部件(如轮子、把手、按钮、旋钮、开关、触摸板),这些部件在下游任务(如机器人操纵)中可能很有用。对于来自PartNet-Mobility的形状,它们有纹理,而对于来自PartNet的形状,它们没有。在使用额外的28000个训练形状时,不平衡的数据分布是一个关键问题。对于常见的类别(如表),我们可能有近10k个形状,但对于一些不重叠的类别,只有8个。我们相信我们的数据集可以使未来的低照度和文本驱动的三维零件注释工作受益,这些工作不依赖大规模的监督学习来推断零件的定义。
S.2. 实际演示
图S8显示了更多的例子,当我们的方法和基线方法被应用于由配备了LiDAR传感器的iPhone 12 Pro Max捕获的点云。具体来说,我们利用APP “polycam “来扫描日常物体并生成带有颜色的融合点云。我们使用MeshLab去除地面点并计算点法线。对于基线方法,我们随机抽取10,000个点作为输入。
如图所示,我们的方法可以直接泛化到iPhone扫描的点云中,而没有明显的领域差距,而基线方法表现不佳。对于 “45×8+28k “设置的PointNext[45](第三行),它使用了额外的28k训练数据,但仍然无法识别许多部件(例如,手推车轮子、垃圾桶脚踏板、饮水机的盖子和头、椅子轮子、手提箱轮子、储藏家具的抽屉和把手、水壶的把手)。少量拍摄的版本(第四行)表现更差,只能识别少数几个部件。
S.3. 消融研究的可视化
少数次提示调谐
图S9显示了少数次提示调谐前后的比较。预训练的GLIP模型(第一行)不能理解许多部件名称的含义。然而,在只用一个或几个分割的三维图形进行提示调整后(第二行),GLIP模型迅速适应了零件的定义,并能概括到未见过的实例。
多视图视觉特征聚合
图S10显示了有无多视图视觉特征聚合的比较。当没有多视图视觉特征聚合时(第一行),GLIP模型无法从一些不熟悉的摄像机视图中检测到零件。然而,在聚合了多视图的视觉特征后(第二行),GLIP模型可以全面地理解输入的三维形状,并对那些不熟悉的视图做出更准确的预测。
输入点云的变化
为了评估我们方法的稳健性,我们尝试了输入点云的多种变化(见表4)。图S11举例说明了用于生成输入点云的二维图像和反馈给FLIP模型的点云渲染。在最初的设置中,我们使用6张分辨率为512×512的RGB-D图像来生成融合点云,然后将其投影到10张分辨率为800×800的2D图像上。请注意,当点云是稀疏的,我们增加点的大小以减少点云渲染的伪影。请放大以找到点云渲染的差异。如表4所示,我们提出的方法对各种输入点云的变化是稳健的。
S.4. CLIP与GLIP
我们也考虑过使用其他预训练的视觉语言模型,比如CLIP[46],来帮助完成部分分割任务。然而,CLIP模型主要集中在图像分类任务上,不能直接产生区域级的输出(例如,二维分割掩码或边界框)。此外,如图S12所示,我们发现预训练的CLIP模型不能告诉一个物体是否有一个细粒度的部分。我们推测,CLIP模型是使用图像级别的监督进行预训练的,关于物体部分的监督信号较少。相比之下,GLIP模型是在二维检测和接地任务上进行预训练的,因此对细粒度的物体部分更加敏感。因此,GLIP模型更适合于我们的三维部分分割任务。
S.5. PartNetE上的定性比较
图S13显示了我们的方法和基线方法之间的定性比较。我们的几张照片版本(45×8)优于所有现有的几张照片方法,甚至比PointNext的 “45×8+28k “版本产生更好的结果,其中额外的28k 3D形状被用于训练。特别是,我们的方法善于检测小的物体部分(即车轮、灯泡、螺丝、把手、旋钮和按钮)。在没有任何三维训练的情况下,我们的零拍版本也取得了令人印象深刻的结果。
S.6. 基线的细节
我们在PartNetE数据集上训练基线方法。
PointNet++和PointNext
我们使用PointNext的官方代码库来训练PointNet++和PointNext在 “45×8 “和 “45×8+28k “设置下的语义分割,如4.3.1节所述。具体来说,我们调整了PointNext提供的配置2,并对每个形状随机抽样10,000个点作为网络输入。我们对两个基线都使用了148个类的分割头,包括103个部件类和45个背景类(每个物体类别一个)。对于PointNext,我们利用一个c32模型,将点的位置、法线和高度作为输入。对于PointNet++,该模型将点位置和法线作为输入。
PointGroup和SoftGroup
我们使用SoftGroup的官方代码库来训练PointGroup和SoftGroup在 “45×8 “和 “45×8+28k “两种设置下的实例分割,如4.3.1节所述。具体来说,训练包括两个阶段。1)训练一个用于语义和偏移预测的骨干模块;2)在冻结第一阶段的骨干模块的同时训练其余模块。我们对每个形状的50k个点进行随机采样,并利用点的位置和法线作为网络输入。
对于第一阶段,有104个类(包括103个零件类和一个背景类),而且各类中的点是非常不平衡的。为了避免损失被几个常见的零件类所支配,我们对交叉熵和偏移损失应用了基于频率的类权重,计算为点频率的反平方根[38]。我们还禁用了为场景尺度数据集设计的数据增强功能(如弹性变换)。体素化的体素比例被设置为100,骨干网络用预训练的检查点hais ckpt spconv2.pth初始化。我们训练骨干网络200个epochs,批次大小为16。我们从epoch 45开始应用余弦学习率衰减,初始学习率为0.001。
在第二阶段,我们训练其余的模块进行实例分割,同时冻结第一阶段训练的骨干网络。我们以4个批次的规模和0.004的初始学习率来训练网络。由于原始代码是在室内分割上进行评估的,我们根据经验调整了参数。具体来说,对于 “45×8 “的设置,分组半径、平均活跃度和分类分数阈值分别被设置为0.02、50和0.001。对于 “45×8+28k “设置,分组半径、平均活跃度和分类分数阈值分别设置为0.01、300和0.01。在 “45×8+28k “的设置中,在每个epoch中重复了50次少量的形状,以缓解不平衡的数据问题。PointGroup使用与SoftGroup类似的管道进行训练,只是使用第一级骨干的一发语义结果而不是softmax结果。
ACD
受[12]的启发,我们利用一个辅助性的自我监督任务来帮助少量学习。具体来说,我们使用CoACD[67]将每个三维形状的网格分解为近似的凸形分量,使用0.05的凹度阈值,这导致每个形状有18个分量的中值。利用分解结果,我们在PointNet++的管道中添加了一个辅助的对比损失,正如[12]。因此,网络在训练时既有对比性损失也有原始分割损失。辅助对比损失鼓励每个凸分量中的点具有相似的特征,而不同分量中的点具有不同的特征。为了有效地计算对比性损失,我们在计算成对的对比性损失时,从10k个点中随机抽取2.5k个。
原型
受[81]的启发,我们也利用原型学习来建立一个几张照片的基线。具体来说,我们使用学习到的360个少数照片形状的点特征(通过PointNext骨干系统,96 dim)来构建原型特征。对于每个零件类别,我们首先使用特征空间中最远的点取样(FPS)对多达100个点特征进行取样作为种子特征。然后,我们根据点特征与种子特征的距离,将其分成若干个集群。我们取每组的平均点特征作为原型特征,这导致每个零件类别有100个原型特征。对于每个测试形状,我们通过寻找最近的原型特征对每个点进行分类。注意,我们只考虑对象类别可能具有的部件的原型特征。
S.7. 定量比较的完整表格
表S7和S8是语义分割结果的完整表格(对应于表1)。表S9显示了实例分割结果的完整表格(对应于表2)。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
在Java中,每个线程都有自己的虚拟机栈。虚拟机栈是用于存储线程执行方法时的局部变量、方法参数、方法调用和返回的数据等信息的内存区域。每个方法在执行时都会在虚拟机栈上创建一个称为”栈帧”的数据结构,栈帧中包含了方法的局部变量表、操作数栈、动态链接等信息。 由于…