自监督单目深度估计技术近年来发展迅速,它能够直接从大量无标签视频中学习,极大降低了数据标注成本。然而,当视频中存在动态物体(如行人、车辆)时,基于静态环境假设的传统方法会失效,导致深度预测出现严重偏差。Dynamo-Depth正是为了解决这一问题而提出的全新框架,通过联合学习深度、独立运动与运动分割,在动态场景下实现了显著更优的深度估计性能。下面将带你全面理解这项工作的原理、实现细节与实际效果。
0. 背景与问题
0.1 传统自监督单目深度估计的局限
传统的自监督单目深度估计框架由 DepthNet 和 PoseNet 两部分组成。输入单目视频序列中的前后两帧(也可跳帧训练),首先为第一帧图像估计深度图,同时估计两帧间的相机位姿;然后基于深度和位姿重建第一帧图像,计算重建图像与真实图像之间的光度损失,以此进行无监督训练。
这个框架的核心假设是:场景完全静态。一旦场景中间出现移动物体,动态物体的运动会破坏光度一致性损失的计算,导致网络将移动物体的错误深度与相机位姿“拼凑”出正确光流,从而产生严重错误的深度估计。
小提示: 动态场景下的“极线歧义”是核心难点。当自车与前方车辆同向行驶时,相对速度很小,网络容易误认为该车辆距离极远;而对向行驶的车辆则会被误判为极近。这种错误的深度恰好能配合正确的位姿生成合理的光流,使得损失函数被“欺骗”。
1. 效果展示
为了直观感受 Dynamo-Depth 的改进,先看一组对比结果。以 CVPR 2023 的工作 Lite-Mono 作为参照(Lite-Mono 并非专为动态场景设计,而是聚焦于 CNN+Transformer 的嵌入式部署),Dynamo-Depth 在动态物体上的深度估计结果明显更准确、更锐利。

2. 摘要与核心贡献
无监督单目深度估计技术已取得令人鼓舞的结果,但通常假设场景静态。在动态场景中训练时,明显的物体运动可以通过假设物体独立运动或改变其深度来解释,这种模糊性导致深度估计器对移动物体预测错误深度。为此,我们提出了 Dynamo-Depth——一种通过联合学习单目深度、3D独立光流场和来自未标记单目视频的运动分割来消除动态运动歧义的统一方法。
关键见解:良好的运动分割初始估计足以用于联合学习深度和独立运动,即便存在底层模糊性。该方法在 Waymo Open 和 nuScenes 数据集上实现了最先进的单目深度估计性能,显著改善了移动对象的深度预测。
3. 算法解析
3.1 问题重述与难点
室外单目深度估计最主要的应用场景是自动驾驶。典型情况为:自车在路上行驶,其他动态车辆共线行驶。难点在于 极线歧义:
- 当某车辆与自车同向且速度相近时,相对静止,网络会误认为该车辆距离极远。
- 当某车辆与自车对向行驶时,网络会误认为其距离极近。
- 结果就是:错误的深度估计反而促成了正确的光流(位姿)估计,这种耦合导致传统正则化方法难以奏效。
3.2 Dynamo-Depth 的核心思想
仅建模相机运动引起的刚性光流无法完整描述动态对象,因此需要再学习一个 独立的3D光流场(场景流),捕捉动态对象的运动。整体 Pipeline 分为上下两路:
- 上半部分(静态假设):借助 target 帧的深度和相机位姿估计静态3D光流场。
- 下半部分(动态分支):通过独立光流估计网络和运动 mask 估计网络,得到动态3D光流场。
- 两个光流场叠加后用于恢复 target 图像,并计算光度损失。

3.3 为什么不直接预测动态物体的3D光流?
有两个原因:
- 在训练过程中,输入帧中的目标运动是相机运动与独立运动的叠加,直接预测目标的独立运动非常困难。
- 独立刚体运动 FI 倾向于稀疏化(即默认没有动态物体)。训练初期,当深度和位姿预测有噪声时,高稀疏项会导致网络直接收敛到“无动态物体”的解上。
常见问题1:动态场景下的光度损失计算为何会失败?
答案:光度损失假设每个像素的对应关系完全由相机运动确定。当动态物体存在时,该像素的实际运动是相机运动与物体自身运动的叠加,若仍用静态模型重建,会产生巨大误差。网络为了最小化损失,会“学会”用错误的深度来匹配错误的位姿,最终输出错误深度。
常见问题2:Dynamo-Depth 如何处理训练初期运动分割不准的问题?
答案:论文的关键见解是,即使初始运动分割估计很粗糙(例如只有少数动态像素被标记),联合学习框架也能逐步修正。深度网络和独立光流网络相互约束,运动分割网络在迭代中不断优化,最终达到高精度。
4. 实验结果
4.1 实验设置
- 数据集:Waymo Open、nuScenes、KITTI Eigen split
- 硬件:4块 NVIDIA 2080 Ti
- batch size:12
- 初始学习率:5e-5
- 评估指标:Abs Rel、Sq Rel、RMSE、RMSE log 以及三个准确率阈值
4.2 精度定量对比
下表展示了 Dynamo-Depth 与多个基线在三个数据集上的比较(K=KITTI, N=nuScenes, W=Waymo Open):

- 在 nuScenes 上 Abs Rel 降低了57%。
- 在 Waymo Open 上 Abs Rel 降低了21%,性能提升明显。
- 在 KITTI 上效果提升不大,因为 KITTI 动态目标比例较低。
4.3 动态与静态区域的性能分解
将 nuScenes 和 Waymo Open 的分割数据划分为静态背景和动态对象,分别评估深度估计性能:

- Waymo Open 上的动态区域精度提高了 48.2%,误差减少了 67.6%。
4.4 深度与光流估计的定性对比
下图展示了 Dynamo-Depth 有效解决了极线歧义问题,不会再用错误的深度去预测正确的光流:

4.5 消融实验与运动掩码质量
在 Waymo Open 上使用精确度-召回率曲线评估联合学习的二进制运动掩码网络的质量。随着召回率增加,Dynamo-Depth 依然保持较高精确度,F1 得分达到 71.8%。

5. 常见问题与技巧
Q:Dynamo-Depth 是否只适用于车辆共线场景?
A:论文主要在自动驾驶数据集(Waymo, nuScenes)上验证,这些场景以车辆共线运动为主。但方法本身不限定共线,理论上可处理任何类型的独立运动(行人、自行车等),只要训练数据包含足够的动态多样性。
Q:训练时动态物体占比很少怎么办?
A:模型会倾向于将大部分像素归为静态,动态掩码变得稀疏。此时可以适当增加动态样本的损失权重,或采用数据增强(如对动态区域进行随机遮挡)。
Q:如何设置独立光流网络的初始权重?
A:建议用静态光流(仅相机运动)的预训练权重做初始化,这样网络在初期能快速收敛,同时避免直接预测独立运动带来的困难。
6. 总结
Dynamo-Depth 面向自动驾驶场景中的动态物体(尤其是车辆共线运动),通过联合学习深度、位姿、3D独立运动和运动分割,有效解决了传统自监督方法在动态场景下的失效问题。在 Waymo Open 和 nuScenes 上取得了显著的性能提升,尤其对动态区域的深度估计精度改善巨大。虽然该工作偏向于特定场景(车辆共线),但它的核心思路——用运动分割辅助独立光流学习——具有很强的启发性。与之相比,同时期的工作 SC-Depth V3 在处理更广泛的动态物体(如行人)上表现更优,但 Dynamo-Depth 在联合学习的简洁性和效果之间取得了良好平衡,为后续研究提供了有价值的参考。
