自监督深度估计

自监督单目深度估计训练一个网络从单张图像预测逐像素深度——完全不需要任何真值深度标签。其监督信号是光度一致性:如果预测的深度(及相对相机位姿)是正确的,那么场景的一个视角就可以被变换(warp)到另一个视角,而变换后的图像应当与真实图像匹配。

具体而言,给定目标图像 ItI_t 和源图像 IsI_s(立体对中的另一张图像,或视频中的邻近帧),预测的深度 DtD_t 和相对位姿 TtsT_{t \to s} 定义了一个变换:每个像素 p\mathbf{p} 被反投影到 3D 空间、变换,再重投影到源视角中,

psKTtsDt(p)K1p,\mathbf{p}_s \sim K\, T_{t \to s}\, D_t(\mathbf{p})\, K^{-1} \mathbf{p},

训练损失惩罚 It(p)I_t(\mathbf{p}) 与重建出的 Is(ps)I_s(\mathbf{p}_s) 之间的光度差异(通常是 SSIM 与 L1 的混合,再加上一个边缘感知的平滑先验)。存在两种训练方式:

Monodepth2(Godard 2019)是经典的参考实现,为主要失效模式贡献了简单而有效的修复方案:对多个源帧计算逐像素最小重投影损失(处理遮挡);一种自动掩膜技巧,忽略帧间不发生变化的像素(处理随相机一起运动的物体以及静止帧);以及在全分辨率下计算的多尺度损失。

完整的损失函数

标准的光度误差将结构相似性与绝对差值相结合,

pe(Ia,Ib)=α2(1SSIM(Ia,Ib))+(1α)IaIb1,α=0.85,pe(I_a, I_b) = \frac{\alpha}{2}\left(1 - \mathrm{SSIM}(I_a, I_b)\right) + (1 - \alpha)\,\| I_a - I_b \|_1, \qquad \alpha = 0.85,

其中 SSIM 项带来了对亮度/曝光变化的鲁棒性,而这些变化在原始 L1 损失中会占据主导。由于光度误差在无纹理区域(任何深度都能同样好地重建一片平坦墙面)信息量为零,一个边缘感知平滑项对(均值归一化后的)逆深度 dd^* 进行正则化:

Lsmooth=xdexI+ydeyI,L_{smooth} = \left| \partial_x d^* \right| e^{-\left|\partial_x I\right|} + \left| \partial_y d^* \right| e^{-\left|\partial_y I\right|},

它促使深度保持平滑,除了在图像边缘处——那里更可能存在深度不连续。Monodepth2 对多个源帧取逐像素最小值 minspe(It,Ist)\min_s pe(I_t, I_{s \to t}),取代了通常的平均值:在某个源视角中被遮挡但在另一个视角中可见的像素,只根据重投影真正能够成功的那个视角来计分——一个仅仅”均值改为最小值”的两字改动,却带来了不成比例的效果提升。

请注意这种变换需要的条件:对 IsI_s 在非整数位置 ps\mathbf{p}_s 处进行可微的双线性采样(即空间变换网络的技巧)。正是这一环节使得整条几何流水线——深度、位姿、投影——能够通过梯度下降端到端训练。

失效场景及其原因

这种监督信号的有效性完全依赖于其假设:静态、朗伯(Lambertian)场景,亮度恒常,且相机在运动。每一条被违反的假设都对应一种已知的失效模式:

常见陷阱

在SLAM中的应用

对于 SLAM 而言,这些网络起到深度先验的作用:CNN-SLAM 将学习到的深度融合进类似 LSD-SLAM 的稠密建图;DVSO 将一个以双目训练的网络用作 DSO 内部的”虚拟双目”约束,从而解决单目尺度模糊性;D3VO 更进一步,同时学习位姿和光度不确定性,将三者紧密地整合进视觉里程计后端。

对SLAM的意义

自监督深度仅凭无标签视频训练,就把单个相机变成了一个近似的深度传感器——直接攻克了单目 SLAM 的两个经典弱点:尺度模糊性和缓慢的深度初始化。其核心的光度变换损失与直接法 SLAM 的光度误差本质上是同一套机制,使其成为深度学习与直接法之间天然的桥梁,也是当今深度基础模型的概念先驱。

相关条目