3.无监督联合学习深度和光流
3.1方法概述
3.2用深度和位姿合成流
3.3亮度一致性和空间平滑性先验
这里简要回顾一下我们的框架调整网络训练时使用的两个损失函数。利用经典稠密对应算法[4,23,40]中的亮度一致性和空间平滑性先验,之前的工作使用扭曲帧和目标帧中的光度差异作为一个无监督的代理损失函数训练没有真实注释的CNNs。
光度损失。假设我们有帧和
及估计的流
(来自流模型预测的光流或用深度和位姿合成的刚体流),我们可以扭曲帧
得到
。注意投影的图像坐标
可能不完全在像素网格中,因此我们用空间变换网络中使用的一个可微的双线性插值方法合成帧。
对扭曲得到的帧
,亮度一致性目标函数可以表示为
其中是一个计算像素差异的函数。之前的工作简单地使用
范式或外表匹配损失[21],对现实世界中的光照改变不具稳定性。我们采用基于三元统计变换(ternary census transform)的损失[43,55,69],这样可以应对复杂的光照变化。
平滑损失。亮度稳定损失在场景的低纹理或均质区域无效。为了解决这个问题,现有方法采用一个平滑先验调整估计的视差图或流场。我们采用monoDepth提出的空间平滑损失。
3.4前后向一致性
根据亮度一致性假设,扭曲的帧应该和目标帧相同。但这种假设不适用于遮挡区和非遮挡区。我们采样常用的前后向一致性检查技术识别这样的无效区域,然后不对这些区域施加光度损失。
有效掩码。我们利用前后一致性假设检测遮挡(比如,向前遍历光流向量再向后遍历应该到达同一个位置)。这里我们使用UnFlow提出的一个简单方法。如果违反这个限制,我们就把像素标记为无效。图4展示的是使用合成的刚体流进行前后向一致性检查而标记出的两个无效区域样例。
![](https://i-blog.csdnimg.cn/blog_migrate/71c11258807c6ed2cdeafe0d03445283.png)
用代表有效区域(来自刚体流或估计出的流),光度损失可以表示为
. (5)
前后向一致性损失。除了使用前后向一致性检查去识别无效区域,我们还进一步对有效区域施加约束,使网络能在前向和后向上产生一致预测。[25,43]已经使用这种思路估计了对遮挡敏感的流。这里我们把前后向一致性损失应用到流和深度预测。
流预测中,前后向一致性损失的形式如下:
类似地,我们对深度施加一个一致性惩罚:
其中,是根据从
到
合成的刚体流,扭曲
得到的。
虽然我们使用鲁棒性函数加强光度损失,对每个任务做前后向一致性,但用无标签的数据训练深度和流网络,对超参数的选择来说,仍然是非平凡且敏感的。基于现有的损失函数,下面我们引入一种交叉一致性损失进一步规范网络训练。
3.5交叉一致性
在3.2中,我们说场景中刚体区域的运动可以用相机自运动和对应的场景深度来表示。一方面我们可以通过投影场景流得到刚体流。另一方面我们可以直接使用光流网络估计光流。我们的核心思想是,对无遮挡的静态区域,这两种方法得到的流场应该相互一致。最小化它们的差异可以同时优化更新深度和流模型。
因此我们最小化来自刚体流的流向量和来自光流网络的流向量的终点距离。我们用表示合成的刚体流,用
表示估计的流。使用3.4计算的有效掩码,可以对有效的像素施加交叉一致性约束。
. (8)