引言
最近帝国理工(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
CVPR2024DUSt3R 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以及场景的几何结构。
SfM恢复的是稀疏的3D map以及相机的pose;而MVS则是稠密重建,但是需要相机的内参以及pose。而DUSt3R则是不需要相机的内参以及pose,只需要图像输入即可。
此外,最近比较火的spatial AI应该也是以“direct RGB-to-3D”为目标的。
相机内参已知的情况下,pointmap可以由深度图投影得到。如下面公式
然后通过regression loss来训练网络
同时网络除了输出pointmap以外,还输出了不同区域对应发的confidence map for each pixel。如下图所示
整体的framework如下图所示:
同时,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中包含的数据如下图)。
并且,DUSt3R并没有针对特定模块进行进行设计,而是基于通用的transformer结构采用完全的data-driven 的策略。
实验显示,DUSt3R在单目/多视图深度估计以及相对位姿估计三个任务上,均取得SOTA。
DUSt3R实验测试
按照github的安装步骤
DUSt3R Github也可参考My Comment on DUSt3R
DUSt3R可视化效果如下:
Grounding Image Matching in 3D with MASt3R
ECCV2025MASt3R 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),该方案不仅可以将匹配速度提高几个数量级,而且还具有理论保证以及提升效果。
从上面的两两视觉匹配的效果来看,可以说是相当impressed了,尤其是有些测试的场景甚至连人眼也很难分辨出来,但是MASt3R却能够很好的handle这些特殊情况(还包括了不同的光照条件)。
传统的图像匹配方法主要分为三步:
但是,基于关键点的方法通过减少对关键点包问题的匹配,丢弃了对应任务的全局几何上下文。 这使得它们在重复模式或低纹理区域的情况下特别容易出错,这实际上对于局部描述符来说是不适定的。 解决这个问题的一种方法是在配对步骤中引入全局优化策略,通常利用一些学习到的匹配先验知识(例如SuperGlue等learning-based 方法)。 但是还是得依赖于关键点的检测,如果关键点及其描述符没有编码足够的信息,那么仅仅在匹配期间利用全局上下文可能为时已晚。
因此,另一个方向是考虑密集整体匹配(dense holistic matching),也就是完全避免关键点,并一次匹配整个图像。例如基于cross-attention的LoFTR等等,这些方法将图像视为一个整体,生成的稠密的匹配(dense correspondences),并且对于重复模式和低纹理区域也是鲁棒的。
但是这些方法也都是基于2D的匹配。即使像LoFTR这么好的方法,在Map-free localization benchmark上的精度也不高。作者认为这是因为这些方法都将匹配问题视为图像平面上的2D问题。但是实际上,匹配任务的制定本质上是一个 3D 问题:所谓的匹配,要对应的像素是观察的相同的3D点的像素。 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”
MASt3R实验测试
按照github的安装步骤
MASt3R Github也可参考My Comment on MASt3R
测试匹配效果(跟作者给出的效果差不多,注意要避免有其他进程还在运行会影响匹配的效果 kill -9 PID
)
下面用我的桌面的两张图片进行匹配的效果
再用一张桌面的图片与柯南进行匹配,看误匹配的效果:
两张柯南的图片匹配效果:
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)
而通过 Levenberg-Marquard算法来计算大概10代左右就可以收敛。
接下来看看benchmark下的效果(our*就是未知内参矫正的)
实验测试
waiting for the code to be released in MASt3R-SLAM Project Website