谷歌 AI 实现对移动镜头下移动人物的深度预测?

人类的视觉神经是一套神奇的系统。

作为三维生物的视觉系统,我们可以轻易地把三维空间的二维投影(照片/视频)在大脑里重新还原成三维空间。换句话说,当我们看到一个平面上的两个物体时,我们知道这两个物体并非重叠,而是一前一后。我们甚至可以估算出这两者之间的大致距离。

对于试图超越人类视觉能力的计算机视觉技术来说,重建三维空间时的深度预测这一技能却是一个绕不开的难题。毕竟,机器的输入只是一个二维平面上的像素分布数据,而利用两个观测点进行三角测量却需要多相机阵列或对象保持静止。面对“人机皆动”的动态场景,当下的计算机视觉算法就无能为力了。

当然,任何技术突破需要的只是时间。这不,Google AI 的研究人员根据运动视差(Motion Parallax)的原理,成功的训练出了一个深度学习的沙漏模型,有效地解决了移动镜头下移动人物的深度预测问题。

图 | 输入镜头和人物都在自由移动的普通视频(左)得到深度图(右),此深度图中越亮表示离相机越近。(来源:Tali Dekel, et al./Google AI)

我们的世界并不是二维平面,虽然人类视觉系统可以轻易地将看到的 2D 图像转化为 3D,但机器该如何知晓深度呢?目前的主流方法是利用三角测量(Triangulation),三角测量理论是通过两点观测来确定对象的位置,即两个观测点和对象处于同一平面,通过两个观测点的距离和两个夹角来计算对象的位置。完成三角测量需要有多个相机组成阵列,如 Google’s Jump,若一个镜头的话,就要在镜头移动的时候对象保持静止。

而在镜头和场景里的对象都在自由移动的情况下,不确定的位置使三角测量算法感到迷惑迷茫甚至绝望,于是大多现存的深度预测方法就会开始“瞎算”,要么过滤掉移动对象,将他们视为噪音,直接标记为 0,要么假装目标没有移动,计算出不正确的深度值。

图 | 传统立体测量场景是利用同时的两点观测数据,即目标物静止(左);镜头和对象在同时移动的测量场景,三角测量理论无法适用(右)。(来源:Tali Dekel, et al./Google AI)

面对这种不科学的做法,Google AI 的研究人员创造了首个针对于镜头和人体同时移动情况的深度学习模型,并不是传统针对静止对象的深度预测模型,无需 3D 三角测量,仅利用镜头和人物都在移动的普通视频数据,完美输出深度图(一种三维场景的信息表达方式,图的像素值反映场景中物体到相机的距离)。这与现实世界大多数物体都在运动的情况契合,并且模型表现优于现有最佳深度预测模型,能真实还原移动人物的位置,如此,一些视频里动态人物的扣除、遮挡镜头的还原,一些 3D 效果渲染,都不在话下。

训练数据的收集

此深度预测模型利用有监督的方式进行训练,即需要自然场景下的有移动镜头的视频,并且有精准的深度数据。那么如何得到有标注的训练数据集呢?这就要从 2016 年 11 月开始风靡互联网的 YouTube 人体模特挑战(Mannequin Challenge)说起了。

在这个挑战中,人静止于各种姿势,如同模特,镜头移动过整个场景拍成视频,素材里整个场景静止,只有相机在移动,所以基于三角测量的一些 3D 重建方法,如 multi-view-stereo (MVS),可以精准地计算出整个场景包括人物的深度,从而得到深度标注。整个数据集约有 2000 个视频,涵盖各种真实场景下的各种造型各种姿势的人类。

毕竟,如果合成数据的话需要大量的各种场景和人类动作进行逼真的模拟和渲染,不太现实,并且这种模拟数据所训练出来的模型可能也难以迁移到真实场景;如果换用 RGBD(RGB+depth)相机,如 Microsoft 的 Kinect,来记录真实场景产生数据,也会受到深度相机本身限制,比如物体材质影响反射导致深度值缺失,并且深度相机一般也受限于室内场景。

故,风靡一时的 Mannequin Challenge 视频,在此将做出卓越的贡献。

图 | YouTube 上人体模特挑战的视频,视频中人物以各种姿势造型静止,镜头划过整个静止场景,传统 3D 重建算法 MVS 计算出所有视频中的深度值作为训练数据集的标注(来源:Tali Dekel, et al./Google AI)

预测移动人物的深度

但新的问题产生了,人体模特挑战视频里人物是静止的,想要处理移动镜头下的移动人物,如何解决?

一个可能的解决方案:从视频的每一帧来单独推断深度值,即仅将单个帧输入模型。这种方案所训练的模型的确优于现有的最佳单图像深度预测方法,但考虑多帧图像提供的信息,模型是否会进一步提升呢?

这就是运动视差。由于透视,从不同位置观察静止画面时,近处物体比远处物体有更大视差,这种视差信息可以判断深度信息。因此,研究者引入了每两帧画面之间的 2D 光流图,即两帧图像间像素位移信息,来辅助深度预测。光流(optical flow)是指空间运动物体在观察成像平面上的像素的瞬时速度,利用图像序列中像素在时间上的变化以及相邻帧之间相关性,根据视差原理可以计算出相邻帧物体的运动信息。

光流一般是由于目标本身的移动、相机的移动或两者共同运动产生,所以场景深度、相机的相对位置自然会影响光流图,相机位置是已知的(利用视觉惯性测距得到),故可以得到静态场景的初始深度值,但人物同时也在运动,所以在得到初始深度图时,人物会产生噪音,利用人体切割模型,将人物区域掩去,剩下的就是静态的场景深度信息。故模型输入为 RGB 图像、人物掩蔽图,和利用 SfM 对光流图计算出的掩蔽人物后的深度图。

图| 深度预测网络模型的输入输出,模型的输入包括:一张 RGB 图像(Frame t),一张掩去人物的图像,和一张计算得到的无人物初始深度图;模型的输出是 Frame t 图像的深度图。训练集的深度图标注是 MVA 方法计算的深度值。(来源:Tali Dekel, et al./Google AI)

最终模型

研究人员最终采用了沙漏模型(hourglass network)的一个变种作为模型结构,将最近邻上采样层变为双线性上采样层。沙漏模型一般结构如下,相同颜色的方块为相同结构的网络,H是卷积核 3x3 的卷积网络,所有其他网络结构是 Inception Module,Inception Module 是一种区别于传统将卷积层串联,而将 1x1、3x3以及5x5的卷积层进行并联的结构。

图 | 沙漏模型(hourgalss network)具体结构。(来源:Weifeng Chen, et al./ University of Michigan)

这个模型可以预测有移动人类场景的深度,细化其他地方的深度,实现移动人物的去除。由于人体有着大概一致的形状和物理维度,所以可以通过训练数据来先验地学习到这些信息。因此,这个深度预估模型可以实现对任意移动人类和任意移动相机情况下的深度预测。

和一些业界现有最佳深度预测模型相比,此模型效果优越,输出的深度图十分完美。

图 | 深度预测网络模型表现对比:上层的 DORN 和 Chen 等人设计的模型都为单图深度预估方法,下层的 DeMoN 为基于立体视觉的方法(来源:Tali Dekel, et al./Google AI)

该深度预测模型可以在一些视频中形成3D感知的效果,比如合成散焦。下图是利用模型将通过视频合成散焦。

图 | 产生散景视频特效,视频由Wind Walk Travel Videos提供。(来源:Tali Dekel, et al./Google AI)

这个模型也可以用于将单目镜头视频变成立体视频,或者将场景中插入合成的 CG(Computer Graphics)对象,或者实现一些被遮场景、缺失场景的填充。如下图,通过利用视频的其他帧出现的内容,模型实现了相机摆动时演员身后领域的填充。

图 | 填充被遮挡的视频。(来源:Tali Dekel, et al./Google AI)

这么强大的模型,这么优秀的思路,在增强现实、3D 渲染等一些计算机视觉领域自然有其用武之地。