3D分割新范式!浙大开源Reasoning3D:通过大视觉语言模型搞定3D部件分割

本文主要是介绍3D分割新范式!浙大开源Reasoning3D:通过大视觉语言模型搞定3D部件分割,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章链接:https://arxiv.org/pdf/2405.19326

项目链接:http://tianrun-chen.github.io/Reason3D/

今天和大家分享的是一项新任务:Zero-Shot 3D 推理分割,用于对象的部件搜索和定位。这是一种超越了以往类别特定的3D语义分割、3D实例分割和开放词汇3D分割的全新3D分割模式。本文设计了一种简单的baseline方法——Reasoning3D,具有理解和执行复杂命令的能力,能够对3D网格的特定部分进行细粒度的分割,同时具备上下文意识和推理答案以实现交互式分割。

具体而言,Reasoning3D利用了一个预训练的2D分割网络,并由大语言模型(LLMs)驱动,以Zero-Shot的方式解释用户输入的queries。先前的研究表明,大规模预训练赋予基础模型先验的世界知识,使其能够理解复杂命令,研究者们可以利用这一能力在有限的3D数据集上实现“分割任何东西”。

实验表明,该方法具有广泛的适用性,能够有效地基于隐式文本queries定位和突出3D对象的部分(在3D网格中),包括这些关节3D对象和现实世界扫描数据。Reasoning3D还可以生成与这些3D模型及其分解对应的自然语言解释。此外,免训练方法允许快速部署,并作为未来研究部件级3D(语义)对象理解的通用基线,在机器人技术、物体控制、部件组装、自动驾驶应用、增强现实和虚拟现实(AR/VR)以及医疗应用等各个领域中具有应用前景。

动机及创新点

最近,大型视觉模型(LVLM)在理解2D图像,在需要复杂推理,多转向对话和解释性答案的任务方面表现出了显着的功能[28,65,76]。本文的目标是将它们的能力扩展到3D领域,相信这种过渡具有很大的实际价值 - 永远不要忘记我们生活在3D世界中!

在这里,受解决了3D生成中类似挑战的研究[16,17,52,54,60,72]的启发——在2D中使用网络模型,然后将一些信息提升到3D,本文利用现成的2D模型以zero-manner执行任务的方法。这种方法,称之为Reasoning3D,通过其无训练特性和2D预训练,使能够规避大量3D数据集的稀缺性和高计算成本所带来的限制。

具体而言,Reasoning3D方法涉及从多个观点呈现3D模型,并根据给定的queries输入将预训练的推理细分网络应用于每个2D视图。通过这样做,为每个视角生成了分割mask和随附的文本解释。然后将这些单独的mask和解释融合在一起,以产生全面的3D分割mask(标签分配给了3D模型的顶点)。已经在野外的各种模型中评估了Reasoning3D方法,无论有没有纹理。还测试了现有的开放式视频分割基准测试中的方法,该基准验证了方法的有效性。虽然Reasoning3D是一种简单的基线方法,但认为它是研究人员探索和扩展3D部分细分未来的好起点。

方法

如图2所示,Reasoning3D首先将网格输入提供给渲染器进行视角渲染,生成每个相应视角的Face ID。接下来,渲染后的视角和用户输入的提示通过预训练的2D推理分割网络进行处理,该网络分割图像以提取所需部分并输出解释。最后,利用每个视角及其对应的网格Face ID之间的映射关系,通过专门设计的多视图融合机制将分割部分重新构建回网格上。

多视图图像渲染和Face ID生成

人类与3D环境的交互通常涉及动态探索,结合来自不同角度的视角以构建一个连贯的3D理解,而不是瞬间同化一个3D环境。Reasoning3D主张通过多视角图像进行3D推理。这一策略还利用了视觉-语言模型中广泛的2D预训练,类似于之前利用预训练视觉-语言模型进行3D视觉任务的方法。此过程的输入是网格 F = { f n } n = 1 N F = \{f_n\}^N_{n=1} F={fn}n=1N,它由N组面 f n f_n fn组成。在这个渲染过程中,3D模型被转换为来自不同视角的多个2D图像 X i m g = { x i } i = 1 11 X_{img} = \{x_i\}^{11}_{i=1} Ximg={xi}i=111。除了生成这些2D图像外,渲染过程还会为每个图像生成相应的Face ID。这些Face ID是2D图像和原始3D网格之间的重要链接。具体来说,它们形成一个映射矩阵 W p f W_{pf} Wpf,将2D图像中的每个像素 P = { p i } i = k M m P = \{p_i\}^{Mm}_{i=k} P={pi}i=kMm连接到3D网格上的特定face f n f_n fn,确保2D和3D数据保持准确对齐。该过程的公式如下:

其中,P表示渲染图像中的像素, f n f_n fn表示从视角看到的3D网格的面。由k表示的Face ID W p f W_{pf} Wpf 连接了渲染图像中的像素P和当前视图中可见的3D网格面fn。

基于用户输入提示的推理和分割

与之前的方法(例如CLIPSeg,LSeg和GLIP)可以处理开放词汇的明确提示不同,Reasoning3D旨在处理隐含提示,例如“你能分割出包含‘笼中鸟’的图像的适当部分吗?”在这里,利用大型基础模型的最新进展来执行这一多模态推理任务。

根据Lai等人[28]的研究,研究者们在原始LLM词汇中扩展了一个新标记<SEG>,表示请求分割输出。给定用户输入的提示问题 X q u e s t i o n X_{question} Xquestion和输入图像 X i m g X_{img} Ximg,它们被输入到多模态大语言模型(LLM) F M M F_{MM} FMM中,随后输出文本响应 Y a n s w e r Y_{answer} Yanswer。该过程的公式如下:

接下来,生成与输入图像对应的分割mask 涉及一系列步骤。首先,研究者们从输出的文本响应 Y a n s w e r Y_{answer} Yanswer中提取与<SEG>标记对应的嵌入向量 E ^ a n s w e r \hat E_{answer} E^answer。这一步能够从语言提示中捕捉与分割任务相关的信息。随后,通过 M L P γ MLP \gamma MLPγ投影层处理 E ^ a n s w e r \hat E_{answer} E^answer以获得特征向量 E a n s w e r E_{answer} Eanswer。同时,利用视觉主干网络 F v b F_{vb} Fvb,从视觉输入 X i m g X_{img} Ximg中提取视觉嵌入 E i m g E_{img} Eimg

最后将特征向量 E a n s w e r E_{answer} Eanswer和视觉嵌入 E i m g E_{img} Eimg输入到解码器 F d e c F_{dec} Fdec中。解码器 F d e c F_{dec} Fdec利用这些特征生成最终的分割mask M及其每个mask 的置信度分数 S M S_M SM。这产生了基于语言提示和视觉信息的分割结果,每个分割mask 都有相应的置信度分数和对应的答案文本。解码器的详细结构遵循Segment Anything。该过程的公式如下:

3D中的mask 融合和细化

需要将获得的2D分割mask 在3D空间中融合,以获得所需的3D分割结果。研究者们发现,直接合并多视图分割的结果可能由于累积误差和缺乏全面的多视图3D信息而导致结果不连贯和质量不高。因此,设计了一个多阶段的融合和细化机制,以充分利用语义信息和视角信息,从而获得更好的3D分割结果。

首先,使用top-k方法过滤生成的mask ,以减少2D分割中的错误。具体来说,如果两个mask 之间的面积差异大于某个阈值T,选择k=1,表示这是想要的mask (最显著的部分),然后生成一个与mask匹配的边界框;否则,选择多个mask 并生成多个边界框。经过过滤的top-k mask S M S_M SM、相应的置信度分数SM以及Face ID将用作融合算法的输入。使用映射关系 W p f W_{pf} Wpf将2D图像mask 区域映射到3D网格的面上,得到初步的分割网格。请注意,只有在生成的边界框内的mask才参与融合过程。

按照[1]的方法,通过Gaussian Geodesic Reweighting平滑和细化分割边界,减少噪声和错误。随后,应用可见性平滑技术消除由视角变化引起的不连续性,确保分割网格从各个角度看起来自然连贯。最后,使用全局过滤策略过滤出置信度分数低的mask区域。

具体来说,对于每个2D mask M,估计其中心面 G i j G^j_i Gij,其中i表示视角,j表示视角内的mask 。对于当前视角下的3D网格,检索与当前mask 对应的所有面的顶点,并计算它们的面积加权平均值。然后将这个平均点投影到点F上,包含此投影的面 F i j F^j_i Fij被识别为当前视角和mask 的中心面。随后,计算从中心面 G i j G^j_i Gij到所有面 f ∈ F i j f \in F^j_i fFij的测地距离向量 d i j ∈ R N d^j_i \in R^N dijRN。这里,N代表当前mask的网格中的面数。

其中, g d i s t ( , ) gdist(,) gdist(,) 表示使用网格 F F F上的热方法计算的两个面的测地长度。网格面之间的测地距离测量的是沿表面从一个面到另一个面的路径长度。

接下来,在距离上拟合高斯分布,并根据每个面与大写面之间的测地距离计算相应的概率密度值。

其中, μ i j μ^j_i μij σ i j σ^j_i σij 分别表示到 d i j d^j_i dij 的距离的均值和标准差。随后,统计每个视图中网格中每个面被分割的次数 n。最后,将每个面的频率乘以相应的概率密度,再乘以相应的置信度分数 S M S_M SM,以获得每个网格面的最终置信度。

然而,仅使用上述方法可能会导致中心面 G i j G^j_i Gij 周围的权重不足,特别是在面之间的平均距离较大的区域。为了解决这个问题,研究者们计算其局部邻域,其中邻居由网格连接性确定:如果两个面至少共享一个顶点,则面 m 被认为是面 n 的邻居。为此,构建了一个 q q q 阶邻域 N q ( n ) ( q = 5 ) N_q(n) (q = 5) Nq(n)(q=5),具体如下。对于face m ∈ F m \in F mF,如果在图上存在一条路径连接 m 和 n,并且路径上最多有 q 个其他顶点,则将face n ∈ F n \in F nF 包含在邻域中。

最后,采用全局过滤,使用计算的阈值过滤出置信度分数较低的mask 区域。该阈值是为每个面计算的平均置信度分数。

实验

开放词汇分割的对比实验

由于没有现有的Reasoning 3D分割方法可以进行比较,首先按照SATR中的协议使用相同的渲染协议,将Reasoning3D与现有的开放词汇3D分割模型(如SATR和3DHighlighter)进行了比较。正如下表1和表2所示,尽管Reasoning3D并不是为开放词汇分割任务设计的,也没有进行微调或特别设计的结构,但在开放词汇分割基准测试中,Reasoning3D仍然取得了竞争性的表现。

Reasoning3D分割的性能

与现有的开放词汇分割方法相比,Reasoning3D具有更好的特性,因为Reasoning3D可以使用自然语言作为输入信息。LLM解析自然语言并直接给出分割结果,这使得计算机与人之间的交互体验更加自然和方便。下图4中展示了一个示例。模型来自FAUST数据集。

在开放词汇分割中,只给出了明确的分割命令,因此Reasoning3D的潜力还没有被充分利用。随机收集了来自3D建模网站SketchFab的3D模型,并使用这些实际中的3D模型进行评估,并让志愿者给出“隐含”的分割命令。图6和图1展示了一些示例。这些示例表明Reasoning3D具备提供深入推理、3D理解、部分分割和对话能力的能力。模型可以输出需要的分割mask和解释。

为了更好地让用户与本文的系统进行交互,还设计了一个用户界面(UI),以便用户可以输入任意3D模型及其所需的提示来分割所需区域。(图6)此UI也将开源。

结论

本文介绍了一项新任务:zero-shot 3D推理分割,用于在对象内进行部件搜索和定位。这种新方法超越了传统的特定类别的3D语义分割、3D实例分割和开放词汇3D分割的限制。本文开发了Reasoning3D,一个简单而有效的基线方法,可以理解并执行复杂的命令,以对3D网格的特定部分进行分割,具有上下文理解和推理输出,用于交互式分割。Reasoning3D利用预训练的2D分割网络与大语言模型(LLM)结合,以zero-shot方式解释用户queries。先前的研究表明,广泛的预训练使基础模型具备了对世界的广泛理解能力,使它们能够处理复杂的命令。Reasoning3D利用了这一能力,可以在有限的3D数据集上进行有效的3D分割,使其成为一种资源高效的解决方案。

实验表明,Reasoning3D具有可泛化性,并能够根据隐含的文本query准确地定位和识别3D物体的部件。这包括关节式3D物体和真实世界的扫描数据。此外,Reasoning3D可以为分割的3D模型及其组件生成自然语言解释。本文方法的无需训练的特性有助于快速部署,并为部分水平的3D对象理解研究提供了强大的基线。这在各个领域都有潜在的应用,例如机器人技术、物体控制、部件组装、自动驾驶、增强和虚拟现实(AR/VR)以及医学领域。

参考文献

[1] Reasoning3D - Grounding and Reasoning in 3D: Fine-Grained Zero-Shot Open-Vocabulary 3D
Reasoning Part Segmentation via Large Vision-Language Models

这篇关于3D分割新范式!浙大开源Reasoning3D:通过大视觉语言模型搞定3D部件分割的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java的IO模型、Netty原理解析

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

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

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

C语言中的数据类型强制转换

《C语言中的数据类型强制转换》:本文主要介绍C语言中的数据类型强制转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C语言数据类型强制转换自动转换强制转换类型总结C语言数据类型强制转换强制类型转换:是通过类型转换运算来实现的,主要的数据类型转换分为自动转换

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

C语言实现两个变量值交换的三种方式

《C语言实现两个变量值交换的三种方式》两个变量值的交换是编程中最常见的问题之一,以下将介绍三种变量的交换方式,其中第一种方式是最常用也是最实用的,后两种方式一般只在特殊限制下使用,需要的朋友可以参考下... 目录1.使用临时变量(推荐)2.相加和相减的方式(值较大时可能丢失数据)3.按位异或运算1.使用临时

使用C语言实现交换整数的奇数位和偶数位

《使用C语言实现交换整数的奇数位和偶数位》在C语言中,要交换一个整数的二进制位中的奇数位和偶数位,重点需要理解位操作,当我们谈论二进制位的奇数位和偶数位时,我们是指从右到左数的位置,本文给大家介绍了使... 目录一、问题描述二、解决思路三、函数实现四、宏实现五、总结一、问题描述使用C语言代码实现:将一个整

C++字符串提取和分割的多种方法

《C++字符串提取和分割的多种方法》在C++编程中,字符串处理是一个常见的任务,尤其是在需要从字符串中提取特定数据时,本文将详细探讨如何使用C++标准库中的工具来提取和分割字符串,并分析不同方法的适用... 目录1. 字符串提取的基本方法1.1 使用 std::istringstream 和 >> 操作符示

C语言字符函数和字符串函数示例详解

《C语言字符函数和字符串函数示例详解》本文详细介绍了C语言中字符分类函数、字符转换函数及字符串操作函数的使用方法,并通过示例代码展示了如何实现这些功能,通过这些内容,读者可以深入理解并掌握C语言中的字... 目录一、字符分类函数二、字符转换函数三、strlen的使用和模拟实现3.1strlen函数3.2st

Go语言中最便捷的http请求包resty的使用详解

《Go语言中最便捷的http请求包resty的使用详解》go语言虽然自身就有net/http包,但是说实话用起来没那么好用,resty包是go语言中一个非常受欢迎的http请求处理包,下面我们一起来学... 目录安装一、一个简单的get二、带查询参数三、设置请求头、body四、设置表单数据五、处理响应六、超

C语言中的浮点数存储详解

《C语言中的浮点数存储详解》:本文主要介绍C语言中的浮点数存储详解,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、首先明确一个概念2、接下来,讲解C语言中浮点型数存储的规则2.1、可以将上述公式分为两部分来看2.2、问:十进制小数0.5该如何存储?2.3 浮点