【3DGS】OpenGaussian论文解读以及改feature时遇到的问题
之前也发过一次关于open gaussian阅读随笔。但写的比较简单,再加上当时理解的也比较浅显。这次正好前两天做了汇报,总结了几个模型。截了一些slides记在这里存档一下,也当补充了。此外,在跑这个模型的时候,试着改动了一下,但结果与我预期相反(写在了最后),如果有大佬能够解答,感激不尽!

一种基于三维高斯拼接的开放词汇三维场景理解方法。它大致分为三个阶段。
第一阶段 instance feature learning

在第一阶段,使用与视图无关的 SAM 布尔掩码来训练3d instance feature (三维实例特征)。原理是,来自同一物体的特征应相互靠近,而来自不同物体的特征应相互远离。为了监督实例特征,他们定义了两种损失:cohesion loss和separation loss。
在splatting process之后,3d instance feature (三维实例特征) 会被渲染成feature map(特征图)。此外,再结合SAM mask,cohesion loss可确保掩码内的所有特征都向其平均值靠拢。反之,separation loss可确保两个不同掩码之间的特征平均值被推开。
通过采用这些策略,该方法实现了三维跨视角一致性,并直接从掩码中获得不同的实例特征。
第二阶段 codebook discretization

在第二阶段,使用α\alphaα-blending渲染特征图,累积权重。然而,这可能会导致来自同一物体的高斯表现出不同的特征,而来自不同物体的高斯可能具有相似的特征。因此,为了解决这个问题,根据 KMeans 聚类构建了一个codebook,将实例特征离散化,从而形成离散的 3D 实例聚类。这就确保了来自同一实例的高斯具有相同的特征,而不仅仅是相似的特征。换句话说,同一实例中的所有高斯都具有相同的实例特征。
此外,由于遮挡或距离的原因,两个物体可能永远不会共享相同的视角。因此,前面提到的对比损失(cohesion loss和separation loss)无法保证它们的特征是不同的。而且在大型场景中,使用 64 的 k 值不足以区分所有物体,从而降低了实例特征的独特性。不过,单纯增加 k 值的好处也很有限。
为了解决这个问题,codebook采用了两级、从coarse(粗)到fine(细)的编码本。
- 在coarse-level(粗级别),实例特征 F 与高斯三维坐标拼接起来建立编码本,实现位置感知聚类。(我在改动模型的时候,遇到的问题也是源于这里,最后一部分会写)
- 在fine-level(细级别),仅根据实例特征(不考虑坐标)对每个粗聚类进行进一步离散化。
在代码集构建阶段,我们选择第一阶段训练的实例特征作为较强的监督。
第三阶段 3D-2D instance-language feature association

最后一个阶段是将 3D 实例特征与 CLIP 语言特征联系起来。
在这一阶段,单个三维实例特征被渲染到当前视图,并与当前视图的 SAM 掩码进行比较,来计算 IoU。但是,由于遮挡,单个 SAM 掩码 Mj可能与多个三维实例渲染的特征图相交。
为了解决这个问题,在布尔 SAM 掩码中填充了第一阶段预训练的实例特征,从而创建了pseudo-GT特征。这就是特征填充掩码 Pj 。计算 Pj 和 Mj 之间的特征距离,避免出现 IoU 高但特征不对应同一对象的情况。最终得分 s 综合了这两个指标。
最后,使用得分最高的 SAM 掩码。对于每个掩码区域,都会计算出掩膜内 CLIP 特征的平均值。这样,就实现了三维点与 CLIP 特征的间接关联。
最后issue I encountered
我遇到了个问题与codebook构建(第二阶段)过程中使用的位置特征有关。就像前面提到的,位置特征与实例特征在coarse-level上进行连接,以解决遮挡或距离问题。
一开始,我认为在codebook训练过程中去掉位置特征应该会导致性能下降,因为聚类会失去空间感。然而,从结果中可以看出,在两个数据集中,移除位置特征会产生不一致的结果。
- 在Lerf的teatime中,移除位置特征会提高性能。这与我的预期不同。
- 对于ScanNet,结果与预期一致,移除位置特征后性能下降。
我的想法是可能因为lerf的这个场景过于密集,增加额外的position feature会影响instance feature的训练。如果有朋友可以解答,万分感谢!
鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。
更多推荐


所有评论(0)