新智元报道
来源:Google AI
编辑:大明
【新智元导读】谷歌近日推出了在计算机视觉领域模拟重建人类视觉的新模型,与以往方法不同的是,新模型利用AI,通过普通Youtube视频预测深度图,可以在场景内的摄像头和人同时运动的复杂情况下生成自然视频。
人类的视觉系统具有非凡的能力,可以从2D投影中理解3D世界。即使在包含多个移动物体的复杂环境中,人也能够对物体的几何形状和深度的排序进行可行的解释。长期以来,计算机视觉领域都在研究如何通过2D图像数据计算重建场景的几何特征,来实现和人类类似的能力,但在许多情况下,仍然难以实现具备充分鲁棒性的重建。
当摄像头和场景中的物体都在自由移动时,是实现重建的最困难的情况。这种情况混淆了基于三角测量的传统3D重建算法,该算法假设可以同时从至少两个不同的观察点观察到相同的对象。满足这个假设需要一个多摄像头阵列,或者单摄像头移动,但场景目标本身是静止状态。因此,现有的大多数方法要么需要过滤掉移动的目标(将移动目标的深度固定为“零”),要么直接忽略移动目标(会导致深度值发生错误)。
左图:传统的立体设置假设至少有两个观察点在同时捕捉场景。右图:我们考虑摄像头和拍摄对象都在移动的情况。
我们通过基于深度学习的方法来解决这个基本问题,该方法可以从普通视频中生成深度图,场景中的摄像头和主体目标都可以自由移动。模型从数据中学习人体姿势和形状的先验知识,无需直接3D三角测量。尽管最近使用机器学习进行深度预测逐渐兴起,但这项工作是第一个针对同时在摄像头和目标都在运动的状态下的基于学习的方法。
本研究中的观察目标是人类,人类是增强现实和3D视频效果的有趣目标。
我们的模型可以预测深度图(右图,离摄像头越近,图中越亮),场景中的人和摄像头都在自由移动。
训练数据
我们以监督学习的方式训练深度预测模型,该模型需要通过移动的摄像头捕获的自然场景视频以及精确的深度图。关键问题是从何处获取此类数据。综合生成数据需要对各种场景和自然人类行为进行逼真的建模和渲染,这是很困难的任务。
此外,针对这样的数据训练的模型可能难以推广到真实场景中。另一种方法可能是用RGBD传感器(如微软的Kinect)记录真实场景,但深度传感器通常仅限于室内环境,而且要面临3D重建上的一系列问题。
我们利用现有的数据来进行监督学习:即YouTube视频,视频中的人们通过自己定格在各种自然姿势,模仿人体模特效果,而手持摄像机则在现场记录。
因为整个场景是静止的(只有摄像机在移动),所以基于三角测量的方法是行得通的,可以获得包括其中人物在内的整个场景的精确深度图。我们收集了大约2000个这样的视频,涵盖了各种逼真的场景,场景中的人按照不同的分组配置自然分布。
人们在摄像头在场景中移动时模仿人体模特,我们将其作为训练数据。我们使用传统的MVS算法来估计深度,并在深度预测模型的训练中将其用于监督。
推断移动中的人的场景深度
Mannequin挑战视频对移动中的摄像机和“定格”的人进行深度监控,但我们的目标是利用移动的摄像头和移动的人来处理视频。我们需要构建网络输入来弥补这一差距。
一种可能的方法是为视频的每一帧都进行深度图推断(也就是对模型的输入相当于单帧图像)。虽然这种模型改进了用于深度预测的最先进的单帧方法,但是我们可以通过来自多帧的信息组合来进一步改善结果。比如运动视差,即两个不同视点之间的静态物体的明显的相对运动,就对深度推断提供了有力线索。为了充分利用这些信息,我们计算了视频中每个输入帧和另一帧之间的2D光流,用它表示两帧之间的像素位移。
这些光流场取决于场景的深度和摄像头的相对位置。但是,由于摄像头位置是已知的,可以从流场中去除二者之间的依赖关系,由此生成初始深度图。此初始深度仅对静态场景区域有效。为了在测试时处理运动中的人,可以利用人工分割网络来盖住初始深度图中的人类区域。这样,我们网络的完整输入包括:RGB图像、盖住人类的区域,以及基于视差的遮盖后的深度图。
深度预测网络:模型的输入包括RGB图像(第t帧),人类区域的遮盖和非人类区域的初始深度,根据输入帧与另一个之间的运动视差(光流)计算视频中的帧。模型输出第t帧的完整深度图。由MVS算法计算出的深度图负责对训练过程的监督。
该网络的作用是“修复”人与场景的深度值,并在其他地方细化深度值。因为人类的外形和大小特征几乎一致,网络可以通过观察多个训练样例,在模型内部学习这些先验知识。经过训练后,模型就可以处理任意摄像头和人体同时运动的视频。
来看一段介绍视频:
以下是基于视频的深度预测模型结果的一些示例,并与最近基于最新学习的方法做了比较。
上图:基于学习的单眼深度预测方法。 下图:基于学习的立体方法(DeMoN)和我们的估计深度图的结果。
使用深度图处理3D视频效果
我们预测的深度图可用于产生一系列3D感知视频效
使用估计深度图产生的散景效果
我们的深度图也可用于其他方面的应用,包括利用单眼视频生成立体视频,将合成CG对象插入场景,还可以在视频的其他帧中显示内容的情况下进行场景区域的填充。