085|DSO:用少量像素联合优化,而不是用尽所有像素
返回总览 · 上一篇:ElasticFusion · 下一篇:EuRoC
论文:Jakob Engel、Vladlen Koltun、Daniel Cremers,Direct Sparse Odometry,首次公开于 2016 年。论文 v2 · 官方实现。
先接住前作的问题
LSD-SLAM用直接跟踪和半稠密深度建立地图,但滤波式深度与位姿的处理限制了联合优化;DSO 转向少量像素的窗口联合估计。它和ORB-SLAM是光度残差与特征重投影的平行选择。
五个前置概念
- 逆深度:以距离倒数表示点的位置,便于远点及三角化不确定性处理。
- 光度误差:几何投影后,对相应位置亮度的差异建模。
- Schur 补:在线性系统中消去一组变量,保留其对剩余变量的作用。
- 规范自由度:观测无法决定的整体坐标或尺度选择。
- 累计误差曲线:统计低于不同阈值的运行数量,同时展示失败和精度。
一、问题设定:少量像素怎样支持位姿深度和亮度的联合估计
视觉定位常走两条路:先找到能匹配的特征点,再最小化几何误差;或者直接比较像素亮度,找使图像对齐的相机运动。直接法又常与稠密重建绑定,计算量随大量深度变量增长。
问题与假设
输入是相机视频和标定,输出是相对轨迹与稀疏三维点。这不是强化学习:没有奖励和动作训练。单目几何通常只能恢复到整体尺度,评价时采用的 Sim(3) 对齐也正反映这一点。
“直接/间接”描述误差建立在原始亮度还是提取后的几何观测上;“稀疏/稠密”描述使用的数据与几何表示。两个分类轴相互独立。DSO 不是因为少用了特征描述子就变成稠密方法,也不是首次出现任何形式的稀疏直接估计;论文在背景中讨论了更早的相关工作。
直接法可以使用边缘和缓慢亮度变化,不要求每个点都是独立可识别的角点。但完全均匀的白墙仍然没有足够图像梯度:沿某些运动方向,多个位姿都能产生相同亮度。这是可观测性问题,不是增加迭代次数就能解决。
论文采用针孔投影并预先去畸变,假设场景在跟踪期间足够静态,前端能给出局部优化所需初值。滚动快门和错误几何标定产生的位移不符合这个简单模型,是重要边界。
二、校准光度残差,再组织窗口变量与边缘化
1. 曝光变化不应被误认为相机移动
第 2.1 节的图像形成模型为 : 是响应函数, 是曝光时间, 是暗角影响, 是入射辐照度。模型先校正响应和暗角,再在跨帧比较中处理曝光和剩余仿射亮度变化。
若同一片墙只是因为自动曝光变亮,算法应该调整亮度关系,而不是移动相机去寻找一个更暗的位置。已知曝光、响应标定和仿射参数各解决不同问题,不能互相随意替代。
2. 一个点为什么只有一个深度变量
点固定在宿主帧像素射线上,因此未知的是沿射线的位置,用逆深度 表示。另一帧的预测位置为:
这里 把世界点变换到第 帧相机系。与自由优化三维坐标相比,宿主像素已定义了两项方向自由度,因此剩一个逆深度变量。它不意味着三维世界只有一维。
3. 核心光度目标
第 2.2 节的单个像素残差可以写为:
是亮度变换参数;对点周围的八像素模式累积鲁棒加权残差,再对窗口中的点和观测求和。Huber 代价降低异常值影响,但不是任意错误对应的自动免疫机制。
梯度较大的像素既有信息,也对小几何偏差敏感。论文选点时寻找足够梯度,残差加权时又适度降低极高梯度的影响;两步目的不同,不矛盾。邻域模式提供约束,但不意味着加入了跨不同三维点的深度平滑先验。
4. 联合优化与边缘化
默认窗口最多七个关键帧,共约两千个活动点。两千是跨窗口的活动点目标,不是每帧都永久加入两千个优化变量。每帧先产生候选,通过极线搜索获得深度初值,再择优激活。
老变量通过 Schur 补消去,形成二次先验。先验固定在线性化点附近,不能无限次像原始非线性测量一样重新解释。为保持稀疏结构,论文还丢弃某些残差,并明确承认这一取舍。因此“联合优化”不等于保存所有历史信息,也不是全局最优保证。
消掉旧变量,为什么还留下一条约束
设 是保留变量增量、 是待消去的旧变量增量;在固定线性化点,二次能量写作
若 可逆,令对 的导数为零得到 ,代回后保留的系数为 、。这里采用能量含正号 的约定,故正规方程右端为 ;不能与另一种把负号收入 的写法混用。
原创教学例。 表示旧变量 既观测到 2,又与当前变量 关联。最小化得到 ,留下 。直接丢掉涉及 的项会让 毫无约束;把 永久固定为 2 则留下 ,错误地给了两倍曲率。正确消元同时保留信息和不确定性。
这只是局部二次系统的等价消元;非线性投影以后发生变化,旧测量已不能从二次先验完整恢复。原文 2.3 节还说明部分观测被主动丢弃以维持稀疏性。图 18 的关键帧频率现象应放在这个框架下读:更早边缘化改变的是信息冻结时机,而不只是窗口里的帧数。
数学目标是光度残差;机制改变是稀疏采样、联合窗口优化及标定;实验改善才是轨迹误差与失败率。低光度损失不直接等于正确三维几何。
稀疏选择降低变量规模,光度参数与几何的联合约束仍需一致。下面把窗口更新和边缘化接起来,再比较声明的里程计模式。
三、执行点选择与联合优化,检查信息分布
5. 教学伪代码
输入:视频、相机几何标定、可用的光度标定与曝光
校正图像响应和暗角;建立初始地图
对新图像:
由运动预测和图像金字塔初始化直接对齐
在当前参考帧上估计位姿与亮度变化
沿极线更新候选点深度区间,剔除歧义或异常点
若视野、平移或曝光变化需要新关键帧:
选择分布均匀且梯度足够的候选
激活有可用深度初值的点,维持活动点预算
联合优化窗口位姿、逆深度、内参和亮度参数
边缘化过旧或冗余帧与相关点,保存二次先验
输出:单目里程计轨迹与点的逆深度
例子与五个前置概念
自构例子,未运行。 一个像素从灰度 80 变到 160。如果曝光正好翻倍且未饱和,亮度变换可以解释变化;强行亮度恒定会产生大残差。但如果相机几何扭曲使投影错了两个像素,仅调亮度不一定能解决。这个例子区分光度参数和位姿参数,数字不来自实验。
四、按光度条件与模式读视觉里程计比较

读图:累计曲线比较关键帧频率,读同一误差阈值下能成功达到的运行数量。更频繁纳入关键帧会更早边缘化旧信息,因此提升采样频率并不保证最终估计更准。
实验设计
图表采用 2016 年 10 月 v2;曝光、响应、暗角与图像扰动是实验变量,不能把后续惯性或回环扩展的性能归到 DSO 原版。
| 项目 | 设置及解释 |
|---|---|
| TUM monoVO | 50 序列、约 105 分钟;提供回环参照,测累计对齐、旋转和尺度漂移,不是完整逐帧真值 |
| EuRoC | 11 序列、约 19 分钟;左右视频分别作为单目输入,裁去起始剧烈手持段;不能称为全段双目惯性评测 |
| ICL-NUIM | 8 个合成序列、约 4.5 分钟;使用真值轨迹评估 |
| 主要对照 | ORB-SLAM 关闭显式回环和重定位,但局部共视关联仍能隐式闭环;另测试只匹配最近 10 秒内观测点的配置 |
| 运行协议 | 正向/反向重复回放;大部分实验不强制实时,另报告 i7-4910MQ 的强制实时结果 |
| 参数控制 | 基本参数跨序列固定;ICL-NUIM 对两方法各调整了特征/梯度阈值,因此该组包含数据集相关调参 |
| 不确定性 | 重复运行反映实现非确定性;不是新的独立采集环境,也不能由重复次数推导跨场景置信度 |
第 4 节先写每方向五次,又说明默认设置每方向十次,图 13–图 14 图注使用十次;文中列出的汇总运行数与默认十次口径并非同一数量。本文保留各配置的区别,不把某个总次数套用到所有曲线。

读图:每格是一次方向与序列的评估;先按各自色标读取,不能用一片蓝色替代失败率和误差数值。

读图:横向不同序列与纵向重复运行共同保留了波动;两种方法应在同一序列位置比较。
五组证据怎样读
图 10、12:总体比较。 累计误差曲线表示有多少运行低于某阈值,失败被赋为无穷误差,因而同时反映精度和失效。作者报告 TUM monoVO 与合成集上的优势;EuRoC 上 ORB-SLAM 更准但稳健性较差。曲线不能简化成“DSO 在所有数据集精度最高”。

读图:纵轴是误差低于横轴阈值的运行数;实线、虚线与带圆点曲线对应不同实时或资源设置。

读图:三个子图横轴不同,纵轴均为满足阈值的运行数;曲线不能跨不同误差定义直接相减。
图 15:光度校正。 逐步去除校正后结果变化,最差的是完全假定亮度恒定。移除单项不总呈严格单调关系,已知曝光的影响也较小;它支持合理亮度模型的价值,不支持每个子模块在所有条件下同样必要。

读图:每条曲线对应一组光度信息可用条件;图例中的亮度常数模型也是单独基线。
图 16:更多点的收益饱和。 论文指出超过约 500 点或七个活动帧后收益较小,默认两千点部分是为得到较密重建。这里的“约 500”来自所测设置,不是相机定位普遍只需要 500 点的定律。

读图:上下图分别改变窗口大小与采样点数;固定窗基线与自适应边缘化的差别需按图例读。
图 18:关键帧过多也可能有害。 少于约每秒四帧削弱稳健性,超过约十五帧反而降低精度;固定窗口下,更多关键帧意味着旧帧更早边缘化,先验可能冻结在较差估计处。这是具体机制解释,不能由此断言任何系统都应固定每秒八帧。
图 20 与第 4.3 节:明确的失败边界。 人工低频几何扭曲显著伤害 DSO,ORB-SLAM 受影响较小。这种扰动模拟部分几何误差,并不等价于完整真实滚动快门成像。相反,直接法在另一些光度噪声条件下有优势,说明关键是误差模型与数据是否匹配。

读图:上方近景框展示扰动怎样改变局部几何,下方颜色编码扰动强度;这是受控噪声实验。
“五倍实时”配置使用 800 点、六帧、424×320 分辨率、至多四次迭代,并预先加载、解码、去畸变图像。这不能作为完整实时输入流水线的端到端五倍速度。证据见论文第 4 节。
五、保留初始化、畸变和无回环漂移限制
作者承认像素模式可能重叠,使同一读数被重复使用;认为实践影响较小,并非严格证明所有观测独立。边缘化也有信息与线性化取舍。我的分析是,若环境长期变化、强反光或曝光饱和,仿射亮度关系可能无法解释变化;小残差筛选还可能偏向容易区域,需要结合失败率观察。
六、追问:窗口删去旧状态后,新估计能否随意重写已经边缘化的信息?
窗口删去旧状态后,新估计能否随意重写已经边缘化的信息?
参考答案:边缘化得到的约束依赖当时的模型与线性化,不能把删去的全部历史当作仍在窗口中自由优化。应区分活跃变量和保留下来的先验,检查一致的线性化约定。窗口联合估计改善局部约束,不自动提供长期回环修正。
七、比较直接残差的不同含义与后端
- 平行路线:LSD-SLAM:让单目直接法拥有能闭环的全局地图。比较半稠密滤波深度与尺度图组织,系统目标不同。
- 教学联系:FAST-LIO2:直接用点云定位,为什么先要解决地图更新。“直接”在雷达系统中指省去手工特征分类,不继承光度残差。
八、自测与参考答案
问题 1:DSO 为什么既“直接”又“稀疏”?
答案: 它直接用亮度残差估计状态,但只保留选定点及小像素模式。误差类型与数据密度是不同分类,直接法无需覆盖整幅图像。
问题 2:固定七帧窗口,为什么增加关键帧频率可能变差?
答案: 时间覆盖缩短,旧状态更早被边缘化,冻结时可能尚未充分估准。新约束的收益可能抵不过更早线性化的信息损失,需要看图 18 所示的取舍,而非只数观测数量。
问题 3:如何公平验证它比 ORB-SLAM 更适合一个机器人?
答案: 先区分任务是纯里程计还是需要回环恢复的 SLAM,再统一传感器、裁剪、实时预算和标定条件;同时报告失效、轨迹误差和恢复能力。关闭对方回环的比较只能回答受限任务问题,不能直接决定整机系统选择。