《Unsupervised Learning of Depth and Ego-Motion from Video》论文笔记
Self-Supervised Inference of Depth Estimation and Egomotion from Video Data
作者: Tinghui Zhou,
项目主页
摘要
研究者针对无结构化单目视频序列中的图像深度提取问题构建了一种无监督网络架构。相较于传统方法而言,在不依赖于像素级深度标签或相机姿态的相关标注信息的情况下,该方法实现了完全自监督的学习过程。研究者采用了单目深度估计模型和双目姿态估计模型,并基于损失函数进行联合优化。该损失函数通过融合相邻帧之间的相似区域信息来重构目标帧的内容,并通过 L_1 损失衡量重建结果与真实内容之间的差异。
文章的核心理论基于 photometric consistency 原理推导出每帧的深度信息及其姿态。其本质是同一物体在不同成像帧中对应的投影位置在两张图像中呈现出相同的灰度值。
网络结构
一个必要条件是:基于射影几何学和相关平面投影原理,在进行相机内外参数标定过程中,默认假设存在多个参考点对可被精确匹配。
基本网络结构如图所示,包含 Depth CNN 与 Pose CNN 两部分,分别用于预测像素深度、相邻两帧图像之间相机的运动姿势。训练过程中,取 3 帧图像 I_t, I_{t-1}, I_{t+1},称 I_t 为目标图像,另外两个为源图像。首先 I_t 通过 Depth CNN 得到像素深度,将 (I_t, I_{t-1})、(I_t, I_{t+1}) 分别作为一组送入 Pose CNN 得到相邻像素之间相机的运动 \hat{T}_{t \to t-1}, \hat{T}_{t \to t+1}。

然而,在缺乏对像素深度和相机位置标记信息的情况下,在仅有单个视频序列的情况下实现无监督训练显得尤为困难。

该问题询问的是:是否可以通过利用相关帧(不一定是连续的)中的图像、当前帧的深度数据以及各帧之间的相机运动参数来恢复或重构当前时刻的画面?
不妨将需要重建的目标帧标记为目标图像I_t;其中用作源图像的帧为I_s;而\hat{I}_s则代表基于上述方法重建所得的结果图像。对于目标帧中的每个像素点p_t;我们需通过计算得到,在目标帧中的该像素点对应于源帧中的位置p_s;其关系可表示如下:
p_s \sim K \hat{T}_{t \to s} \hat{D}_t(p_t) K^{-1} p_t
其中\hat{T}_{t \to s}表示t到s帧之间的相机运动姿态估计;\hat{D}_t(p_t)则代表第t帧中像素点p_t处对应的深度值。根据投影几何的基本原理;我们有I_t(p_t)与I_s(p_s)应当对应于同一个物理空间中的点;因此在忽略其他因素(这一假设存在较大缺陷;后续作者会提出改进方案)的情况下;两者的亮度信息应当一致;因此可取I_s(p_s)作为重建图像\hat{I}_s中位于p_t位置处的亮度值。
然而由于双线性插值方法仅适用于整数索引的情况;当p_s并非整数时需采用此方法获取近似值I_s(p_s)。
需要注意的是如果计算所得的位置$p_s超出了图像边界范围该如何处理?目前作者及其团队对此问题未有提及解决方案。
第二个问题 :如何优化?损失函数是什么呢?
基于重建的结果得到了 \hat{I}_s。为了评估重建的效果,请考虑定义损失函数 L_{vs} = \sum_s \sum_p |I_t(p) - \hat{I}_s(p)| ,其中用于计算各像素点之间的差值。当像素深度估计与相机运动姿态预测较为准确时,自然能够获得较好的重建效果。
第三个问题 :在刚才的思路中暗含了一个假设:即视频中不存在遮挡物体、形不变、场景处于静止状态以及在任何观察角度下亮度均一致(作者指出表面遵循拉姆贝特定律(Lambertian surface),这使得光一致性误差具有意义)。不过我对这一假设有疑惑,在这种情况下该如何解决?
该作者引入了一个软掩码\hat{E}_s来改进模型性能,在新的框架下其对应的损失函数被修改为L_{vs} = \sum_s \sum_p \hat{E}_s(p) |I_t(p) - \hat{I}_s(p)|。然而,在这种情况下,网络可能会使所有位置的\hat{E}_s(p)归零以最小化总误差。为了避免出现上述问题,在损失函数中添加了一个正则化项L_{reg}(\hat{E}_s)以约束各位置上的掩码值分布。”
Addressing the gradient-related issues, which aim to ensure that output images become smoother and more refined. The original text's meaning was unclear, prompting us to refer to an explanation from a blog (source: ).
为了确保输出无论是深度信息还是视差信息能够在图像分布中呈现平滑性, 研究者特别针对低纹理区域或估计值与真实值差距过大的情况提出了特定解决方案; 大家通常会采取两种策略: 一是通过传递相邻像素的梯度来更新当前像素; 另一种类似于无监督方法的做法是引入一个衡量平滑程度的正则化项. 本文受到SfmNet模型的影响, 采用了与该模型相似的方法; 研究者通过引入深度图二阶导数绝对值之和这一指标来量化并提取图像的整体光滑特性; 最终损失函数被定义为 L_{final} = \sum_l L_{vs}^l + \lambda_s L_{smooth}^l + \lambda_e \sum _s L_{reg}(\hat{E}_s^l)
第五个问题 :Depth CNN 与 Pose CNN 使用的网络结构是什么?
在研究过程中,在线学习算法的表现得到了广泛的验证和认可(如DispNet)。其中一位博主对此进行了较为深入的介绍,并在此基础上提出了自己的见解(如博客)。其中较为复杂的部分在于Upsample + Concat这一连接方式的理解。简单来说就是通过对低分辨率特征进行预测后再将其上采样并结合到高分辨率特征中去完成后续解卷积操作的过程。

实验结果
本文采用了无监督训练方法,并与现有方法进行对比实验。相较于现有方法,在部分场景下其性能略逊于 Godard 等人所提出的无监督单眼深度估计模型(Unsupervised monocular depth estimation with left-right consistency),但在其他情况下则表现优异。通过下图可见,在较近的位置上能够较为准确地预测出车辆、路面及建筑等的相对深度。

参考资料
Unsupervised Learning of Depth and Ego-Motion from Video
https://www.zhihu.com/question/66006923/answer/241333356
