Skip to main content

Direct Methods: DSO & LSD-SLAM (直接法 SLAM 解构)

Published: LSD-SLAM (Engel ECCV 2014); DSO (Engel T-PAMI 2018, arXiv 1607.02565); SVO 2.0 (Forster T-RO 2017) —— TUM CV group / UZH RPG 核心定位: 主流视觉 SLAM没有走的那条路。直接法跳过特征、直接在原始亮度上最小化光度误差 —— 在富梯度场景下赢,在闭环与长期一致性上输。
Status: v1。数字 UNVERIFIED。 TL;DR: 直接法证明了可以不用描述子做视觉 SLAM —— 在高梯度区域直接对像素亮度做 tracking 与建图。子像素精度、半稠密地图免费送。代价:光度标定非搞不可、曝光变化静默毁掉一切、闭环没解决。DSO 作为 DROID-SLAM 和 feed-forward 稠密方法的祖先而幸存。 X-Ray. 特征 SLAM 留角点(~99% 丢掉)。直接 SLAM 留所有梯度像素(~2000–10k/帧)。前端更轻、子像素、半稠密地图。但光度标定强制、曝光变化致命、闭环未解。这个领域押注 features 有原因;DSO 是解释这个押注为什么对的 demo。

📍 研究全景时间线

DSO 是经典直接 SLAM 的顶点:~2000 个稀疏 residual、光度标定、完整滑窗优化。DSO 之后,注意力转向 learned dense(DROID-SLAM)。

1 · 架构

1.1 根本分歧

1.2 ⚡ Eureka Moment

“你不需要识别一个像素是什么 —— 只需要它在被正确重投影时亮度保持不变。”
押下这个赌注,descriptor 提取、匹配、feature-based BA 都消失。你拿到子像素精度和半稠密地图;你交出闭环、光照鲁棒性、scale 恢复。

1.3 DSO 架构(稀疏直接)

LSD-SLAM 跟踪每个梯度像素 + per-pixel 概率深度滤波器 → 半稠密地图。DSO 为了速度故意稀疏。

2 · 数学核心

📌 Napkin Formula

对于帧 i、点 p,经位姿 (R_ij, t_ij) + 逆深度 d_p 投到 j;最小化经 affine-brightness 校正后的亮度差。(a, b) = 每帧曝光参数。 直觉: (a, b) 是挡在你和”曝光导致 crash”之间的那一层。DSO 的不变量是光度,ORB-SLAM3 是几何 —— 各自有各自的崩溃方式。滑窗约 7 个 KF;直接法追求局部完美,不是全局一致。

3 · 模式例子

同一条走廊,两种光照场景: DSO 在干净场景赢,在真实世界光照下输 —— features 在 production 占主导的原因。只有相机级光度预标定(response + vignette)才能让 DSO 在户外跑下去。

4 · 工程:何时选直接法

模式: 直接法 → 研究 / 稠密建图;特征法 → 量产。例外:摄影测量(BundleFusion 风格的后处理稠密对齐)。 SVO 的中间路线: 半直接 VO(Forster):选点用 feature,tracking 用光度(子像素直接对齐)。drone 上 100+ Hz 出货 UNVERIFIED;UZH RPG 谱系。如果非选一个”能部署的直接法”,是 SVO,不是 DSO。

5 · 数据与评测

DSO —— TUM mono + EuRoC:在友好序列上直接法 translational 比 features 好 2–3× UNVERIFIED。LSD-SLAM —— TUM RGB-D 半稠密重建。⚠️ 两者都室内 + 光度已标定。户外 / aerial / 没标过的手机就是另一个故事。

6 · 能力与失败模式

优势: 子像素 tracking;免费的半稠密地图;嵌入式 CPU 占用更低;显式光度标定。 劣势: 曝光 / 光照变化(#1 杀手);闭环未解(没 descriptor → DBoW2 不适用);大位移破坏线性化;梯度稀少区失败。

6.1 Hidden Assumptions

  • 亮度恒定 —— 立项前提。自动曝光 / HDR / 闪烁 / 阴阳交界违反它。仿射 (a,b) 只修全局偏移。
  • 帧间小运动 —— 激烈运动 → 线性化间隙 → tracking 丢。
  • Lambertian 表面 —— 镜面(玻璃、抛光地板)在运动中破坏亮度恒定。
  • 光度标定可用 —— 大部分用户跳过实测 response + vignette → 静默退化。
  • 不需要闭环 —— 非回路轨迹 → 漂移无界。

6.2 GitHub 实地失败(atlas 联动)

  • GitHub-validated:DSO 在自录手机数据上反复触发 Assertion 'std::isfinite' failed (#123, 9 reactions) — 与 §6 “光度可标定 / Lambertian / 亮度恒定” 三条假设的同时破裂直接对应;textureless / use-after-free (#251 / #269) 是同源症状,详见 github_failure_atlas.md。
  • GitHub-validated:DSO 输出无时间戳 (#237 6 reactions) 让 EVO 评测直接卡 — 教学读源码 OK,做 benchmark 要自己补 timestamp pipeline;最近 merged PR 停在 2017–2018,Engel 已转 Meta / RealityLabs,这是学术冻结,详见 github_failure_atlas.md。
  • GitHub-validated:LSD-SLAM 被 ROS 1 + Ubuntu 14.04 锁死(#330 / #302 / #290 build 失败、#321 / #351 / #348 运行时崩、#350 教学提问自 2020 无人回),完全 frozen — 只剩博士论文 chapter 用途,详见 github_failure_atlas.md。

7 · 比较 & 面试 Tip

🎤 Interview Tip. “DSO 精度更好,直接法为什么没赢?” —— 正确答:“闭环与曝光不变性。直接法优化的是正确的局部目标,但没继承全局 place-recognition 基元;亮度恒定在没有受控光度标定的场景下很难强制。ORB-SLAM3 让一个较差的局部目标在全局上能用;DSO 让一个较好的局部目标在全局上崩。” 错答:“DSO 更差” —— 它是结构性不同。

Boundary


References


← Back to Classical SLAM