前言
2018年CVPR会议上,商汤科技SenseTime被收录的论文中,有一篇《GeoNet--Unsupervised Learning of Dense Depth, Optical Flow and Camera Pose》,提出了一个叫做GeoNet的框架——一种可以联合学习单目深度、光流和相机姿态的无监督学习框架,其表现超越了现有的一些无监督学习方法,并且取得了可以与监督学习方法相媲美的的结果。本人目前正在学习与之相关的内容,本篇博客将详细地解读论文。
Abstract
GeoNet——一种用于视频中单目深度、光流和相机运动估计的无监督学习框架。这三者通过三维场景几何特性耦合在一起,以端到端的方式进行联合学习。从每个单独模块的预测中提取几何关系,然后将其合并为图像重构损失,分别对静态和动态场景进行推理。除此之外,还提出了一种自适应几何一致性损失损失来提高对outliers和non-Lambertian区域的鲁棒性,有效地解决了遮挡和纹理模糊的问题。在KITTI数据集上的实验表明,GeoNet在三个任务上都分别取得了state-of-the-art的结果,比以前的无监督学习的方法表现更好,甚至可以与监督学习的方相媲美。
1.Introduction
理解视频中的3D场景几何是视觉感知中的基础问题,包括许多经典的计算机视觉任务,例如深度恢复、光流估计、视觉里程计等等。这些技术都有广阔的工业应用前景,包括自动驾驶、交互式协同机器人、定位与导航系统等。
传统的运动恢复结构(SfM)[34,42]以整合的方式处理这些任务,其目的在于同时重建场景结构和相机运动。近期一些工作在在鲁棒性和特征描述符[2,39],更有效的跟踪系统[55],更好地利用语义级信息[4]等方面取得了进展。尽管如此,对于异常值和非纹理区域的失效仍然没有完全消除,因为它们本质上还是依赖于高质量、低级别的特征对应。
为了突破这些限制,深度模型[35,45]被应用于每个低层次的子问题,并取得了与传统方法相当的进步。主要的优势来自于大数据,可以捕捉高层次的语义信息给低层次的学习,因此在ill-posed区域会比传统的方法表现更好。
然而,需要大量的groundtruth数据用于深度学习,就需要昂贵的激光雷达和GPS设备。而且,以往的深度学习方法大多是针对如深度[26]、光流[8]、相机姿态[22]等某一特定任务的,而没有探究这些任务之间的内在依赖关系,这种关系可以通过3D场景结构的几何特性计算得到。
最近已有一些工作将这些问题merge到一起,但都有一些局限性。例如,[48]需要大量的激光扫描的深度数据用作监督,[15]需要立体相机作为数据采集的附加设备,[50,56]不能有效处理非刚体和遮挡区域。
这篇文章中提出的无监督学习框架GeoNet将从视频中联合估计单目深度,光流和相机运动。这种方法的理论基础在于3D场景几何的本质特性。大部分自然场景都是由刚性静态表面构成的,例如道路、房屋、树木等。它们在视频帧之间的2D投影图像完全由深度结构和相机运动决定。同时,在这些场景中也存在动态对象,例如行人、汽车等,他们具有大位移、无序的特点。
因此,我们采用了深度神经网络来描述上述特点。我们采用了一种“分而治之”的策略。设计了一种级联结构,用于自适应求解刚体流和物体的运动。整个运动场可以被逐步细化,使pipeline可分解并且便于学习。视图合成损失(view synthesis loss)引导这种融合运动场的无监督学习。第二个贡献,引入了自适应几何一致性损失来来克服那些不包括在纯粹的view synthesis中的目标,比如遮挡和光度不一致的问题。通过模仿传统的前后向(或左-右)一致性检查,过滤了可能的离群点和封闭区域。预测一致性在非遮挡区域的不同视图之间强制执行,而错误预测则被平滑,特别是在遮挡区域的错误。
最后,我们在KITTI数据集上对三个任务进行综合评测,取得了比已有的无监督学习方法更好的效果,并且可以与监督学习的方法相媲美。
2.Related Work
Traditional Scene Geometry Understanding
结构自运动(SfM)是一个长期存在的问题,即从非常大的无序图像集合中联合起来进行场景结构和相机运动的推断[13,16]。通常从特征提取和匹配开始,然后进行几何验证。在重建过程中,将bundle adjustment(BA)[47]应用于全局重构结构的细化。现有的这些方法非常依赖于精确的特征匹配,如果没有良好的光度一致性的保证,性能无法得到保证。典型的问题可能是由于自然场景中常见的低纹理、立体模糊、隐蔽性等原因造成的。
场景流估计是另一个与我们的工作密切相关的课题,它是从无序图像序列中求解场景的密集三维运动场[49]。MRFs[27]被广泛地应用于将这些因素建模为离散标记问题。然而,由于有大量的变量需要优化,这些现成的方法通常太慢,无法实际使用。另一方面,目前已有的几种方法强调了一般场景流的刚性规律。与上述方法不同的是,我们采用了深度神经网络来更好地利用高水平的线索,而不是局限于特定的场景。我们的端到端的方式在用户级的GPU上进行inference只需要毫秒级的时间。此外,我们还对不包括在经典场景流概念中的大量的自主运动进行了有效的估计。
Supervised Deep Models for Geometry Understanding
近年来,随着深度学习的发展,3D几何理解的许多任务,包括深度、光流、姿态估计等,都取得了很大的进展。[9]利用了一个双尺度网络,证明了深度模型可以用于单目深度估计。虽然这种单目形式的典型严重依赖于场景先验知识,所以很多新方法更倾向于立体设备。[29]引入了一个相关层来模仿传统的立体匹配技术。[24]提出了通过深度特征对成本体积进行3D转换,以更好地聚合立体信息。在学习光流的时候也应用了类似的方法。[18]对大型合成数据集进行了大量的网络训练,取得了与传统方法相当的效果。
除了上述问题,相机定位和跟踪也可以用监督深度学习解决。[23]将6DoF摄像机的重新定位问题转换为学习任务,并在多视点几何基础上进行分析。
Unsupervised Learning of Geometry Understanding
为了减轻对昂贵的groundtruth数据的依赖,人们提出了各种非监督的方法来解决三维理解任务。核心的监督信号通常来自一个基于几何推理的视图综合(view synthesis)目标。
3.Method
在这一节中,我们从3D场景的性质开始分析,给出GeoNet的概述——由刚性结构重建器和非刚性运动定位器两部分组成。最后,提出了几何一致性执行——GeoNet的核心。
3.1.Nature of 3D Scene Geometry
视频或图像是3D空间投影到特定维度的截图。3D场景通常由静态背景和运动物体组成。静态物体在视频帧之间的运动仅仅由深度和相机运动组成。而动态物体的运动则由相机齐次运动和物体本身的运动共同构成。
3.2.Overview of GeoNet
GeoNet以无监督学习的方式感知3D场景的几何形状。将整个框架分为两个部分——刚性结构重构器(rigid structure reconstructor)&非刚性结构定位器(non-rigid motion localizer),分别来学习刚体流和剩余流(residual flow)。利用图像相似度来引导无监督学习,可以推广到无限数量的视频序列而不需要任何标记成本。3.3.Rigid Structure Reconstructor
目标:重建刚性场景结构并且对非刚性区域和离群点有很好的鲁棒性。训练样本时间上连续的视频帧,具有已知的相机内参。目标帧I(t)作为参考视图(reference view)。DepthNet用单目图像作为输入,利用场景先验知识进行深度预测。在训练期间,整个序列被视为一小批独立图像(mini-batch),并输入DepthNet。与之不同的是,PoseNet利用整个沿着channel维度concat的图像序列作为输入,回归出相机姿态T(t-s)的6DoF。利用这些基本预测,就可以推导出刚体流,3.4.Non-rigid Motion Localizer
在第一阶段忽略了运动物体的存在,因此我们在第二阶段提出了ResFlowNet来定位非刚体的运动。直观上说,一般光流可以直接模拟无约束运动,这在现有的深度学习模型中经常采用。但是他们没有很好地利用刚性区域的约束性质,而我们在第一阶段就这样做了。用ResFlowNet学习剩余的非刚性流(residual non-rigid flow),其位移仅仅由物体与世界平面(world plane)的相对运动引起。以级联的方式将ResFlowNet连接在第一阶段之后。对于给定的图像帧对,ResFlowNet利用刚性结构重构器的输出,预测对应的剩余流(res)f(t-s),最终整个预测流为(full)f(t-s)=(rig)f(t-s)+(res)f(t-s)。
刚性结构器在第一阶段产生了高质量的重构,为第二阶段奠定了良好的基础,因此ResFlowNet只需要关心剩余的非刚体。不仅可以纠正运动物体预测的错误,还可以纠正第一阶段不完美的结果(得益于端到端的学习方式,不完美的结果由高饱和度和极端照明条件产生)。
通过略微的修改将第一阶段的监督扩展到目前阶段。具体的,在整个预测流(full)f(t-s)之后,对任意一对目标帧和源帧之间再进行image warping,用(full)I~代替(rig)I~,从而获得full flow的warping loss。同样的,将平滑损失扩展到2D光流场中。
3.4.Geometric Consistency Enforcement
GeoNet的每个阶段都以视图综合(view synthesis)作为监督,其中隐含了光度一致性假设(photometric consistency)。虽然我们采用了图像相似性度量,但是遮挡区域和non-Lambertian表面仍然不能被很好地处理。为了减轻这些负面影响,我们在不改变网络结构的前提下在学习框架中应用了前后一致性检验。但是我们认为这种一致性的约束和warping loss,不应该加在遮挡区域。我们优化了最终运动场的自适应一致性损失,几何一致性损失是通过优化以下目标来实现的:
其中,(delta)f是目标帧I(t)在像素p(t)处前后一致性检验计算得到的full flow的微分。[ ]是Iverson bracket,[P]等于1(如果条件P为真,否则等于0)。 delta(pt)表示条件:
前向、后向流动不一致像素点被认为是可能的离群点。由于这些区域违反了photo consistency和geometric consistency假设,只能用平滑损失来处理。因此full flow的warping loss和geometric consistency都是按像素加权来计算的。
因此,整个网络的损失函数为:
其中,lamda损失权重,l代表金字塔图像尺度,<t,s>代表任意一对目标帧和源帧对和它们的交换。
4.Experiments
本节分别给出单目深度、光流和相机姿态估计的定性和定量评测结果。
4.1.Implementation Details
Network Architecture
GeoNet主要包含三个子网络,即DepthNet&PoseNet,一起构成刚性结构重构器,ResFlowNet与前一阶段的输出相结合,实现非刚体运动的定位。由于DepthNet和ResFlowNet推测的是像素级的几何关系,我们采用[15]中的网络结构作为backbone。这个结构主要由编码器(encoder)和解码器(decoder)两部分组成。编码器部分以ResNet50作为更有效的剩余学习方式。解码器由反卷积层组成,将空间特征映射放大到输入的全尺度。为了同时保留全局高层次特征和局部细节信息,在encoder和decoder之间的不同分辨率上采用了skip connections,进行了多尺度的深度预测。ResFlowNet的输入是在channel维度上连接起来的几张图像组成,包括源帧和目标帧图像对,刚性流(rig)full,合成视图(rig)I~和它与原始图像I(t)的误差。PoseNet回归了6DoF的相机姿态,欧拉角和平移向量。PoseNet的网络结构与[56]相同,8个卷积层后连接着一层全局平均池化层,最后是预测层。除了最后的预测层之外,其他层都采用了Batch Normalization[19]和ReLUs**函数。
Training Details
实验是用Tensorflow框架进行的,虽然子网络可以以端到端的方式一起训练,但不能保证局部梯度优化可以使网络达到最优点。因此,我们采用了分段的训练策略,同时减小内存和计算消耗。先训练DepthNet和PoseNet,确定权重后再训练ResFlowNet。训练的输入图像的分辨率都resize到128*416,同时也采用了随机resizing、cropping和color augumentations来防止过拟合。网络优化函数采用了Adam,beta1=0.9,beta2=0.999。初始学习率为0.0002,mini-batch size为4。网络在单个Titan XP GPU上训练,预测深度、光流和相机姿态的速度分别为15ms,45ms,4ms。第一个阶段和第二阶段分别需要30和200个epoches来收敛。在KITTI的不同的分割集上进行测试。
4.2.Monocular Depth Estimation
用split of Eigen来对单目深度估计进行评测。和测试集看上去很相似的帧以及静态帧都不包括在内[56]。通过将Velodyne激光扫描点投影到图像平面上,获得地面groundtruth。为了以输入图像的分辨率进行评测,将预测结果进行内插。训练时,序列长度设置为3。
表1所示,“Ours VGG”在KITTI数据集上进行训练,网络结构与"[56] without BN"相同,两者相比,说明loss function的有效性。“Ours VGG”和"Ours ResNet"说明网络结构的优势。我们的方法比有监督学习[9,28]和以前的无监督学习方法[14,56]效果更好。有趣的是,当模型在KITTI和Cityscapes数据集上训练时,我们的方法略逊于[15],这是由于数据集之间的差异(stereo image pairs & monocular video sequence)造成的。以上对比结果都揭示了GeoNet的几何理解能力。
4.3.Optical Flow Estimation
在KITTI stereo/flow split上测试光流部分的表现。由于无监督学习方式,可以用不带grountruth的原始图像进行训练。所有的图像一共包含了28个场景(测试图像除外)。为了比较residual flow learining和direct flow learning,我们将[8]中的FlowNet进行修改,得到的DirFlowNet(no GC)包含warping loss和smoothness loss,DirFlowNet还包含了geometric consistency loss。此外,还对自适应一致性损失和朴素一致性损失(没有按照像素加权)进行了对比研究。
如表2所示,GeoNet在overall区域取得了最低的EPE误差和在non-occluded区域与其他无监督学习baseline相比更低的EPE误差。DirFlowNet(no GC)与DirFlowNet对比,说明了即使在不同的框架中,geometric consistency loss的有效性。此外,GeoNet与DirFlowNet的损失函数相同,但GeoNet在overall区域的EPE误差更小,说明了基于3D场景几何框架的优势。朴素一致性的效果没有自适应一致性的效果好。
Gradient Locality of Warping Loss
然而,DirFlowNet在non-occluded区域的表现比GeoNet好,似乎有些不合理。我们研究了不同程度的groundtruth residual flow分布,即|| f(gt)-f(rig)||,其中f(gt)代表groundtruth full flow。如下图所示,GeoNet在小displacement时误差比其他方法小得多,但是后来误差随着diaplacement增大而增大。通过实验发现,GeoNet擅长于纠正rigid flow的小误差。但是,预测的residual flow倾向于过早地收敛到一定的范围,这与[15]的实验结果是一致的。这是因为warping loss是由局部像素强度的差导出的,这在复杂的级联结构即GeoNet中会被放大。我们用数值监督(由groundtruth或者从DirFlowNet中提取的knowledge)来取代warping loss,但不改变网络结构,发现这个问题就不存在了。解决warping loss的局部梯度性,将是今后工作的改进方向。
4.4.Camera Pose Estimation
在KITTI的visual odometry split数据集上测试相机姿态。为了与[56]对比,将11个带有groundtruth的序列分成两部分,00-08用于训练,09-10用于测试。训练时序列长度设为5。除此之外,还将我们的方法与传统的SLAM方法,ORB-SLAM[32]进行对比。ORB-SLAM涉及到全局优化步骤,如闭环检测和转角调整(Bundle Adjustment)。ORB-SLAM(short)训练时以5帧作为输入,ORB-SLAM(long)以整个序列作为输入。所有的结果都以5帧的轨迹来进行评测,缩放因子scaling factor被优化以与groundtruth一致来解决尺度不确定性(scale ambiguity)的问题[43]。如表3所示,我们的方法比其他所有的方法都好。注意到,虽然GeoNet只利用了相当短的时间内的有限信息,但是仍然取得了比ORB-SLAM(full)更好地结果。这意味着GeoNet捕捉到了额外的高层次的线索,而不仅仅是低层次的特征对应。我们分析了效果不好的情况,发现当大的运动物体出现在摄像机前面时,网络有时会对参考系统产生混淆,而这种情况通常存在于direct visual SLAM中。
5.Conclusion
我们提出了联合无监督学习框架GeoNet,发现了利用几何关系联合解决这些任务比以前那种单独去解决任务的方案更有优势。无监督性质深刻地揭示了神经网络在几何推理中捕捉高层线索和特征对应的能力。实验结果表明,在不需要groundtruth的情况下学习这些low level的视觉任务是有可能的。
未来的工作,一方面要解决warping loss的局部梯度性的问题,并且将语义信息引入到GeoNet中。