Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos
摘要:
以单目视频流为监督信号,用无监督方法对场景深度和机器人自运动进行学习,因为相机是在机器人领域最便宜且约束最少普及度最高的传感器。 本方法可以对移动物体进行建模,并且可以应用在多领域,比如从室外环境到室内环境。主要思路是:在学习过程中引入几何结构,将场景和个别物体进行建模;相机自运动和物体运动从视频中学习。此外,在线修正方法用适应对未知领域的学习。
简介:
估计深度的几种方法
- 深度神经网络:Eigen, Puhrsch, and Fergus 2014; Laina et al. 2016; Wang, Fouhey, and Gupta 2015; Li, Klein, and Yao 2017
- 用传感器监督:Zhou et al. 2017; Garg, Carneiro, and Reid 2016
- 双目立体视觉:Godard, Aodha, and Brostow 2017
- 光流估计:Wang et al. 2018
我们的方法,通过在3D空间内表达物体以及对运动进行SE3转化来建模在训练过程中引入结构;这个过程由全微分操作完成并且由未标定的单目视频训练。
之前的方法没有解决动态场景中的运动问题,于是提出了光流模型,在线校正方法依照(Bloesch et al. 2018)。
主要方法:
最主要的学习设置是从单目视频中无监督学习深度和自运动(Zhou et al. 2017)。我们的方法通过对物体运动进行建模来对动态场景建模,并且可以使用在线修正方法对学习策略进行改进
问题设置
输入需要至少3帧连续图像,以及相机内参
。深度和自运动通过学习非线性函数得到。深度函数为:
是一个全卷积 encoder-decoder结构,从单帧图像生成深度图
;自运动网络
采用2帧图像作为输入,输出两帧图像间的SE3转换。
代表两帧图像间的平移和旋转参数,形状是
。
对连续图像的其中一帧进行变换操作到相邻帧,我们能够得到不同相机视角可能的景象。场景深度由得到,相对于下帧图像的自运动
可以通过投影得到下帧图像。具体细节,通过一个可微图像变换
,其中
是对第J个图像的重建,我们可以对任意一个RGB图像
在给定相应估计深度
和自运动估计
后变换出
。实际上,φ通过读取从变形的图像像素坐标来执行变换。设置
,其中
。监督信号使用光度损失(photometric loss)比较投影图像
与真正图像
。比如使用重投影损失
图1:问题设置:从RGB图像输入获得场景深度预测。 无监督训练,输入仅有单目视频。 不使用深度传感器
算法
重建损失计算的是由前一帧变换后的图像与真正的后一帧图像的最小重投影损失:
由(Godard, Aodha, and Brostow 2018)提出,用来处理遮挡问题。除了重投影损失,还使用了SSIM loss(Wang et al. 2004),一个深度平滑损失并在训练过程应用了深度归一化。
总损失在4个尺度上计算:
运动模型
引入物体运动模型ψM与自运动网络ψE结构相同,但是专门预测3D空间内的个别物体运动。
图2:通过对单个对象的运动、自我运动、场景深度进行建模,从而在学习中引入了3D几何结构。 此外,优化方法可以在线方式即时调整模型
与自运动模型相似,采用RGB图像序列输入,但是这次补充了预先计算的实例分割mask,然后学习预测3D空间内每个物体的转换向量,也就是观察到的物体经过变化后生成的对应图像。于是,不同于(Zhou et al. 2017)只进行单独投影,而是对一系列投影进行适当结合。
固定背景基于ψE单独投影生成,然后所有分割出的物体经过ψE然后ψM变换以后被添加上去。我们的方法与之前使用光流估计运动方法不同,2D (Yin 2018) 或 3D (Yang et al. 2018a),本方法不仅将物体在3D中建模还在线学习他们的运动,这种方法能分别对场景和个别物体的深度进行建模。
我们定义实例分割mask 在序列中每个潜在物体 i 为
。为了计算自运动先将物体运动从图像中屏蔽掉。另外专门对固定场景定义一个 binary mask
,移除所有与移动物体有关的内容,
返回一个专门对物体j的 binary mask。在将序列喂入自运动网络前,通过元素乘法
代表对所有图像序列的固定场景binary mask:
为物体运动建模,首先应用自运动估计得到经过变换的序列和
,这里自运动的影响已经被移除。假设深度和自运动估计正确,序列不匹配的位置就是移动物体。潜在运动物体的轮廓由(He et al.2017)提供(类似于先前的光流方法(Yang 2018a)。图像中第i个物体的运动估计
计算如下:
注:代表物体运动,代表的是为了显示物体而需要相机如何运动,而不是物体的直接运动。实际的三维运动矢量是通过跟踪物体运动前的体素运动和物体运动变换后的体素运动得到的。根据这些运动估计,反向变换操作根据估计的运动移动物体。最终变换结果是移动物体
的单独变换以及自运动
的结合,总体变换
是:
我们标注了每一项的梯度,使用的masking保证了最终变换结果没有像素会重叠,然而有些区域可能没有被填充,这些会被最小损失处理,我们的算法会自动学习每个物体单独的3D运动
施加物体大小约束:
之前方法常见问题是:当前方车辆以几乎相同速度行驶会被映射到无穷深度(Godard, Aodha, and Brostow2018; Yang et al. 2018a)。这是因为前方物体没有明显运动,如果网络将它估计为无穷远,那么重投影误差几乎减少到0以得到正确结果。
我们发现如果模型没有物体尺度的概念,那么把大物体放在非常远处伴有明显的运动,或者一个放在近处的小物体运动不是太明显,这两个物体运动是一致的。我们的想法是在训练过程让模型学习物体的尺度,于是可以在3D空间对物体建模。假设已知某种物体的大概高度,比如:一辆车,我们可以得到大致深度,其中
是相机焦距,
是我们的高度先验,
是相应分割blob的高度。
我们对每个物体定义尺度损失项,让
为物体i 定义一个类别ID,
为类别ID j的可以学习的高度先验,D为估计的深度图,S为相应的物体轮廓mask,损失为:
此loss 防止了分割对象退化为无限深度,并使网络不仅生成合理深度,而且与估计的物体运动相匹配。我们使用减少由先验条件的缺少以及深度范围带来的影响,其中
是中间帧的平均估计深度。
测试优化模块
使用单帧图像估计深度应用广泛,但当在图像运行连续深度估计时总出现匹配错误不连续导致出现损失。原因如下:
- 相邻帧的尺度不一致,由于我们的相关模型都没有全局尺度的感念;
- 深度估计的时间一致性(low temporal consistence)低 在本工作中,
我们认为不需要固定网络权重,我们在运行时仍然训练模型,于是,发现即使使用有限的三帧连续图像,也可以增加深度估计效果。’
实验结果
Results on the KITTI Dataset
运动模型
图4:在Cityscapes数据集上的深度估计示例,其中目标运动非常普遍。 单目方法中动态场景的常见问题是随相机自身移动的物体。 这些对象被投影到无限深度以降低光度误差。 我们的方法有效的处理了
我们的方法在定性(图4)和定量(见表2)上都有显着差异。 另一个有点是,它可以学习预测单个对象运动
优化模块
图5:与基线(中间行)相比,细化模型(底部行)实现了显着改进,尤其是对于精细结构(最左侧的列)。 这种效果在Cityscapes上更为明显,算法是在线训练的因此无需对Cityscapes数据集进行训练