自监督深度估计
自监督单目深度估计训练一个网络从单张图像预测逐像素深度——完全不需要任何真值深度标签。其监督信号是光度一致性:如果预测的深度(及相对相机位姿)是正确的,那么场景的一个视角就可以被变换(warp)到另一个视角,而变换后的图像应当与真实图像匹配。
具体而言,给定目标图像 和源图像 (立体对中的另一张图像,或视频中的邻近帧),预测的深度 和相对位姿 定义了一个变换:每个像素 被反投影到 3D 空间、变换,再重投影到源视角中,
训练损失惩罚 与重建出的 之间的光度差异(通常是 SSIM 与 L1 的混合,再加上一个边缘感知的平滑先验)。存在两种训练方式:
- 双目训练:视角之间的位姿是已知且固定的双目基线——因此学到的深度是度量尺度的。(Monodepth,Godard 2017。)
- 单目视频训练:由第二个网络联合预测帧间位姿与深度(SfM-Learner,Zhou 2017)——不需要专门的相机装置,但深度只能恢复到相差一个尺度因子,且运动物体违反了静态场景假设。
Monodepth2(Godard 2019)是经典的参考实现,为主要失效模式贡献了简单而有效的修复方案:对多个源帧计算逐像素最小重投影损失(处理遮挡);一种自动掩膜技巧,忽略帧间不发生变化的像素(处理随相机一起运动的物体以及静止帧);以及在全分辨率下计算的多尺度损失。
完整的损失函数
标准的光度误差将结构相似性与绝对差值相结合,
其中 SSIM 项带来了对亮度/曝光变化的鲁棒性,而这些变化在原始 L1 损失中会占据主导。由于光度误差在无纹理区域(任何深度都能同样好地重建一片平坦墙面)信息量为零,一个边缘感知平滑项对(均值归一化后的)逆深度 进行正则化:
它促使深度保持平滑,除了在图像边缘处——那里更可能存在深度不连续。Monodepth2 对多个源帧取逐像素最小值 ,取代了通常的平均值:在某个源视角中被遮挡但在另一个视角中可见的像素,只根据重投影真正能够成功的那个视角来计分——一个仅仅”均值改为最小值”的两字改动,却带来了不成比例的效果提升。
请注意这种变换需要的条件:对 在非整数位置 处进行可微的双线性采样(即空间变换网络的技巧)。正是这一环节使得整条几何流水线——深度、位姿、投影——能够通过梯度下降端到端训练。
失效场景及其原因
这种监督信号的有效性完全依赖于其假设:静态、朗伯(Lambertian)场景,亮度恒常,且相机在运动。每一条被违反的假设都对应一种已知的失效模式:
- 与相机同速运动的物体(前方以匹配速度行驶的汽车)光流为零,光度一致性会将其解释为无穷远深度——这正是自动掩膜所抑制的经典”前方道路上出现空洞”伪影。
- 独立运动的物体违反了刚性场景变换假设,即使有掩膜损失限制损害,其深度估计仍会出错。
- 非朗伯表面——反射、玻璃、水面、汽车漆面的高光——在视角变化时会”错误地”移动,从而污染损失。
- 低纹理和低光照:没有梯度信号,因此该区域的深度纯粹是平滑先验的插值结果。
- 尺度:以视频训练的模型继承了单目尺度模糊性;常见的逐图像中位数缩放评估协议掩盖了这一点,但要将其集成进 SLAM,就必须从别处(双目训练、IMU,或度量先验)提供尺度。
常见陷阱
- 把深度当作无不确定性的信息来信任:网络深度具有空间相关且依赖场景的误差;如果在融入 SLAM 时将其当作独立同分布的传感器噪声,会严重高估其权重。D3VO 学习不确定性的做法是较为严谨的解决方案。
- 域偏移:在 KITTI 上训练的模型应用于室内场景(或鱼眼相机、或夜间挡风玻璃后方拍摄)时会悄无声息地性能下降——在把它用作基础之前,先在你自己的领域中验证深度质量。
- 内参不匹配:该变换用到了 ;如果输入图像的焦距或畸变校正方式与训练时不同,就会破坏网络内化的几何关系。
在SLAM中的应用
对于 SLAM 而言,这些网络起到深度先验的作用:CNN-SLAM 将学习到的深度融合进类似 LSD-SLAM 的稠密建图;DVSO 将一个以双目训练的网络用作 DSO 内部的”虚拟双目”约束,从而解决单目尺度模糊性;D3VO 更进一步,同时学习位姿和光度不确定性,将三者紧密地整合进视觉里程计后端。
对SLAM的意义
自监督深度仅凭无标签视频训练,就把单个相机变成了一个近似的深度传感器——直接攻克了单目 SLAM 的两个经典弱点:尺度模糊性和缓慢的深度初始化。其核心的光度变换损失与直接法 SLAM 的光度误差本质上是同一套机制,使其成为深度学习与直接法之间天然的桥梁,也是当今深度基础模型的概念先驱。