AAAI无监督单目视频深度学习的结构化方法(论文 学习&翻译 笔记)

2019:Depth prediction without the sensors:leveraging structure for unsupervised learning from monocular videos

无传感器的深度估计:单目视频无监督深度估计的结构化方法==
原文
源代码

学习笔记

简介
本文实现的是对单目视频进行深度估计,主要方法是将场景中相应的运动建模为独立变换,然后用其对 3D 几何建模,并估计所有目标的运动。通过将场景分解为 3D 和单个目标,可以更好地学习场景中的深度和自我运动,尤其是在动态场景下物体的深度。
在这里插入图片描述

相关函数
输入为一组RGB图像序列(至少3张图片)
1、depth function:用来从单帧图像中生成深度图
在这里插入图片描述
在这里插入图片描述
2、ego-motion: 用来生成两帧图像之间的 SE3 变换
在这里插入图片描述
在这里插入图片描述
3、warping operation:用来通过 i 帧图像生成 j 帧的图像
在这里插入图片描述
total loss:
在这里插入图片描述
Lrec为图像重建损失,加上 SSIM 损失,以及图像平滑损失。
在这里插入图片描述
Motion Model
将场景中可能移动的目标单独的建立3D模型,并且学习估计目标的运动,在对可能的移动目标进行建模的时候就需要除去静态的部分,这里作者对所有的静态场景定义了一个 binary mask:
在这里插入图片描述
这时候的自我运动的模型则直接使用使用静态场景进行估计:
在这里插入图片描述
通过ego-motion estimate可以获得除去了static scene的序列:
在这里插入图片描述
在这里插入图片描述
通过这两个序列,就可以估算目标物体的运动状态:(这里的获得的向量,并不是仅仅考虑了目标移动的结果,其实已经考虑了自我运动的结果)
在这里插入图片描述
整个的 warping operation 为:
在这里插入图片描述
Refinement Model
在 KITTI 和 Cityscapes 数据集中,由于时间延迟,监控传感器(无论是 stereo 还是 LIRAR)会出现值缺失,有时甚至无法与相机输入重合 。为了解决这个问题,作者引入了在线优化的模块,可以在训练中进行更新权值,优化执行20步( N = 20 是是否能正确解决问题和防止过度训练的关键)。值得注意的是,这个在线学习结构可以运用于其他的模型中,在本模型中可以实现跨数据集转移。

results
1、KITTI 数据集
结果逼近用stereo对视频作为训练监督的方法的质量。
在这里插入图片描述
同时
motion model 可以实现: 1)可以预测移动物体的目标的深度 2)可以对单个目标的运动向量进行估计
在这里插入图片描述
在这里插入图片描述
online refinement 可以实现 1)可以更细节的显示物体的几何结构 2)可以实现数据集转移
2、Cityscapes Dataest : absolute relative error 明显降低
在这里插入图片描述
3、跨数据集(training :cityscapes dataset ; testing : indoors)
在这里插入图片描述
可以看出,跨数据集后,仍然得到了优于 baseline 的结果,并且,这个模型可以很好的捕捉大的透明的玻璃门,玻璃窗和反光表面。online refinement需要更新的信息,所以相机的转动时必须的。所以,在静态场景中,在线优化的思想不可以使用。

“”“

翻译笔记

”“”
论文翻译
摘要:对于室内和室外机器人来说,学习从输入的RGB图像预测出场景的深度是一项非常具有挑战的任务。本次的项目中,我们讨论了场景深度的无监督学习和机器人的自我运动的问题,其中只用到了单目视频来作为使用的数据。因为摄像机是机器人中最便宜、限制最少、最普遍的传感器。之前的无监督图像深度估计的工作已经为该领域打下了稳固的基石。我们提出了一种新的方法,可以提供更高质量的结果,并且可以实现对移动对象的建模和跨数据集转移,如从室内到室外的转换。主要的思想是在学习的过程中引入立体几何,通过对场景和独立的物理进行建模;相机的自我运动和单目视频的中的物体移动作为输入。还提出了一种在线优化的方法,用来实现对未知领域的深度学习。
本文提出的方法优于目前最先进的方法,包括例如通过学习流程来处理运动的方法。我们的结果质量与使用立体数据的方法相当,并显著地提高了对包含大量对象运动的场景和数据集的深度预测。这个方法具有实际意义,因为通过将训练的数据从机器人收集到的都市场景转为室内的场景,就可以实现跨数据集转移。
有监督领域的深度学习的结果是十分成功的,但是对于场景的深度监督需要昂贵的深度传感器,并且在一些特定场景中的传感器并不是那么容易获得,并且可能会引入自己的传感器噪声。因此,提出了一些无监督的图像深度估计的方法,事实证明无监督的深度估计方法优于监督估计的方法,主要就是因为传感器的读取问题,例如确实或加入噪声传感器的值。这些研究逐渐降低了无监督方法的错误率,甚至优越于一些立体检测和使用独立的光流模型进行训练的方法。
我们提出了一种新的方法,它可以对移动中的物体进行3D建模,并且通过学习在线优化多维框架的方法去适应不同的环境。采用经典的处理运动物体的方法并引入了对于物体大小的限制,我们首先完成在单目环境中高效的对动态环境中进行深度学习。我们的方法引入了学习过程中的结构,将物体3D表示,并将运动建模为SE3变换;这是通过完全可微操作完成的,并由无标签的单目视频进行训练。在两个公开的数据集上进行了实验。与最先进的算法相比,我们的算法在数据集和深度和自我运动估计方面都有了显著的改进;与立体训练模型相比都有很大的竞争力。此外,我们在没有调整的情况下,通过在一个数据集上进行训练和在另一个数据集上进行测试来评估跨数据集传输。我们提供跨Kitti和城市场景的传输结果,以及在关于城市场景的训练和在室内机器人导航数据集上的测试的结果。这表明该方法适用于各个领域,并且可能不需要为培训收集详尽的数据。该算法适应新的环境,学习在线预测深度和自我运动。

Previous work:之前的方法在实际中有所欠缺,因为在动态场景中的目标移动问题并没有解决。在这些移动的场景中,前文中提到的方法并不能处理目标移动。光流模型,独立的训练,都被用于解决这个问题。我们的模型与这些方法是一致的,我们同样使用的一个预先训练过的模型,但是提出了使用场景的立体结构,并且对移动物体和相机的自我运动进行建模。

Main method:主要的学习步骤是对于单目视频的深度和自我运动的无监督学习,唯一需要的是视频中的信息。我们提出了一个新的方法通过对移动目标的建模来对动态场景进行建模,并且可以通过在线优化技术适应不同的学习环境。注意所有的方法都是相关的,可以单独使用,还可以联合使用。我们分开描述了他们,并且通过不同的实验证明了他们单独和联合的作用。
Problem setup:
输入的方法是至少3幅RGB图像序列,以及摄像机的本身的矩阵。通过非线性函数学习(神经网络)来预测深度和自我运动。深度函数θ是一个全卷积的编码解码结构,可以从一个RGB帧来映射出深度图Di = θ(Ii)。自我运动网络ψE通过两个RGB图像序列来产生帧之间的SE3变换,即六维的矢量变换E1→2 = ψE(I1, I2) :(I1 , I2 ) = (tx, ty, tz, rx, ry, rz),指定帧之间的平移和旋转参数。通过一张图片对序列中的相邻的图片进行warping操作,我们就可以形成不同视角的该场景的图像。当我们可以通过深度函数θ来估算一个场景的深度时,那么自我运动网络ψE可以将变换出场景的下一时刻并获得下一张的图片。更特别的是,通过一个可微的图片warping操作φ(Ii, Dj , Ei→j ) → ˆIi→j ,生成的 ˆIi→j就是j时刻的图片。只要给定相关的深度估计Dj以及自我运动估计Eij,我们可以对任意的RGB图像进行warping操作,Ii→j。在实际的操作过程中,φ通过读取转换后的图像像素坐标来执行warping操作。然后,使用将投影场景与RGB空间中的实际下一帧ij图像相比较的投影场景的光度损失来建立监控信号,例如使用重建损失:lrec=min(kˆi1→2−i2k)。 (即将通过转换出的图像与实际下一帧的图像进行比较,min插值,为损失函数)。
Algorithm Baseline:
通过之前的研究,我们为我们的算法建立了一个稳定的基线。重建损失(reconstruction loss):计算从 1 帧 或 3 帧warping 到 2 帧的最小重建损失:
在这里插入图片描述
Reconstruction loss用来避免严重的遮挡而导致的影响。除了重建损失外,也使用了SSIM损失函数和一个深度平滑损失函数,并在训练中用于深度归一化的损失函数。Total loss:
在这里插入图片描述
Motion Model:我们介绍了一个移动物体的模型ψM,它与自我移动网络ψE共享一个框架,但是它用来预测在3D场景中独立目标的运动的。与自我运动模型相似,以RGB图像序列作为输入,但是这次使用预计算实例分割掩码来进行补充。这个运动模型用来预测3D场景中单个物体的运动向量,用来生成目标物体在目标帧的状态。因此,基于自我运动的计算图片帧的工作不仅仅是唯一的任务,一系列的任务是可以被组合的。静态背景是由基于ψe的单个warping操作生成的,而不同部分的对象则是根据ψe和ψm而warping的结果进行添加。
与之前的方法不同,我们的方法不仅仅对目标建模而且学习他们运动中的状态,这是对场景中的单个物体进行独立的建模的基本方法。
我们将实例对齐分割的部分(Si,1, Si,2, Si,3) ∈ NH×W作为图片序列中潜在的目标物体i。为了去计算自我运动,运动的物体需要首先从图片中分割出来。我们定义了静态场景的二进制掩膜O0(S) = 1 − ∪iSi,移除所用图片中潜在的移动物体,当Oj (S) = Sj时,则返回使用与物体j的二进制掩码。而静态场景的二进制掩膜则在数据导入自我移动模型前,通过每个元素相乘的方法应用与序列中的所有图片中
在这里插入图片描述
为了移动目标进行建模,我们首先通过自我运动估计去获得warped sequences (ˆI1→2, I2,ˆI3→2) 和 (Sˆ1→2, S2, Sˆ3→2),在这些序列中,自我运动已经被消除。假设深度和自我运动估计是正确的,那么图片中的不对其部分只能是运动的物体造成的。可能的运动物体的轮廓由 off-the-shelf 算法得出,对于图片中的所有的运动物体,目标运动估计M(i)的计算为:
在这里插入图片描述
注意M(i)1→2, M(i)2→3 ∈ R6 代表物体的移动,为了解释物体的移动,其实他们已经对相机的运动进行了建模,而不是简单的物体移动。实际的三维运动矢量是通过跟踪物体在各自区域的运动变换前后的三维像素运动来获得的。对应于这些运动估计,进行逆warping运算,根据预测的运动来移动物体。最后的warping结果包括移动物体I(i)的单独warping和自我移动I。Full warping:与 I 3_2 相等。
在这里插入图片描述
在上面,我们表示每个项的梯度。请注意,所使用的掩膜确保最终的warping结果中没有任何像素被占用不止一次。虽然可以有未填充的区域,但这些区域是通过最小损失计算隐式处理的。该算法将自动学习单个物体的三维运动,可用于推理。
Imposing Object Size Constraints:
在之前的工作中,一项普遍的问题是在车辆前以相同速度运动的车辆的深度通常会被映射成无限大。这是因为在前方的物体没有明显的移动,并且如果网络估计它是无限远的,则重新投影误差几乎减小到零,这样就大于正确的情况。这是很重要的限制,在此之前除了训练大量的立体图片,并没有好的办法。但是相比较单目视频,立体图像的可获得性就明显欠缺。因此,我们提出了一种不同的方法去解决这个问题。我们主要观察的是:如果模型对目标大小没有认知,那么如果物体很大:就可以通过将物体放在很远的地方和预测大幅度的移动来解释同一物体的移动;如果物体很小:就可以放在很近的地方和预测小幅度的移动来解释统一物体的移动。我们的主要思想是在训练中让模型学习目标的尺度,这在3D中的物体建模是可以实现的。假设某一物体的高度(如汽车)具有弱先验性,我们可以根据它的分割掩膜和摄像机的参数对其进行近似的深度估计。其中fy≈r是焦距,p∈r是我们在世界单位之前的高度,h∈n是各自分割块的高度(以像素为单位)。在实际应用中,人工估计这些约束是不可取的,网络产生的深度预测尺度也是未知的。因此我们让网络同时学习所有的约束,且不需要额外的输入。综上所述,我们在每一个物体的尺度上定义了一个损失项。t(i)为每一个物体的ID ,pj是可学习的高度。D是估计的深度图,S是相关物体的轮廓掩膜。Loss:
在这里插入图片描述 有效地防止了所有分割对象退化为无限深,迫使网络不仅产生合理的深度,而且还匹配对象的运动估计。我们以d为尺度,即中间帧的平均估计深度,通过联合收缩先验和深度预测范围来减少复杂损失的潜在问题。据我们所知,这是在3D中训练的完全单目模型中第一个处理退化问题的方法。由于这个loss是整个模型中不可缺少的部分,所以我们从开始训练时就加入了Lsc损失。但是,我们发现在校验移动物体深度的过程中,这个额外的损失运用于训练好的模型中时,仍然能起到同样的效果。 Test Time Refinement Model: 单目深度估计的优点是其的广泛适用性。然而,在图片序列中的连续连续深度预测时往往是不对齐或者不连续的。主要由两个原因:1)相邻帧的尺度是不连续的,因此模型没有全局尺度的意识,2)深度预测的低时间一致性。在这个工作中,我们认为在推测过程中调整模型的权重是不需要的或者可以在线调整的方式去改变模型是十分有益的,特别是在实际中的无人系统中。更具体地说,我们希望在执行预测时依然进行模型的训练,通过有效地执行在线优化来解决这些问题。在执行过程中,我们证实,即使非常低的时间连续性,我们依然可以大幅度的提高预测的结果。在线优化执行(N = 20)步可以有效的在预测中优化模型,N确定了充分利用在线优化和防止训练过度的最好的折中办法。这种在线优化的方法可以无缝连接至任何一个模型中。