【三维重建】Semantic Gaussians:开放词汇的3DGS场景理解

news2024/11/12 21:30:04

在这里插入图片描述


文章目录

  • 摘要
  • 一、引言
  • 二、主要方法
    • 1.3D Gaussian Splatting
    • 2.其他方法
      • 2.1 Gaussian Grouping(ECCV 2024)
      • 2.2 GARField
    • 3. 2D Versatile 投影
    • 4. 3D Semantic Network
    • 4. 推理
  • 四、实验
    • 1. 实验设置
    • 2.定量结果

论文:https://arxiv.org/pdf/2403.15624
来源:BIGAI和清华大学


摘要

  开放词汇的三维场景理解是计算机视觉中的一个重大挑战,在具体化代理和增强现实系统中有着广泛的应用。现有的方法采用神经渲染方法作为三维表示,联合优化颜色和语义特征,同时实现渲染和场景理解。本文介绍了一种基于三维高斯溅射的开放词汇场景理解方法语义高斯。我们的关键思想是 将知识从二维预训练模型提取为三维高斯模型 。与现有的方法不同,我们设计了一种通用的投影方法,将预先训练好的图像编码器映射到一个新的三维高斯的语义component ,这是基于空间关系,不需要额外的训练。我们 进一步建立了一个三维语义网络,直接从原始的三维高斯数据中预测语义成分 ,以进行快速推理。 实验在ScanNet segmentation和LERF目标定位上做了定量对比。此外还探索了语义高斯算法的一些应用,包括对象部分分割、实例分割、场景编辑和时空分割,在二维和三维基线上具有更好的定性结果

  

  


一、引言

  开放词汇表的三维场景理解是计算机视觉中的一项重要任务。给定一个3D场景,其目标是用自由形式的自然语言来理解和解释3D场景,也就是说,而不受限于一组预定义的对象类别。允许开放词汇表场景查询使机器能够更有效地与环境交互,促进诸如对象识别、语义场景重建和在复杂多样的环境中导航等任务。开放词汇3D场景理解在各种现实应用中具有重要意义,如机器人技术和增强现实。

  多视图图像是3D场景最直接的表示,但允许开放词汇理解通常涉及2D视觉语言模型,难以在不同视图的一致性,可能是由于缺乏视觉几何知识;点云很流行和研究,但点云固有的稀疏性限制了开放词汇场景理解在上的应用

  以往方法[4]、[5]、[8]-[16]的一个主要分支是采用NeRF或3DGS等神经渲染方法作为3D表示,共同优化颜色成分和语义特征,实现任意2D视图的高质量渲染和3D场景理解。语义知识通常是从开放词汇表的二维基础模型中提取出来的,如CLIP 或LSeg ,它们在训练视图上预测的输出在优化过程中充当了弱监督

  本文提出Semantic Gaussians,基于三维高斯溅射的优点的开放词汇表三维场景理解的方法。核心思想是将预先训练好的二维编码器中提取成三维高斯,从而为每个高斯点分配一个语义分量。为了实现这一点,我们建立了二维像素和三维高斯点之间的对应关系,并提出了一个通用的投影框架来将二维像素的语义特征映射到每个三维高斯点上,可以利用任意预先训练过的2D模型,如OpenSeg 、CLIP 、VLPart 等,在2D RGB图像上生成像素级的语义特征,不需要额外训练来将语义组件注入到三维高斯模型中,允许有效的开放词汇表场景查询。

  除了投影,还引入了一个三维语义网络MinkowskiNet[21,一个三维稀疏卷积网络],它直接从原始三维高斯中预测开放词汇语义成分。网络以原始的RGB高斯数据作为输入,并由上述投影方法得到的高斯数据的语义成分进行监督。因此,我们可以简单地运行这个网络来获得语义组件,从而实现更快的推理。该网络利用几何属性来理解看不见的场景,提高了我们的方法超越二维投影的通用性和鲁棒性。需要注意的是,三维语义网络的预测可以与投影特征相结合,进一步提高高斯中语义组件的质量和开放词汇表场景理解性能。

  

二、主要方法

1.3D Gaussian Splatting

  本文采用三维3D Gaussian Splatting作为三维场景的表示,其以可区分的方式从任意视点渲染图像,从而有效地利用各种二维基础模型的知识。具体来说,我们通过使用3DGS从指定的视点渲染二维语义图像,来实现场景理解

  3DGS由一组可学习的三维高斯点组成,其中每个点都有一个三维坐标µ表示其位置,一个协方差矩阵Σ表示其形状,球面谐波参数c代表其颜色,一个不透明度值α代表其透明度。3DGS可以由多视图图像构建,并可以利用来自运动结构(SfM)点云[48]的信息进行初始化,从而获得更好的渲染质量和几何结构。

  3DGS使用基于点的 α α α混合来计算2维图像上的像素值。每个像素C的值通过沿射线的体积渲染给出:

在这里插入图片描述
将三维高斯分布投影到某个二维平面上,从相机的角度计算协方差矩阵 Σ ′ Σ' Σ的方法为(W是world-to-camera变换矩阵,J是投影变换的仿射近似的雅可比矩阵):

在这里插入图片描述

其中。如果我们跳过 Σ ′ Σ' Σ的第三行和列,我们可以得到二维方差矩阵。为了保证正半定性,将协方差矩阵Σ分解为旋转矩阵 R R R和缩放矩阵 S S S

在这里插入图片描述

  3DGS可以看作是一个具有附加特性的特殊点云,因此具有点云的一些特性。一个直观的思想是将基于空间关系的语义信息投射到相应的高斯点上,而不是通过可微栅格化和渲染 在渲染语义映射时,如果不考虑复杂的光照条件,只考虑几何位置的对应关系就足够了 。在此基础上,我们提出了语义高斯算法来实现多功能场景理解。

2.其他方法

2.1 Gaussian Grouping(ECCV 2024)

  保留了高斯模型的所有属性(如它们的数量、颜色、不透明度和大小),同时添加了新的身份编码参数(类似于颜色,是一个长度为16的可学习的、紧凑的向量,足以以计算效率区分场景中的不同对象/部分),并使用了一个训练有素的zero-shot tracker 来传播和关联mask。使得每个高斯分布被分配给其在3D场景中所表示的实例或东西

在这里插入图片描述
  二维ID损失。为了优化ID编码,将ID 向量以可微的方式渲染为二维图像。从原始GS中提取可微的三维高斯渲染器,并将渲染过程类似于gs中的颜色(SH系数)优化。  GS采用神经点的 α ′ α' α 渲染[18,19],进行深度]排序和混合N个与像素重叠的有序点,计算所有高斯分布对单个位置像素的影响。将2D特性 E i d E_{id} Eid作为输入,使用一个线性层 f f f,将特征维数恢复到K+1,然后取 s o f t m a x softmax softmax( f f f( E i d E_{id} Eid))进行ID分类(K是3D场景中的mask总数),采用标准的交叉熵损失 L 2 d L_{2d} L2d进行K+1类别分类。

在这里插入图片描述

  2.三维正则化损失。除了间接的二维监督,还引入无监督的三维正则化损失来约束ID编码 e i e_i ei的学习:利用三维空间一致性,通过最近的 k个三维高斯分布的ID编码与其特征距离拉近。这允许3D对象内部的三维高斯分布,或在基于点的渲染期间被严重遮挡(在几乎所有的训练视图中都不可见)得到更充分的监督。公式3的 F F F表示为与线性层(在计算二维身份损失时共享)相结合的softmax操作。用m个采样点将KL散度损失形式化为:

在这里插入图片描述

  

2.2 GARField

在这里插入图片描述
   GARField以pose图像为输入,生成一个分层的三维场景分组,以及一个标准的三维体积辐射场和一个有尺度条件的亲和场。首先用SAM得到输入图像的候选mask。接下来,通过输入的三维位置和欧式尺度,优化一个体积辐射场和亲和场,并输出一个特征向量。亲和度是通过比较点对的特征向量来获得的。优化后,生成的亲和字段可以用于分解场景,通过以粗到细的方式递归地聚类三维特征嵌入,或者用于分割用户指定的查询。整个管道如图3所示。
在这里插入图片描述

  Scale-Conditioned Affinity Field(尺度条件亲和场) 。在尺度分割条件下,同一点的冲突掩模在训练过程中不再相互对抗,而是在不同的亲和尺度下在同一场景中共存。  我们在三维点 x 和欧氏尺度 s 上定义了尺度条件亲和场 Fg(x,s)→Rd,类似于LERF [13]。输出特性被限制在一个单位超球体内,在一个尺度上两点之间的亲和性由 A(x1,x2,s)= −||Fg(x1,s)−Fg(x2,s)||2 定义。这些特征可以使用基于NeRF密度的相同渲染权重,以加权平均值进行体渲染,以获得每条射线的值。

  对比监督。根据DrLIM [9],采用margin-based contrastive 对比目标进行监督。损失又两部分组成:给定的尺度下,同一组中的特征接近,不同组中的特征分开。  具体来说,从同一训练图像中采样掩模 MA、MB 的两条射线rA、rB,以及相应的尺度 sA和sB。我们可以沿每条射线,以体渲染方式得到尺度条件的亲和特征 FA和FB。如果MA=MB,特性将通过L2距离拉在一起: Lpull= ||FA−FB||;反之,特性将被分开: Lpush = ReLU(m−||FA−FB||),其中m是下界距离或边界。这种损失只适用于从同一图像中采样的射线,因为在不同视点上的掩模没有对应关系。

  

  

  

  

3. 2D Versatile 投影

  通用的特征投影方法:从一个二维预训练的模型中提取RGB图像的像素级语义映射,并将其投影到一个场景的三维高斯分布中。

   1) 语义映射提取:我们的方法从某一场景的三维高斯G开始。由于三维高斯溅射的逼真渲染性能,Semantic Gaussians可以在没有二维GroundTruth图像的情况下运行。给定形状为 H × W H×W H×W的RGB图像 I I I,Semantic Gaussians 的目的是从任意的二维视觉语言模型 ϵ 2 D \epsilon^{2D} ϵ2D 中得到由 s ∈ R H × W × C s∈R^{H×W×C} sRH×W×C表示的像素级语义映射。获得每像素语义映射的最直接的途径是利用像素级分割模型,如OpenSeg。然而,利用其他编码器,例如VLPart [20]可以帮助处理对象的组件(part)的语义(OpenSeg没这个功能)。此外,不同类型模型的特征可以集成,产生更准确的结果

  2) 统一SAM与各种2D特征:适应各种2D预训练特征是重要的,因为它们可以是像素级分割网络(如OpenSeg ,LSeg )、实例级识别网络(如DINO,VLPart)或图像级分类网络(如CLIP)。此外,Semantic Gaussians 能够利用 SAM来为每个模型生成精细的分割映射。对于像素级模型,SAM可以细化分割边界。给定一个RGB图像 I I I,使用SAM中的 everything prompt 来生成 N N N个二进制掩码 M 1 , ⋅ ⋅ ⋅ , M N M_1,···,M_N M1⋅⋅⋅MN。我们计算每个mask M i M_i Mi的embedding的平均池化,并将其分配为该mask中所有像素的embedding: s [ M i ] = A v g P o o l ( s [ M i ] ) s[M_i] = AvgPool(s[M_i]) s[Mi]=AvgPool(s[Mi])

  对于实例级模型,与Ground-SAM类似,使用预训练模型的预测结果作为SAM的方框提示符。在得到二进制mask后,将该实例的CLIP embedding分配给实例区域内的所有像素。对于图像级模型,SAM可以作为一个预处理模块来获取区域建议。我们使用SAM中的“everything” prompt 来获得不同的建议区域。每个区域都被填充、裁剪和调整到224×224,并输入图像级模型以获得语义embedding,并分配给每个proposal区域内的所有像素。

  3) 2D-3D Projection and Fusion. 获取逐像素语义映射后,语义高斯映射将其投影为三维高斯映射,得到语义成分。对于语义映射s中的每个像素 u = ( u , v ) u =(u,v) u=(u,v),语义高斯函数试图寻找空间中是否存在相应的三维高斯点 p = ( x , y , z ) p =(x,y,z) p=(x,y,z)。针孔相机模型下,利用内参矩阵 K K K和world-to-camera矩阵 E E E 投影可以表示为 u ~ = K ⋅ E ⋅ p ~ \tilde{u}=K·E·\tilde{p} u~=KEp~ ,其中~为齐次坐标。在这个投影之后,每个像素u将对应于三维空间中的一束射线,执行3DGS的深度渲染,来将二维语义投影到三维空间中的表面点。在体渲染过程中,不透明度从近到远累积。因此,我们设置了一个不透明度阈值 α d α_d αd,来判断光线被物体遮挡。我们不需要来自数据集的地面真实深度

  二维像素和三维高斯点配对时,假设三维空间中的某个高斯点 p p p具有一组来自 K K K个不同观点的二维语义, 可以通过平均池化融合: s p 2 D = A v g P o o l ( s 1 , ⋅ ⋅ ⋅ , s K ) s^{2D}_p= AvgP ool(s_1,···,s_K) sp2D=AvgPool(s1⋅⋅⋅sK)

4. 3D Semantic Network

  为了从原始三维高斯中预测语义成分,构建一个三维语义网络 f 3 D f^{3D} f3D 来实现这一点:给定三维高斯 G G G,预测point-wise的语义分量 s 3 D s^{3D} s3D,并使用融合特性 s 2 D s^{2D} s2D 来监督三维模型。损失函数为余弦相似度损失:

在这里插入图片描述

  使用MinkowskiNet作为我们的三维模型的主干(一种为点云设计的三维稀疏卷积网络)。将透明度、颜色和协方差设置为三维模型的输入特征,输出为每个高斯点的语义嵌入 s 3 D s^{3D} s3D。3D模型通过处理三维几何信息而不是多个二维视图来识别场景,使结果更加一致,且推理速度比二维投影要快得多

  

4. 推理

  语言驱动的开放词汇场景理解。给定一个自由形式的语言查询,使用CLIP文本编码器将提示编码到文本嵌入 t t t。我们计算文本嵌入与每个三维高斯点的语义分量之间的余弦相似度,匹配的高斯值将被视为与查询的对应。以语义分割和部分分割为例,对N个语义类的标签分别编码为 t 1 、 ⋅ ⋅ ⋅ 、 t N t_1、···、t_N t1⋅⋅⋅tN。计算了这些文本嵌入和三维高斯矩阵的语义嵌入之间的余弦相似度:

在这里插入图片描述

选择 c n 2 D c^{2D}_n cn2D c n 3 D c^{3D}_n cn3D中较大的值作为类 t n t_n tn的余弦相似度。softmax函数后的相似度{ c 1 , ⋅ ⋅ ⋅ ⋅ , c n c_1,····,c_n c1⋅⋅⋅⋅cn}是每个类的置信度分数,将其splat到2D视图上,就能得到一个二维语义分割图

四、实验

1. 实验设置

  数据集ScanNet是一个室内场景的大规模分割基准,具有校准的RGBD轨迹、3D点云和语义label。我们对所有1201个场景训练3D RGB高斯训练。验证集评估12个场景的性能。为了与闭集方法进行比较,将ScanNet-20类映射到来自COCO数据集中的21个类。

  对于三维对象定位任务,选择LERF [5]数据集作为我们的基准。LERF数据集提供了几个包含长尾对象和多尺度语义的3D场景。该数据集由iPhone应用程序Polycam捕获,以获得多视图图像和SfM点。

  对于定性评估,选择MVImgNet [23]数据集作为我们的部分分割数据集,而CMU全景[52]数据集作为时空跟踪数据集。MVImgNet是一个多视图的单对象数据集,包含238类对象的相机参数和稀疏点云。CMU全景数据集是一个用于多人参与社会活动的大规模数据集。对于语言引导的编辑,我们在Mip-NeRF 360 [53]数据集中选择了一些场景来显示我们的性能

  实现细节:NVIDIA RTX 4090 GPU上训练,RGB高斯网络训练10000次迭代,对三维语义网络训练100个时代。在场景级语义分割实验中,我们应用LSeg生成二维投影的像素级开放词汇表语义特征。对于3D语义网络,我们使用闵可夫斯基网34A[21]作为骨干。对于3D对象定位任务,我们都使用了带有SAM和LSeg的CLIP作为我们的2D预训练模型。

  对于零部件分割和时空跟踪,使用VLPart作为投影模型。为了评估我们在四维高斯上的语义高斯,我们遵循动态三维高斯[24]的工作,得到了具有时间信息的动态高斯。

2.定量结果

  我们从LSeg中提取语义特征来进行二维投影和三维网络训练。因此,本节中的结果将显示我们的方法将从二维视觉语言模型中改进多少

表1显示了不同方法的性能。可以观察到,我们的语义高斯方法超过了mIoU和mAcc中所有的开放词汇表方法,并且非常接近于最先进的闭集方法的性能
在这里插入图片描述

虽然我们的3D网络的mIou和mAcc低于二维投影,但2D和3D集成将进一步提高我们的性能。我们推测,某些场景中的某些物体由于其质量较低,无法在所有视图中都被二维模型正确识别,而三维网络可以利用几何细节来识别它们

在这里插入图片描述

  图3显示,LERF和LangSplat的分割精度较低。这主要是因为它们利用多尺度的CLIP特征来理解场景,而CLIP特征很难在像素级上与场景精确对齐,这使得它们不适合生成像素级的语义分割地图。另一方面,PVLFF、Fetatre3DGS和语义高斯都采用LSeg来实现开放词汇表场景理解。作为一种基于nerf的方法,PVLFF的性能相对较差,而且渲染速度也较慢。特征3DGS和我们的方法产生了非常相似的性能,特征3DGS甚至在某些视图中实现了更精确的分割。但是,Festagre3DGS需要对每个场景的语义3DGS进行再训练,其效率和灵活性较低

  

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【功能介绍】信创终端系统上各WPS版本的授权差异

原文链接:【功能介绍】信创终端系统上各WPS版本的授权差异 Hello,大家好啊!今天给大家带来一篇关于信创终端操作系统上WPS Office各版本(不包括政务版、企业版等)之间的差异的文章。WPS Office作为国内广泛使用的办公软…

Elmo驱动器上位机软件的详细配置

续接上文,本文讲解Elmo驱动器上位机软件更详细的配置,重点关注,在电机的位置受到约束的情况下,完成驱动器的参数整定过程,以及一些调试方法 一 硬件介绍 本文使用的是另一套设备,假设电机的位置是受到约束的 1 编码器规格书 编码器已知信息是 :读数头是26位的,通讯…

「Mac畅玩鸿蒙与硬件32」UI互动应用篇9 - 番茄钟倒计时应用

本篇将带你实现一个番茄钟倒计时应用,用户可以设置专注时间和休息时间的时长,点击“开始专注”或“开始休息”按钮启动计时,应用会在倒计时结束时进行提醒。番茄钟应用对于管理时间、提升工作效率非常有帮助,并且还会加入猫咪图片…

SparkSql读取数据的方式

一、读取普通文件 方式一:给定读取数据源的类型和地址 spark.read.format("json").load(path) spark.read.format("csv").load(path) spark.read.format("parquet").load(path) 方式二:直接调用对应数据源类型的方法 …

模型训练中GPU利用率低?

买了块魔改华硕猛禽2080ti,找了下没找到什么测试显存的软件,于是用训练模型来测试魔改后的显存稳定性,因为模型训练器没有资源监测,于是用了Windows任务管理器来查看显卡使用情况,却发现GPU的利用率怎么这么低&#xf…

在gitlab,把新分支替换成master分支

1、备份master分支,可以打tag 2、删除master分支 正常情况下,master分支不允许删除,需要做两个操作才能删除 a、变更项目默认分支为非master分支,可以先随便选择 b、取消master为非保护分支 操作了上述两步,就可以删…

Transformer究竟是什么?预训练又指什么?BERT

目录 Transformer究竟是什么? 预训练又指什么? BERT的影响力 Transformer究竟是什么? Transformer是一种基于自注意力机制(Self-Attention Mechanism)的神经网络架构,它最初是为解决机器翻译等序列到序列(Seq2Seq)任务而设计的。与传统的循环神经网络(RNN)或卷…

UE5.4 PCG 自定义PCG蓝图节点

ExecuteWithContext: PointLoopBody: 效果:点密度值与缩放成正比

SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”

SLF4J常见问题 1、SLF4J简介2、SLF4J实现原理3、SLF4J常见问题 1、SLF4J简介 SLF4J(Simple Logging Facade for Java)是一个为Java程序提供日志输出的统一接口,并不具备具体的日志实现方案,类似JDBC,SLF4J只做两件事&a…

MySQL记录锁、间隙锁、临键锁(Next-Key Locks)详解

行级锁,每次操作锁住对应的行数据。锁定粒度最小,发生锁冲突的概率最低,并发度最高。 应用在InnoDB存储引擎中。InnoDB的数据是基于索引组织的,行锁是通过对索引上的索引项加锁来实现的,而不是对记录加的锁。 对于行…

前端-懒加载

目录 1.懒加载的概念 2.懒加载的特点 3.懒加载的实现原理 4.懒加载与预加载的区别 5.懒加载实现 6.预加载实现 1.懒加载的概念 懒加载也加延迟加载、按需加载,指在长网页中延迟加载图片数据,是一种较好的网页性能优化的方式。 2.懒加载的特点 &…

uniapp 实现瀑布流

效果演示 组件下载 瀑布流布局-waterfall - DCloud 插件市场

若依后端项目打包镜像部署

添加打包依赖 <build><finalName>${project.artifactId}</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><executi…

使用Python实现音频降噪

在音频处理领域&#xff0c;背景噪声是一个常见的问题。为了提高音频的质量&#xff0c;我们需要对音频进行降噪处理。本文将介绍如何使用 Python 实现音频降噪。 依赖库安装 在开始之前&#xff0c;我们需要安装以下依赖库&#xff1a; pydub&#xff1a;用于音频文件的读取…

18、论文阅读:AOD-Net:一体化除雾网络

AOD-Net: All-in-One Dehazing Network 前言介绍相关工作物理模型传统方法深度学习方法 建模与扩展变换后的公式网络设计与高级特征任务相结合 除雾评价数据集和实现 前言 该论文提出了一种基于卷积神经网络&#xff08;CNN&#xff09;的图像去雾模型&#xff0c;称为 All-in…

软件工程。

图 UML 数据流图&#xff08;DFD&#xff09; 1&#xff0c;数据流图概念 描绘信息流和数据从输入移动到输出的过程中所经受的变换。 也就是 数据流图。 数据流图以图形的方式描绘数据在系统中流动和处理的过程。 数据流图&#xff08;DFD&#xff0c;Data Flow Diagram&a…

机器学习—为什么我们需要激活函数

如果我们使用神经网络中每个神经元的线性激活函数&#xff0c;回想一下这个需求预测示例&#xff0c;如果对所有节点使用线性激活函数&#xff0c;在这个神经网络中&#xff0c;事实证明&#xff0c;这个大神经网络将变得与线性回归没有什么不同&#xff0c;所以这将挫败使用神…

Java基础使用②Java数据变量和类型+小知识点

目录 1. Java小知识点 1.1 Java注释 1.2 Java标识符命名 1.3 Java关键字 2. 字面常量和数据变量 2.1 字面常量 2.2 数据类型 3.变量 3.1 变量概念 3.2 语法格式 3.3 整型变量 3.4 浮点型变量 3.5 字符型变量 3.6 布尔型变量 3.7 类型转换 3.8 类型提升 4. 字符…

Blender 几何、线框猴头的构建 笔记

一、学习blender视频教程链接 案例7&#xff1a;猴头构建_建模动画_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Bt4y1E7qn?spm_id_from333.788.videopod.episodes&vd_sourced0ea58f1127eed138a4ba5421c577eb1&p23 二、几何节点基础教程 1.首先添加几何节…

Kafka面试题解答(二)

1.怎么尽可能保证 Kafka 的可靠性 kafka是可能会出现数据丢失问题的&#xff0c;Leader维护了一个动态的in-sync replica set&#xff08;ISR&#xff09;&#xff0c;意为和 Leader保持同步的FollowerLeader集合(leader&#xff1a;0&#xff0c;isr:0,1,2)。 如果Follower长…