视频中深度和自我运动的无监督学习
摘要
我们提出了一个无监督学习框架,用于从非结构化视频序列中进行单眼深度和相机运动估计。与其他工作[10,14,16]一样,我们使用端到端的学习方法,将视图合成作为监督信号。与之前的工作相比,我们的方法完全没有监督,只需要单目视频序列进行训练。我们的方法使用单视图深度和多视图姿态网络,损失基于使用计算的深度和姿态将附近的视图扭曲到目标。因此,网络在训练过程中由于损耗而耦合,但可以在测试时独立应用。对KITTI数据集的经验评估证明了我们方法的有效性:
1)单眼深度与使用地面实况姿态或深度进行训练的监督方法相比表现良好,
2)姿态估计在类似输入设置下与已建立的SLAM系统相比表现良好。
一、介绍
即使在短时间尺度上,人类也能推断出自我运动和场景的3D结构。例如,在街道上导航时,我们可以很容易地找到障碍物,并迅速做出反应以避开它们。多年的几何计算机视觉研究未能为真实世界场景(例如,存在非刚性、遮挡和缺乏纹理的场景)重新创建类似的建模能力。那么,为什么人类擅长这项任务呢?一种现象是,我们通过过去的视觉体验对世界产生了丰富的结构性理解,这种体验主要包括四处走动和观察大量场景,以及对我们的观察进行一致的建模。从数百万次这样的观察中,我们了解了世界上道路平坦、建筑物笔直、汽车由道路支撑等的规律,我们可以在感知新场景时应用这些知识,即使是从单个单眼图像中也可以。
图1. 我们系统的训练数据仅由从不同视点捕捉场景外观的未标记图像序列组成,其中不提供图像的姿态。我们的训练过程产生了两个独立运行的模型,一个用于单视图深度预测,另一个用于多视图相机姿态估计。
在这项工作中,我们通过训练一个模型来模拟这种方法,该模型观察图像序列,并旨在通过预测可能的相机运动和场景结构来解释其观察结果(如图1所示)。我们采用端到端的方法,允许模型直接从输入像素映射到自我运动的估计(参数化为6-DoF变换矩阵)和底层场景结构(参数化的为参考视图下的每像素深度图)。我们特别受到先前工作的启发,这些工作建议将视图合成作为一种度量[44],以及最近在端到端框架中处理校准的多视图3D情况的工作[10]。我们的方法是无监督的,可以简单地使用图像序列进行训练,而无需手动标记,甚至无需相机运动信息。
我们的方法建立在这样一个观点的基础上,即几何视图合成系统只有在其对场景几何和相机姿态的中间预测与物理地面实况相对应时才能始终表现良好。虽然对于某些类型的场景(例如,无纹理),不完美的几何形状和/或姿态估计可能会在合理的合成视图中作弊,但当呈现另一组具有更多样布局和外观结构的场景时,同一模型将惨败。因此,我们的目标是将整个视图合成管道公式化为卷积神经网络的推理过程,以便通过在大规模视频数据上训练网络进行视图合成的“元”任务,迫使网络学习深度和凸轮时代姿态估计的中间任务,以便对视觉世界做出一致的解释。对KITTI[15]基准的经验评估证明了我们的方法在单视图深度和相机姿态估计方面的有效性。我们的代码将在 GitHub - tinghuiz/SfMLearner: An unsupervised learning framework for depth and ego-motion estimation from monocular videos 上提供。
二、相关工作
运动产生的结构
结构和运动的同时估计是一个经过充分研究的问题,具有已建立的技术工具链[12,50,38]。虽然传统的工具链在许多情况下是有效和高效的,但它对精确图像对应的依赖可能会在低纹理、复杂几何/光度、薄结构和遮挡区域造成问题。为了解决这些问题,最近使用深度学习解决了几个流水线阶段,例如特征匹配[18]、姿态估计[26]和立体[10,27,53]。这些基于学习的技术很有吸引力,因为它们能够在训练期间利用外部监督,并且在应用于测试数据时可能会克服上述问题。
基于翘曲的视图合成
几何场景理解的一个重要应用是新颖视图合成任务,其目标是合成从新颖的相机视点看到的场景的外观。视图合成的经典范例是首先明确地估计潜在的3D几何结构或在输入视图之间建立像素对应关系,然后通过合成来自输入视图的图像块来合成新视图(例如,[4,55,43,6,9])。最近,端到端学习已被应用于通过基于深度或流转换输入来重建新视图,例如,DeepStereo[10]、Deep3D[51]和Appearance Flows[54]。在这些方法中,底层几何体分别由量化深度平面(DeepStereo)、概率视差图(Deep3D)和视图相关流场(外观流)表示。与直接从输入视图映射到目标视图的方法不同(例如,[45]),基于扭曲的方法被迫学习几何和/或对应关系的中间预测。在这项工作中,我们的目标是从训练来执行基于扭曲的视图合成的细胞神经网络中提取这种几何推理能力。
从注册的二维视图学习单视图三维
我们的工作与最近的一系列研究密切相关,这些研究涉及从注册的2D观测中学习单视图3D推断。Garg等人[14]建议学习单视图深度估计CNN,将投影误差应用于校准的立体声孪晶进行监督。同时,Deep3D[51]使用立体电影镜头作为训练数据,从输入图像预测第二立体视点。Godard等人[16]也采取了类似的方法,增加了左右一致性约束,并采用了更好的架构设计,从而获得了令人印象深刻的性能。与我们的方法一样,这些技术只从世界的图像观测中学习,而不像需要明确深度进行训练的方法,例如[20,42,7,27,30]。
这些技术与结构和运动估计的直接方法有一些相似之处[22],其中调整相机参数和场景深度以最小化基于像素的误差函数。然而,基于CNN的方法并没有直接将误差最小化以获得估计,而是只对每一批输入实例采取渐进步骤,这允许网络工作从大量相关信息库中学习隐式先验。几位作者已经探索了在他们的模型中构建可微分的重排序操作,这些模型是以这种方式训练的,例如[19,29,34]。
虽然上述大多数技术(包括我们的技术)主要集中于推断深度图作为场景几何输出,但最近的工作(例如[13,41,46,52])也表明,基于类似的投影几何原理,从2D观测中学习3D体积表示是成功的。Fouhey等人[11]进一步表明,通过利用场景规则性,甚至可以在没有3D标签(或注册的2D视图)的情况下学习3D推理
无监督/自我监督的视频学习
与我们的另一项相关工作是从视频中进行视觉表示学习,其中的总体目标是设计借口任务,用于从视频数据中学习通用视觉特征,这些任务后来可以重新用于其他视觉任务,如对象检测和语义分割。此类借口任务包括自我运动估计[2,24]、跟踪[49]、时间一致性[17]、时间顺序验证[36]和对象运动掩码预测[39]。虽然我们在这项工作中专注于推断明确的场景几何和自我运动,但直观地说,深度网络(尤其是单视图深度CNN)学习的内部表示应该捕捉到某种程度的语义,这些语义也可以通用于其他任务。
在我们工作的同时,Vijayanarasimhan等人[48]独立地提出了一个从视频中联合训练深度、相机运动和场景运动的框架。虽然这两种方法在概念上相似,但我们的方法侧重于无监督方面,而它们的框架增加了结合超视觉(例如,深度、相机运动或场景运动)的能力。在训练过程中,场景动力学的建模方式存在显著差异,在训练中,它们明确地解决了对象运动,而我们的可解释性遮罩不考虑经历运动、聚集和其他因素的区域。
三、方法
在这里,我们提出了一个框架,用于从未标记的视频序列中联合训练单视图深度CNN和相机姿态估计CNN。尽管是联合训练的,但深度模型和姿态估计模型可以在测试时间推断期间独立使用。我们模型的训练示例包括由移动相机拍摄的场景的短图像序列。虽然我们的训练过程在一定程度上对场景运动是稳健的,但我们假设我们感兴趣的场景大多是刚性的,即不同帧之间的场景外观变化由相机运动主导。
3.1.将综合视为监督
我们的深度和姿态预测神经网络的关键监督信号来自新视图合成任务:给定场景的一个输入视图,合成从不同相机姿态看到的场景的新图像。给定图像中的每像素深度,再加上附近视图中的姿势和可见性,我们可以合成目标视图。正如我们接下来将要展示的那样,该合成过程可以以完全可微的方式实现,将细胞神经网络作为几何和姿态估计模块。可见性以及非刚性和其他非建模因素可以通过使用“可解释性”掩码来处理,我们稍后将对此进行讨论(第3.3节)。
让我们表示<I1,In>作为训练图像序列,其中一帧It是目标视图,其余帧是源视图Is(1≤s≤N,s不等于t)。视图合成目标可以公式化为
其中,p在像素坐标上进行索引,Iõs是源视图。基于基于深度图像的渲染模块[8](如第3.2节所述),将源视图扭曲到目标坐标系,采用预先预测的深度Plot Dt,即预测的4×4相机变换矩阵1 T Plot T→s和源代码视图Is作为输入。
请注意,最近还探索了将视图合成作为监督的想法,用于学习单视图深度估计[14,16]和多视图立体[10]。然而,据我们所知,之前的所有工作都需要在训练过程中设置姿势图像集(在DeepStereo的情况下也需要测试),而我们的框架可以应用于没有姿势信息的标准视频。此外,它还将姿势作为学习框架的一部分进行预测。有关深度和姿态估计的学习管道,请参见图2。
图2:基于视图合成的监理管道概述。深度网络仅将目标视图作为输入,并输出每个像素的深度图。姿势网络将目标视图(It)和附近/源视图(例如,It−1和It+1)作为输入,并输出相对相机姿势(Tt→t−1,Tt→t+1)。然后,两个网络的输出用于反向扭曲源视图(见第3.2节),以重建目标视图,光度重建损失用于训练细胞神经网络。通过利用视图合成作为监督,我们能够以无监督的方式从视频中训练整个框架。
3.2.基于不同深度图像的渲染
如等式1所示,我们的学习框架工作的一个关键组件是一个可微分的基于深度图像的渲染器,该渲染器通过基于预测的深度图 Dt 和相对姿态T从源视图Is采样像素来重构目标视图It→s
设pt表示目标视图中像素的齐次坐标,K表示相机内部矩阵。我们可以通过2获得pt在源视图ps上的投影坐标
请注意,投影坐标ps是连续值。为了获得Is(ps)来填充Iõs(pt)的值(见图3),我们使用空间变换器网络[23]中提出的可微双线性采样机制,该机制线性地对ps的4像素邻居(左上、右上、左下和右下)的值进行三次插值,以近似Is(ps。Iõs(pt)=Is(ps)=P I∈{t,b},j∈{l,r}w ij Is(P ij s),其中w ij与ps和P ij之间的空间接近度成线性比例,并且P I,j w ij=1。[54]中使用了类似的策略来学习在不同视图之间直接扭曲,而这里像素扭曲的坐标是通过投影几何获得的,该几何能够对深度和相机姿态进行因子分解。
图3。可微分图像扭曲过程的说明。对于目标视图中的每个点pt,我们首先基于预测的深度和相机姿态将其投影到源视图上,然后使用双线性插值来获得位置pt处扭曲图像I的值。
3.3.模型限制建模
注意,当应用于单眼视频时,上述视图合成公式隐含地假设
1)场景是静态的,没有移动对象;
2) 在目标视图和源视图之间不存在遮挡/不遮挡;
3) 表面是Lambertian的,因此照片一致性误差是有意义的。
如果在训练序列中违反了这些假设中的任何一个,则梯度可能会被破坏,并可能抑制训练。为了提高我们的学习管道对这些因素的鲁棒性,我们还训练了一个可解释性预测网络(与深度和姿态网络联合并同时训练),该网络为每个目标-源对输出每个像素的软掩模Es,这表明该网络相信直接视图合成将成功地为每个目标像素完全建模。基于预测的Es,视图合成目标相应地由
由于我们没有对Es的直接监督,用上述损失进行训练将导致网络的平凡解决方案总是预测Es为零,这完美地将损失最小化。为了解决这个问题,我们添加了正则化项Lreg(Es),该正则化项通过最小化每个像素位置处具有常数标签1的交叉熵损失来鼓励非零预测。
3.4.克服梯度局部性
上述学习流水线的一个剩余问题是,梯度主要从I(pt)和I(ps)的四个邻居之间的像素强度差导出,如果正确的ps(使用地面实况深度和姿态投影)位于低纹理区域或远离当前估计,则这将抑制训练。这是运动估计中众所周知的问题[3]。 根据经验,我们发现两种策略可以有效地解决这个问题:
1)使用卷积编码器-解码器架构,该架构对深度网络有一个小瓶颈,它隐含地限制输出全局平滑,并有助于梯度从有意义的区域传播到附近的区域;
2) 显式的多尺度和平滑度损失(例如,如[14,16]中所述),其允许直接从较大的空间区域导出梯度。
我们在这项工作中采用了第二种策略,因为它对架构选择不太敏感。对于平滑度,我们最小化预测深度图的二阶梯度的L1范数(类似于[48])。
我们的最终目标是
其中,不同图像尺度上的l个索引,源图像上的s个索引,以及λs和λe分别是深度平滑度损失和可解释性正则化的权重。
3.5.网络架构
单视图深度
对于单视图深度预测,我们采用了[35]中提出的DispNet架构,该架构主要基于具有跳过连接和多尺度侧预测的编码器-解码器设计(见图4)。除预测层外,所有conv层之后都是ReLU激活,其中我们使用α=10和β=0.1的1/(α*sigmoid(x)+β)来将预测深度限制在合理范围内始终为正。我们还尝试使用多个视图作为深度网络的输入,但没有发现这能改善结果。这与[47]中的观察结果一致,其中需要强制执行光流约束以有效利用多个视图
图4。我们的深度/姿势/可解释性预测模块的网络架构。每个矩形块的宽度和高度分别指示相应层处的输出通道和特征图的空间维度,并且大小的每次减小/增加指示因子2的变化。(a) 对于单视图深度,我们采用了具有多尺度侧预测的DispNet[35]架构。除前4个conv层外,所有层的内核大小均为3,分别为7、7、5、5。用于第一conv层的输出通道的数量是32。(b) 姿态和可解释性网络共享最初的几个对流层,然后分别分支预测6-DoF相对姿态和多尺度可解释性掩码。第一conv层的输出通道的数量是16,并且除了前两个conv和最后两个去卷积/预测层之外的所有层的内核大小是3,其中我们分别使用7、5、5、7。详见第3.5节。
姿势
姿态估计网络的输入是与所有源视图连接的目标视图(沿着颜色通道),输出是目标视图和每个源视图之间的相对姿态。该网络由7个跨步-2卷积组成,然后是1×1卷积,具有6个*(N−1)输出通道(对应于每个源视图的3个欧拉角和三维平移)。最后,将全局平均池应用于所有空间位置的聚合预测。除了没有应用非线性激活的最后一层之外,所有conv层之后都是ReLU。
可解释性掩码
可解释性预测网络与姿态网络共享前五个特征编码层,然后是具有多尺度侧预处理的5个去卷积层。除了没有非线性激活的预测层之外,所有的对流/去对流层之后都是ReLU。每个预测层的输出通道数为2*(N−1),每两个通道都通过softmax进行归一化,以获得对应源-目标对的解释性预测(归一化后的第二个通道为Eõs,用于计算方程中的损失。3)。
四、实验
在这里,我们评估了我们的系统的性能,并在单视图深度和自我运动估计方面与现有方法进行了比较。我们主要使用KITTI数据集[15]进行基准测试,但也使用Make3D数据集[42]来评估跨数据集的泛化能力。
培训详细信息
我们使用公开可用的TensorFlow[1]框架实现了该系统。对于所有实验,我们设置λs=0.5/l(l是相应尺度的降尺度因子)和λe=0.2。在训练过程中,我们对除输出层外的所有层使用了批处理正态化[21],并使用了Adam[28]优化器,其中β1=0.9,β2=0.999,学习率为0.0002,小批量大小为4。训练通常在大约150K次迭代之后收敛。所有实验都是用单眼相机拍摄的图像序列进行的。在训练过程中,我们将图像大小重新调整为128×416,但在测试时,对于任意大小的图像,深度和姿态网络都可以完全卷积运行。
4.1单视图深度估计
我们在[7]提供的分割上训练我们的系统,并从测试场景中排除所有帧,以及平均光流幅度小于1像素的静态序列进行训练。 我们将图像序列的长度固定为3帧,并将中心帧作为目标视图,将±1帧作为源视图。我们使用两个彩色相机拍摄的图像,但在形成训练序列时独立处理它们。这导致总共44540个序列,其中我们使用40109个用于训练,使用44331个用于验证。
据我们所知,以前不存在以无监督的方式从单眼视频中学习单视图深度估计的系统。尽管如此,我们在这里提供了与先前的深度监督方法[7]和最近使用校准立体图像(即姿势监督)进行训练的方法[14,16]的比较。由于我们的方法预测的深度被定义为一个比例因子,因此为了进行评估,我们将预测的深度图乘以与中值和地面实况相匹配的标量s trl,即s trl=中值(Dgt)/中值(Dpred)。
与[16]类似,我们还试验了首先在较大的Cityscapes数据集[5]上对系统进行预训练(样本预测如图5所示),然后对KITTI进行微调,这会导致性能略有提高。
KITTI
在这里,我们评估了[7]测试分割的697幅图像的单视图深度性能。如表1所示,我们的无监督方法与几种监督方法(如Eigen等人[7]和Garg等人[14])的性能相当,但达不到Godard等人[16]的并行工作,后者使用具有左右循环一致性损失的校准立体图像(即姿势监督)进行训练。对于未来的工作,将类似的周期一致性损失纳入我们的框架是否可以进一步改善结果,这将是一个有趣的问题。图6提供了我们的结果与一些监督基线之间的视觉比较示例,这些比较示例涵盖了各种示例。可以看出,尽管以无监督的方式进行训练,但我们的结果与监督基线的结果相当,有时可以更好地保留深度边界和薄结构,如树木和路灯。
在这里,我们在图7中显示了由我们的初始城市景观模型和最终模型(在城市景观上预训练,然后在KITTI上微调)所做的样本预测。由于两个数据集之间的领域差距,我们的城市景观模型有时很难恢复汽车/灌木丛的完整形状,并将其误认为是远处的物体。
说明
Lambertian
Lambertian表面是指在一个固定的照明分布下从所有的视场方向上观测都具有相同亮度的表面
光学知识(一) - 知乎
作者介绍
Tinghui Zhou
Tinghui Zhou's Homepage
个人理解
公式二的讲解,这个很关键
这篇论文应该算是基于深度图和姿态进行自监督学习的一个鼻祖吧
核心思想就是深度网络出深度图,姿态网络出相机姿态,详细见公式二的讲解,图像左乘相机参数和深度,得到像素点在3D坐标系下的坐标,然后乘姿态(两张图的相对位姿),得到目标图在3D坐标系下的坐标,然后乘相机参数,将目标图的3D坐标转为2D。之后将预测的目标图和真实的目标图做差(损失函数,公式一),训练最终得到可用的深度网络和姿态网络
论文下载地址
https://arxiv.org/pdf/1704.07813.pdf
工程下载地址
GitHub - tinghuiz/SfMLearner: An unsupervised learning framework for depth and ego-motion estimation from monocular videos
参考
【SLAM系列】Unsupervised Learning of Depth and Ego-Motion from Video_^_^ 晅菲的博客-CSDN博客
Unsupervised Learning of Depth and Ego-Motion - 知乎