赞
踩
3D Gaussian Splatting在NeRF领域很火,很大程度上提高了NeRF的渲染速度和质量,但是在NeRF-based SLAM上还没有应用。
今天笔者将为大家分享上海AI Lab、复旦大学、西北工业大学、香港科技大学最新的开源工作GS-SLAM,结合了NeRF、3D Gaussian Splatting、SLAM三者的优点,渲染速度达到了386 FPS,渲染质量也很高。
当然笔者水平有限,如果有理解不当的地方,欢迎大家批评指正~
GS-SLAM结合3D高斯实现了实时的跟踪和NeRF建图,渲染速度非常快,达到了386 FPS。需要泼冷水的是,这个速度指的只是渲染,整个SLAM框架的运行速度(8.34 FPS)和定位精度没有提升太多。
代码暂未开源,感兴趣的读者可以跟踪一下具体进展。
标题: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
在本文中,我们首先介绍了在同时定位与地图构建( SLAM )系统中使用3D高斯表示的GS-SLAM。它有利于在效率和准确性之间取得更好的平衡。与最近使用神经隐式表示的SLAM方法相比,我们的方法使用了一个实时可微的splatting渲染管道,为地图优化和RGB - D重新绘制提供了显著的加速比。具体来说,我们提出了一种自适应的扩展策略,添加新的或删除有噪声的3D高斯,以便有效地重建新的观测场景几何,并改善先前观测区域的建图。这种策略对于扩展3D高斯表示来重建整个场景至关重要,而不是在现有的方法中合成一个静态物体。此外,在位姿跟踪过程中,设计了一种有效的由粗到精的技术来选择可靠的3D高斯表示来优化相机位姿,从而减少运行时间并实现鲁棒估计。我们的方法在Replica,TUM-RGBD数据集上与现有的最先进的实时方法相比取得了有竞争力的性能。
传统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、自动驾驶、三维重建、无人机)行业最新最前沿论文和科技动态。
测试数据集包括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高斯生成/删除策略、深度监督、由粗到精位姿优化的影响。
本文介绍了最新的NeRF SLAM方法GS-SLAM,主要是结合了3D Gaussian Splatting实现了超快的渲染速度(386 FPS)和精度,对于VR、自动驾驶、导航等应用有价值,但是整个SLAM框架的运行速度和定位精度并没有提高多少,感觉还需要进一步优化。
关注知乎@3D视觉工坊,第一时间获取3D视觉(工业3D视觉、SLAM、自动驾驶、三维重建、无人机)行业最新最前沿论文和科技动态。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。