MASt3R-SLAM
阅读MASt3R-SLAM的代码,重点关注检索、回环部分
通过MASt3R_ViTLarge_BaseDecoder_512_catmlpdpt_metric_retrieval_trainingfree生成特征进行检索,track成功进行全局因子图优化,track失败则回环检测,检测成功则再因子图优化,优化成功就可以继续,但是如果失败就直接continue,不添加到keyframe?MASt3R-SLAM 系统中的 RetrievalDatabase 并非传统的词袋模型,而是一个基于深度学习特征的高效图像检索系统复杂度相对于图像数量是准线性的(nearly linear),非常适合大规模场景
VGGT-LONG的论文和代码,重点关注里面回环检测相关的技术
VGGT-Long 的流程遵循:“Chunk it → Loop it → Align it” 的三阶段设计。回环匹配(Loop it)是在 chunk 分块并推理前,就对整个序列完成的,从而提前确定哪些块需要进行回环对齐
VGGT-SLAM的论文和代码,注意它是如何做回环检测的;
关于使用DINO进行回环检测,需要确认:
MoGe、DUSt3R、MASt3R、VGGT等模型,是否都拥有DINO的部分?
MoGe用大规模 DINOv2 特征作为初始化,在此基础上微调
DUSt3R/MASt3R直接基于 DINOv2 提取 dense patch features。在大规模图像对(CO3D, MegaDepth, ScanNet 等)上 微调(finetune) DINOv2 的特征,使其更适合 dense matching + geometry regression。
VGGT使用 DINOv2 (ViT-L/14),在此基础上微调
这些模式是否重新训练or微调了DINO?
实验部分:尝试一些回环检测的技术
VGGT-LONG涉及的几种回环检测
DINO相关的回环检测
VGGTLONG
| DPRetrieval | 深度特征,准确度高,需 GPU | 推荐场景,精度要求高 |
|---|---|---|
| DBoW2 + LoopModelDBoW | 经典 ORB 词袋 + Python 封装 | CPU-only 或无 GPU 环境 |
| LoopModels (CNN特征) | 基于 CNN 特征的回环检测 | GPU 但不想用 DPRetrieval 时备用 |
| fastloop | 快速简化实现 | 实时性要求高、资源有限时 |
DBoW2/
- 包含 C++ 实现的原始 DBoW2 词袋模型(ORB 特征 + BoW)。
- 用于 CPU-only 场景,可编译构建为 Python 调用模块。
- 通常可选安装,非必需,因为深度特征方法
DPRetrieval(GPU 前提)精度更高GitHub+1。
DPRetrieval/
- 封装基于
dpretrieval.DPRetrieval的深度视觉检索模块。 - 基于 ResNet/ViT 等深度特征 实现更精确的视觉位置检索。
- 是 VGGT-Long 默认推荐的回环检测方式,准确度高但依赖 GPU。
LoopModelDBoW/
- 包含 Python 封装的 DBoW 检索接口,实现将图像缓存、索引、查询、NMS、连续帧验证等流程。
- 与
DBoW2/形成配合,由RetrievalDBOW类调用 C++ 模块(如果编译了)或dpretrieval替代。
LoopModels/
- 包含基于 CNN 特征的回环检测模型,例如
LoopDetector。 - 提供另一类回环检测方法:基于 CNN 特征提取 + 检索匹配 的方式(DNIO v2)。
- 用于 GPU 下可选且不同于 DPRetrieval 的另一种方案。
fastloop/
- 一个更轻量、加速的回环检测模块,可能针对快速匹配场景做了简化实现。
- 例如用于快速筛选高概率 loop 对,减少计算量。
- 虽然名称含 “fast”,实际处理流程可能比
LoopModels更精简。
不同模块实现不同的回环检测方式,包括传统 ORB 词袋(DBoW2)、深度 VPR(DPRetrieval)、CNN 检测(LoopModels)、简化加速版本(fastloop)。
为什么并存 DBoW2 与 DPRetrieval:
- DBoW2 支持 CPU-only 使用,不依赖深度模型;
- DPRetrieval 则是更现代、更准确但依赖 GPU 的方法。
fastloop 与 loopmodel 两者的差异:
- fastloop 是轻量快速的实现,追求速度;
- loopmodel(LoopModels)则基于深度模型或 CNN 提取特征,准确度更高但较复杂。
MASt3R-SLAM
. MASt3R 预测 & 点云匹配(Two-view prior)
- 通过
thirdparty/mast3r模型,对输入帧对生成 pointmaps(稠密每像素三维点)和 matching features。 - 在
mast3r_slam中调用这个模块,将点云统一映射到一个公共坐标系,用于后续匹配edexheim.github.io+2LearnOpenCV+2。
SLAM 中的意义:用 MASt3R 提供的两帧 3D 重建先验,为跟踪与映射提供几何基础。
2. 前端 Tracking & 局部 Pointmap 融合
- 用 Iterative Projective Matching(IPM) 技术,在当前帧与关键帧之间进行角度最小化匹配,以估计相机位姿并执行局部融合LearnOpenCV+2edexheim.github.io+2。
- 融合多个点云预测,滤除噪声,提高局部几何一致性。
SLAM 中的意义:实现相机的位姿追踪(Localization)并构建密集局部地图。
3. 关键帧图构建 & 回环检测(Backend Loop Closure)
- 关键帧被选择加入地图后,使用 MASt3R feature 检索(ASMK)查询回环候选帧。
- 解码候选帧并验证匹配质量,如果足够加入图中新的边OpenCV+1。
SLAM 中的意义:实现 Loop Closure(回环),纠正累积 drift 并连接地图结构。
4. 全局图优化 & second-order 优化
- 构建相机 pose graph,使用 Gauss-Newton 优化(2nd order) 方法优化整个图结构,确保全局轨迹和地图一致性edexheim.github.io+1。
- 该方法相比传统 first-order 梯度下降收敛更快,适用于大规模 SLAM 系统。
SLAM 中的意义:实现 Pose Graph Optimization,提高全局一致性与几何准确性。
5. Relocalization(重定位)
- 当追踪失败时,通过检索历史关键帧进行重定位。系统利用 MASt3R 特征检索恢复当前帧与地图的相对位姿。
SLAM 中的意义:提高鲁棒性,使系统能在短暂丢帧后快速恢复。
[ main.py ] ─> 初始化 MASt3R model + config
↓
For each frame:
↓
[ MASt3R 模型 ] → 生成 pointmap + features
↓
[ 前端 Tracking + IPM 匹配 ] → 位姿估计 + 局部融合
↓
若为关键帧 → 加入关键帧列表
↓
[ 回环检索(特征检索) ] → 候选关键帧
↓
[ 验证匹配 ] → 若通过 → 加入图边
↓
[ 全局图优化(Gauss-Newton) ] → 更新全局 pose + geometry
↓
输出 pose 轨迹 & dense map


