论文阅读笔记之
《MASt3R-SLAM: Real-Time Dense SLAM
with 3D Reconstruction Priors》

Catalog
    目录


      引言

      最近帝国理工(Imperial College London)新出了实时单目稠密SLAM,从demo中可以看到有如下几个特性: 首先是可实时运行,虽然部分mapping的几何一致性有待加强,但是毕竟能实时单目稠密三维重建,可以说是是相当impressed了。 其次是鲁棒性比较强,虽然重定位、回环这些都是老生常谈的功能了,但是作者通过遮挡镜头以及zoom in/out的方式来测试,都能够很好的handle这些特殊情况。 而本作从某种程度上,更是开启了SLAM的新范式,不再进行2D的匹配而是直接通过3D匹配,也就是所谓的“two-view 3D reconstruction and matching prior”来实现SLAM。 最后作者应该是打算开源代码的,后续开源了进行测试一下,而本博文先对论文其及相关的基础工作DUSt3R和MASt3R进行阅读。


      DUSt3R: Geometric 3D Vision Made Easy

      CVPR2024
      DUSt3R project website (有互动插件)

      DUSt3R理论解读

      DUSt3R其实就是实现从2D图像到3D点云的转换,但是它不需要任何相机校准或视点姿势的先验信息,就可完成任意图像的密集或无约束3D重建。 传统的三维重建基本都是基于MVS(Multi-view stereo reconstruction)的原理,它的第一步就是估算相机的内参与外参(pose)。此外,这个过程包含了特征点的tracking与matching、sfm,BA优化等一系列步骤,每一步都可能存在误差并将noise传递到下一步,最终导致重建的不准确。同时也使得SLAM系统额外的庞大。
      而DUSt3R(Dense and Unconstrained Stereo 3D Reconstruction)则是提供新的范式,它不需要相机的内参与外参,只需要输入双目图像,就可以输出对应的3D点云。 作者将成对的重建pairwise reconstruction)问题转换为点图(pointmaps)的回归,进而不再需要相机的投影模型。而当场景中有多于两张照片时,DUSt3R通过相应的global alignment strategy来将所有的点图对齐,进而生成最终的3D model 以及深度信息。
      所谓的“global alignment strategy”其实是参考BA的思想,通过在3D空间直接优化相机的pose以及场景的几何结构。

      Image description
      图上方的DUSt3R网络结构是基于Transformer encoders and decoders
      图下方从左到右分别为图像-彩色点云-渲染的3D模型(rendered with shading)
      SfM恢复的是稀疏的3D map以及相机的pose;而MVS则是稠密重建,但是需要相机的内参以及pose。而DUSt3R则是不需要相机的内参以及pose,只需要图像输入即可。 此外,最近比较火的spatial AI应该也是以“direct RGB-to-3D”为目标的。
      Image description
      什么是Pointmap?(个人觉得其实可以理解为彩色点云,只是跟相机的pixel为一一对应关系,在相机坐标系)
      相机内参已知的情况下,pointmap可以由深度图投影得到。如下面公式
      Image description
      然后通过regression loss来训练网络
      Image description
      同时网络除了输出pointmap以外,还输出了不同区域对应发的confidence map for each pixel。如下图所示
      Image description
      整体的framework如下图所示:
      Image description
      网络结构(更详细的理论学习略,基于CroCo及其v2)
      同时,DUSt3R还设计了不同的下游任务,比如point matching、相机的内参估计、相机的相对位姿估计等。注意这里的下游任务相当于by-product是基于所产生的3D pointmaps进一步生成的,而本身pointmaps的生成是不依赖于这些的。
      个人更直观一些的理解就是:DUSt3R是一种learning-based的3D reconstruction,但是跟NeRF、3DGS这些不一样,它不需要相机的内参以及pose只需要图像输入即可。
      PS:当然NeRF或3DGS也有不需要pose先验的工作,也就是Full-SLAM的工作,但是还是额外设计成SLAM的架构,如PTAM等估算位姿,但是DUSt3R完全就没有估算位姿这一个过程,因此更加直观的说就是一个网络(同时封装了场景的几何结构、2D与3D点之间的关系,2个viewpoint之间的关系),仅输入图像就实现三维重建(associate the 2D pixel with 3D shapes)。
      通过实用一个简单的regression loss,采用带label(合成的、sfm生成的、其他传感器提供的)的8个大型公开数据集来训练模型(目前作者开源的github中包含的数据如下图)。
      Image description

      并且,DUSt3R并没有针对特定模块进行进行设计,而是基于通用的transformer结构采用完全的data-driven 的策略。
      实验显示,DUSt3R在单目/多视图深度估计以及相对位姿估计三个任务上,均取得SOTA。
      Image description


      DUSt3R实验测试

      按照github的安装步骤 DUSt3R Github也可参考My Comment on DUSt3R

      Image description
      Image description
      Image description
      任意选两张图片的三维重建效果(同时恢复相机的pose)
      DUSt3R可视化效果如下:
      与3DGS的对比效果:
      与Instant-NGP的对比效果:
      效果比起3DGS也不遑多让,比Instant-NGP则是好太多了。并且前面两者都是需要训练特定场景以及需要COLMAP。数据为iPhone 12 pro采集我的桌面。


      Grounding Image Matching in 3D with MASt3R

      ECCV2025
      MASt3R project website

      MASt3R理论解读

      MASt3R (Matching And Stereo 3D Reconstruction)跟DUSt3R都是来自于NAVER LABS Euro团队的作品。在有了前作DUSt3R之后,作者开始探索从3D的角度来实现图像匹配(dense correspondences), “aim at producing a list of pairwise correspondences (matches), given two images”(其实在DUSt3R的附加功能中,也已经有这个function的了,属于by-product) 也可拓展成camera calibration, camera pose estimation, 3D reconstruction 等任务。
      图像匹配(Image Matching)是3D视觉中所有性能最佳的算法和pipeline的核心组件。然而,虽然匹配从根本上来说是一个3D问题(与相机姿态和场景几何结构有内在联系),但是通常匹配都被视为一个2D问题。 本文使用 DUSt3R(一种基于 Transformers 的最新且强大的 3D 重建框架)将匹配作为 3D 任务。 DUSt3R方法基于点图回归(pointmaps regression),在具有极端视点变换的情况下,仍然可以实现良好的匹配效果,但精度有限。而本文的目标则是是提高匹配的能力,同时保持其鲁棒性。 作者采用“new head”(应该是在DUSt3R前额外加一个network)来输出稠密的local features,并且添加matching loss来进行训练,进而提升DUSt3R的性能。 并且,作者引入了一种快速相互匹配方案(a fast reciprocal matching scheme),该方案不仅可以将匹配速度提高几个数量级,而且还具有理论保证以及提升效果。

      Image description Image description Image description Image description
      在极端视点变换的情况下,仍然可以实现良好的匹配效果
      从上面的两两视觉匹配的效果来看,可以说是相当impressed了,尤其是有些测试的场景甚至连人眼也很难分辨出来,但是MASt3R却能够很好的handle这些特殊情况(还包括了不同的光照条件)。
      传统的图像匹配方法主要分为三步:
    • 1. first extracting sparse and repeatable keypoints,
    • 2.then describing them with locally invariant features,
    • 3. and finally pairing the discrete set of keypoints by comparing their distance in the feature space.
    • 这个pipeline有几个优点:关键点检测器在低到中等光照和视点变化下都是精确的,关键点的稀疏性使问题在计算上很容易处理,无论何时在类似条件下查看图像,都能在毫秒内实现非常精确的匹配。这也使得像SIFT以及COLMAP等方法在很多场景下都是非常有效的。
      但是,基于关键点的方法通过减少对关键点包问题的匹配,丢弃了对应任务的全局几何上下文。 这使得它们在重复模式或低纹理区域的情况下特别容易出错,这实际上对于局部描述符来说是不适定的。 解决这个问题的一种方法是在配对步骤中引入全局优化策略,通常利用一些学习到的匹配先验知识(例如SuperGlue等learning-based 方法)。 但是还是得依赖于关键点的检测,如果关键点及其描述符没有编码足够的信息,那么仅仅在匹配期间利用全局上下文可能为时已晚。
      因此,另一个方向是考虑密集整体匹配(dense holistic matching),也就是完全避免关键点,并一次匹配整个图像。例如基于cross-attention的LoFTR等等,这些方法将图像视为一个整体,生成的稠密的匹配(dense correspondences),并且对于重复模式和低纹理区域也是鲁棒的。
      但是这些方法也都是基于2D的匹配。即使像LoFTR这么好的方法,在Map-free localization benchmark上的精度也不高。作者认为这是因为这些方法都将匹配问题视为图像平面上的2D问题。但是实际上,匹配任务的制定本质上是一个 3D 问题:所谓的匹配,要对应的像素是观察的相同的3D点的像素。
      Image description
      结构跟DUSt3R类似,但是多了一个head来输出local features,并且额外添加了matching loss来进行训练。此外还有针对matching的fast reciprocal matching scheme
      Map-free localization benchmark是一个来自于ECCV 2022的工作. "an extremely challenging dataset aiming at localizing the camera in metric space given a single reference image without any map. It comprises a training, validation and test sets of 460, 65 and 130 scenes respectively, each featuring two video sequences."
      采用的评价指标为“Virtual Correspondence Reprojection Error (VCRE) and camera pose accuracy”
      Image description
      在Map-free localization benchmark上表现最佳


      MASt3R实验测试

      按照github的安装步骤 MASt3R Github也可参考My Comment on MASt3R
      测试匹配效果(跟作者给出的效果差不多,注意要避免有其他进程还在运行会影响匹配的效果 kill -9 PID

      Image description
      github给出的结果
      Image description
      匹配数为20的效果
      Image description
      匹配数为50的效果
      Image description
      大视差下的效果
      下面用我的桌面的两张图片进行匹配的效果
      Image description Image description
      再用一张桌面的图片与柯南进行匹配,看误匹配的效果:
      Image description
      两张柯南的图片匹配效果:
      Image description
      MASt3R测试匹配效果的代码链接
      DUSt3R测试匹配的效果代码
      MASt3R可视化效果如下:


      MASt3R-SLAM: Real-Time Dense SLAM with 3D Reconstruction Priors


      理论解读

      在MASt3R提供的a two-view 3D reconstruction and matching prior基础上,作者通过引入有效的pointmap matching, camera tracking and local fusion, graph construction and loop closure, 以及second-order global optimisation,提出了MASt3R-SLAM,一个实时的单目稠密SLAM系统(可以实现15FPS的定位及稠密三维重建)。 同时,MASt3R原本就不依赖于camera的model,那么就可以实现reconstructing scenes with generic, time-varying camera models(也就是demo中zoom in zoom out的情况下的稳定三维重建).当然要达到在多个benchmark上的SOTA performance,还是需要“已知的标定参数”,但是这一点也不难,只是做相机标定而已~
      PS:其实MASt3R的by-product或者MASt3R-sfm都可以实现定位的功能,加上原本的mapping就已经是一个full-SLAM的,但是都是离线式的。对于SLAM系统来说需要增量式接受数据以及实时,因此这也就是MASt3R-SLAM的意义所在。实时性以及一些列高效的处理(low-latency matching, careful map maintenance, and efficient methods for large-scale optimisation)

      Image description
      先通过MASt3D来预测pointmap以及实现3D pixel matching; tacking 模块负责估算当前的pose以及local pointmap fusion; 通过查询由MASt3D的feature产生的检索数据库实现loop closure,如果检测到足够的匹配对数就会构建边(edge)然后通过second-order global optimisation来优化后端实现全局一致性的位姿估计与稠密重建。
    • Pointmap Matching: 通过MASt3D来获取pointmaps以及对应的features(用来做matching的)。对于DUSt3R采用的是k-d tree来进行匹配,而MASt3R也提出了coarse-to-fine的策略(也就是前面所提到的a fast reciprocal matching scheme),但是这两者的实时性都不够(dense pixel matching都是秒级别的),作者则是提出基于最优化的方法来实现实时的匹配(个人觉得跟重投影误差有点像,通过最小化距离可以转换为下图所示的角度θ)。
      而通过 Levenberg-Marquard算法来计算大概10代左右就可以收敛。
    • Image description

    • Tracking and Pointmap Fusion:从公式上看也就是3D-3D的匹配,不断的优化pose。
    • Image description

      而至于graph construction以及loop closure基本都是MASt3R-sfm的改进部分,毕竟MASt3R已经实现了匹配了,如何管理图或者回环仅仅是框架设计的问题而已~ 比较有意思的一点是,作者在论文中提到“inspired by both filtering and optimisation techniques in SLAM, we perform local filtering of pointmaps in the frontend to enable large-scale global optimisation in the backend.”但是感觉也就是前端算是一个coarse estimation后端就是一个second-order optimisation scheme(当然也可能是理解有误,后续具体看看代码的实现)。
      接下来看看benchmark下的效果(our*就是未知内参矫正的)
      Image description
      Image description
      可以看到效果比起DROID-SLAM以及DPV-SLAM(DPVO的SLAM版本)都是要好一些的,当然数值上不太明显,可能是测试的序列没有太难


      实验测试

      waiting for the code to be released in MASt3R-SLAM Project Website


      参考资料