当前位置:   article > 正文

GS-SLAM

gs-slam

0. 笔者个人体会

3D Gaussian Splatting在NeRF领域很火,很大程度上提高了NeRF的渲染速度和质量,但是在NeRF-based SLAM上还没有应用。

今天笔者将为大家分享上海AI Lab、复旦大学、西北工业大学、香港科技大学最新的开源工作GS-SLAM,结合了NeRF、3D Gaussian Splatting、SLAM三者的优点,渲染速度达到了386 FPS,渲染质量也很高。

当然笔者水平有限,如果有理解不当的地方,欢迎大家批评指正~

1. 效果展示

GS-SLAM结合3D高斯实现了实时的跟踪和NeRF建图,渲染速度非常快,达到了386 FPS。需要泼冷水的是,这个速度指的只是渲染,整个SLAM框架的运行速度(8.34 FPS)和定位精度没有提升太多。

代码暂未开源,感兴趣的读者可以跟踪一下具体进展。

2. 论文信息

标题:GS-SLAM: Dense Visual SLAM with 3D Gaussian Splatting

作者:Chi Yan, Delin Qu, Dong Wang, Dan Xu, Zhigang Wang, Bin Zhao, Xuelong Li

机构:上海AI Lab、复旦大学、西北工业大学、香港科技大学

原文链接:https://arxiv.org/abs/2311.11700

代码链接:coming soon

3. 摘要

在本文中,我们首先介绍了在同时定位与地图构建( SLAM )系统中使用3D高斯表示的GS-SLAM。它有利于在效率和准确性之间取得更好的平衡。与最近使用神经隐式表示的SLAM方法相比,我们的方法使用了一个实时可微的splatting渲染管道,为地图优化和RGB - D重新绘制提供了显著的加速比。具体来说,我们提出了一种自适应的扩展策略,添加新的或删除有噪声的3D高斯,以便有效地重建新的观测场景几何,并改善先前观测区域的建图。这种策略对于扩展3D高斯表示来重建整个场景至关重要,而不是在现有的方法中合成一个静态物体。此外,在位姿跟踪过程中,设计了一种有效的由粗到精的技术来选择可靠的3D高斯表示来优化相机位姿,从而减少运行时间并实现鲁棒估计。我们的方法在Replica,TUM-RGBD数据集上与现有的最先进的实时方法相比取得了有竞争力的性能。

4. 算法解析

传统NeRF SLAM有什么问题?

一个是定位精度低,一个是渲染慢,这篇文章主要解决的就是后者。

解决问题的思路是什么?

这就不得不提到今天的主角:3D Gaussian Splatting,来源于ACM Transactions on Graphics 2023,将NeRF场景建模为3D高斯,这项工作一定程度上影响了NeRF的走向。最大的亮点是能够在重建高保真NeRF的同时接入传统光栅化,极大加快了渲染速度!

想进一步了解的读者可以关注它们的官网https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting

GS-SLAM具体是怎么做的?

GS-SLAM的输入是RGBD序列和相机内参,将3D场景建模为3D高斯,利用3D高斯splatting渲染RGB和Depth,计算光度损失和深度损失来优化位姿和场景,输出是相机位姿和稠密NeRF场景。

主要创新在于,GS-SLAM不使用隐式特征表示地图,而是利用3D高斯表示场景,使用基于splatting的光栅化来渲染图像,这个过程非常快

先说一下具体的3D高斯:

具体的高斯表示如下,也就是如何用3D高斯定义一个椭球,其中N表示帧数,X表示3D坐标,Σ表示协方差,Λ表示不透明度,Y表示球谐系数:

那么如何初始化这个椭球呢,直接随便生成一组数可不能保证Σ的半正定。既然3D高斯和椭球是同构的,就可以将球按轴向放缩再旋转得到,因此椭球的初始化是通过放缩变换S和旋转矩阵R得到的:

然后就可以将椭球投影到2D图像平面来渲染,也就是splatting(溅射,类似雪球直接砸墙上的感觉),其中J是雅可比,P是位姿:

之后就可以渲染RGB图和深度图:

什么时候会添加/删除3D高斯?

每个关键帧都会做3D高斯的更新和优化,每次获得关键帧位姿,先决定是否添加/删除3D高斯,然后计算光度损失和深度损失来优化场景。

具体来说,每来一个关键帧,先用现有3D高斯去渲染当前帧RGBD图像,计算累计不透明度,如果累计值低于阈值,或者渲染深度值跟当前深度图差距太大,就认为看到了新场景,添加新3D高斯。

删除策略是,在添加新3D高斯后,检查了当前相机视锥中所有可见的3D高斯,然后降低位置不在场景表面附近的3D高斯的不透明度,也就相当于删除了。

最后再说一下相机跟踪

GS-SLAM没有用单独的SLAM模块来估计位姿,而是使用损失函数同时优化场景和位姿,定位只用了光度损失,BA同时用了光度损失和深度损失。虽然GS-SLAM更侧重建图速度的提升,但是也做了很多位姿优化的策略。

主要是用到了两个trick,链式求导由粗到精优化

先说链式求导,作者发现位姿的梯度主要跟2D高斯协方差、3D高斯RGB值、2D高斯投影坐标有关,所以就推导得到了光度损失Lc对位姿P的链式求导公式:

再说由粗到精的优化,作者认为渲染的RGB图像有大量伪影,因此直接拿整张图象来优化位姿会导致很大漂移。所以GS-SLAM的做法是,先渲染一个1/2分辨率的图像,用这个粗糙图像计算光度损失得到位姿,再用这个粗糙位姿去选择/过滤3D高斯表征。然后用更新的3D高斯去渲染全分辨率图像,再次计算光度损失优化位姿。

这里还涉及到两个关键帧选取的策略,一个是计算当前帧中可靠区域占整体图像的比例,一个是计算当前帧和上一个关键帧的时间差。

最后的BA优化也有个trick,将BA分为前后两阶段,先优化场景,再联合优化位姿和场景,作者认为这样能够增加优化的稳定性。

关注知乎@3D视觉工坊,第一时间获取3D视觉(工业3D视觉、SLAM、自动驾驶、三维重建、无人机)行业最新最前沿论文和科技动态。

5. 实验结果

测试数据集包括Replica和TUM,运行设备是5.50GHz Intel Core i9-13900K CPU和4090 GPU,Replica上的帧率是8.34 FPS。

Replica上的跟踪精度对比,对比的Point-SLAM帧率是0.42 FPS。

Replica上的重建精度对比,对比方案是其他NeRF SLAM,平均精度达到了74%。

Replica上稠密重建的定性对比,重建效果不是很平滑,不知道是不是3D高斯的固有弊端。

TUM上的跟踪精度对比,定位精度比很多NeRF SLAM都好,但不如ESLAM,而且远不如传统SLAM。

Replica上渲染精度的定量对比,GS-SLAM在所有指标上都最优,甚至帧率达到了386 FPS,比第二的Vox-Fusion快了100倍。

Replica上渲染精度的定性对比,这个渲染质量很好。

运行时间、参数量、内存占用的对比,GS-SLAM不需要解码器,但是整体的运行速度不是太快,而且场景占用的内存也太大了,作者认为是用来建模稠密场景的3D高斯点太多了。

三个消融实验,分别验证3D高斯生成/删除策略、深度监督、由粗到精位姿优化的影响。

6. 总结

本文介绍了最新的NeRF SLAM方法GS-SLAM,主要是结合了3D Gaussian Splatting实现了超快的渲染速度(386 FPS)和精度,对于VR、自动驾驶、导航等应用有价值,但是整个SLAM框架的运行速度和定位精度并没有提高多少,感觉还需要进一步优化。

关注知乎@3D视觉工坊,第一时间获取3D视觉(工业3D视觉、SLAM、自动驾驶、三维重建、无人机)行业最新最前沿论文和科技动态。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/610590
推荐阅读
相关标签
  

闽ICP备14008679号