Deep3D: Fully Automatic 2D-to-3D Video Conversion with Deep Convolutional Neural Networks

Deep3D: 利用深度卷积神经网络的全自动 2D-3D 视频转换

原文:Junyuan Xie 等. 2016

文章目录

  • Deep3D: 利用深度卷积神经网络的全自动 2D-3D 视频转换
    • 摘要
    • 1 引言
    • 2 相关工作
    • 3 方法
      • 3.1 模型结构
      • 3.2 利用选择层重构
      • 3.3 放大至全分辨率
    • 4 数据集
    • 5 实验
      • 5.1 实施细节
      • 5.2 算法比较
      • 5.3 结果
      • 5.4 算法分析
    • 6 结论

Deep3D: Fully Automatic 2D-to-3D Video Conversion with Deep Convolutional Neural Networks_第1张图片
图 1:我们提出的 Deep3D 是一个全自动的 2D-3D 转换算法。它将 2D 图像或视频帧作为输入,输出 3D 立体图像对儿,可以通过 3D 眼睛或者头戴式 VR 显示设备观看。Deep3D 直接用 3D 电影中的立体对儿作为数据集进行训练,损失是重建出的右视点与给定的左视点间的像素级的差异。在内部,Deep3D 的网络预测出一个差异概率分布图,再输入到可微的基于深度图像的渲染层来生成右视点。因此 Deep3D 不需要采集深度传感器的数据用于监督。

摘要

  由于 3D 电影成为主流和 VR 市场的显露,对 3D 内容的需求迅速增长。然而,3D 视频制作面临着挑战。本文提出利用深度神经网络自动地将 2D 视频和图像转换为有立体感的 3D 格式。此前的 2D-3D 自动转换算法不是端到端的,且需要 ground truth 深度图来监督。我们的方法直接用从 3D 电影中提取出来的 立体对儿 进行端到端的训练。这种新的训练策略使得采用更大数量级的数据量成为可能,并且显著地提高了算法的表现。实际上,Deep3D 在定量的和人的主观评估上都有超过基线的表现。

关键词:深度估计,深度卷积神经网络

1 引言

  3D 电影非常流行并且占据着电影市场的很大一部分,在美国和加拿大,2010 到 2014 年间,3D 电影的票房在全部电影票房的 14% 到 21% 之间。此外,逐渐显露的头戴 VR 显示市场很有可能带来 3D 内容需求的增长。
  3D 视频和图像通常以立体格式存储。每一帧都包括同一场景的两个投影,一个暴露给观察者的左眼,另一个暴露给观察者的右眼,因此带给观察者以三维观看场景的体验。
  制作 3D 电影的方法有两种:直接拍摄 3D 格式,或者拍摄 2D 后转换成 3D。以 3D 格式拍摄需要昂贵的立体相机设备。除了设备成本外,阻止立体相机实用性的还有一些摄影技术问题。一些并不昂贵的特殊视觉效果,比如强制透视,就与多视点捕捉设备不兼容。2D-3D 转换提供了另一种制作 3D 电影的方式。专业的转换处理通常依赖于“深度艺术家”,他们手工地为每一帧创造深度图。然后利用标准的基于深度图像的渲染 (DIBR) 算法将原始帧和深度图相结合,得到一个立体的图像对儿。然而,由于这个工作需要大量的人力成本,所以花费依然非常高。
  每一年有 20 左右部新的 3D 电影发行。高昂的制作成本是阻碍 3D 电影行业发展的主要障碍。自动的 2D-3D 转换将会消除这一障碍。
  本文提出了一种全自动的,数据驱动的方法来解决 2D-3D 视频转换的问题。这个问题可以转化为从单张图片中推理出深度信息,然后为另一只眼睛合成一个新的视点。然而从一张图片中推理出深度 (或差异) 是一个高度不确定的问题。除此之外,新视点中的一些像素对应于原图片中不可见的位置,导致数据缺失,必须用填充算法补全,即使补全的部分是算法虚构的。
  尽管存在上述困难,我们认为有了 3D 电影中已经存在的大量立体帧对儿,就有可能训练出从给定视点得到新视点的机器学习模型。最终,我们设计了一个深度神经网络将左眼的视点作为输入,内部估计出一个可能的差异图,然后为右眼渲染出一个新的图像。我们在 ground truth 立体帧对儿上进行端到端的训练,目的是直接从一个视点预测出另一个视点。网络内部生成的差异图只是为生成一个好的右眼视点服务的。我们发现相比于用探索法得到差异图,即训练一个预测差异的模型,再用预测出的差异渲染新图,我们的方法训练起来更容易。我们的模型同样隐形地执行填充而不需要后处理。
  如何评估得到的 3D 场景的质量也是一个有价值的问题。定量评估方面,我们使用 3D 电影的数据集,在像素尺度上比较重建出的右视点和 ground truth 右视点。我们也进行了人类主观实验以展示我们的方案的有效性。我们将我们的方法与 ground truth 和 最好的单视点深度估计技术进行对比。定量和定性的分析都展现出了我们的方法的优势。

2 相关工作

  现有的 2D-3D 转换方法大致可以分为两个阶段。首先从一个输入视点估计出深度图,在用 DIBR 算法结合深度图和输入视点,得到立体对儿的另一个视点。从单张图片中估计深度的早期尝试利用手工设计的特征和线索包括离焦、散射和质地梯度。这些方法只依赖于一种线索。所以它们只在表现出特定线索的场景中表现优秀。然而实际上,人类是通过无缝地结合多种信息来感知深度的。
  最近的研究转移到了基于学习的方法上来。这些方法将单视点 2D 图片和它们的深度图作为监督,试图学习一个从 2D 图片到深度图的映射。基于学习的方法结合了多种线索并且有着更好的泛化能力,例如最近的工作就使用深度卷积神经网络达到了这个问题的 state-of-the-art。然而,采集高质量的图像-深度对儿是非常困难、昂贵并且受限于传感器。所以,现有的深度数据集基本上都由少量的静态室内场景和更少的户外场景组成。数据集数量和多样性的匮乏限制了基于学习的方法的泛化能力。此外,这些方法得到的深度图只是一个中间产物,还需要一个额外的 DIBR 步骤来生成最终效果。
  单眼深度预测是非常有难度的,然而我们认为精确无误地预测深度并不必要。顺应端到端训练的趋势,我们提出了一种利用立体对儿来训练,直接学习从左视点预测出右视点。在我们的方法中,DIBR 是根据一个内部的差异概率分布图来执行的,当算法学习到类似差异图的东西,系统允许它被用于预测新视点。这一灵活处理使得算法能够自然地处理图像修复。不像 2D图片/深度图 对儿,我们的方法有大量的训练数据,因为 2008 年以来每年有大概 10 到 20 部 3D 电影发行,每部电影中都有成千上万帧。
  我们的模型受 Flynn 等人的 DeepStereo 启发,他们提出了概率选择层来进行渲染处理,使得渲染过程可以和 DCNN 一起训练。具体地说,我们使用了相同的概率选择层,但是以两种显著的方式改进了他们的方法。首选,他们的方法需要两个或更多校准的视点来合成一个新视点,所以不能用现成的 3D 电影训练。我们通过重构网络的输入和布局解除了这一限制。第二,他们的方法使用 28 乘 28 的小块,把网络的感受野限制在了局部结构。而我们的方法处理整张图片,有大的感受野,这对利用高层级的提取规律是非常必要的,就像大的人像很可能离相机更近,小的较远。

3 方法

  现有的 2D-3D 转换通常包括两个阶段:从左视点估算一个精确的深度图在用基于深度图像的渲染算法 (DIBR) 渲染出右视点。与之不同,我们提出利用像素尺度的损失直接生成右视点。然而简单地利用这一方法得到的结果很差,因为它没有捕捉到任务的本质。受先前研究的启发,我们利用 DIBR 处理保证了大多数输出像素是输入像素的复制偏移。与此前研究不同的是,我们不强迫系统生成精确的深度图,也不将深度图作为训练的监督。我们提出的模型预测一个概率分布形式的类差异图作为中间输出,然后用可微选择层作为 DIBR 处理的模型,将类差异图与输入视点结合。在训练过程中,模型生成的类差异图不会被与正确的差异图直接比较,它只被用来作两个用途:表示水平差异和执行图像修补。可微选择层使得我们的模型可以被端到端地训练。

3.1 模型结构

  最近的研究表明集成低层级的特征对像素级的预测任务很有帮助,包括语义分割,深度估计和光流估计。注意到我们的人任务与深度估计间的相似性,就很自然地考虑到这个想法。我们的网络,如图 2 所示,在每一个池化层之后又一个分支,在这个分支上我们用“反卷积”层上采样输入的特征图 (也就是一个学习到的上采样过滤器)。每一级上采样得到的特征图相加到一起,得到一个与输入图像尺寸一致的特征表示。我们对这个特征表示再进行一次卷积,然后再在每个空间位置的通道上进行一次 softmax 变换。softmax 层的输出可以理解为一个概率分布形式的差异图。最后,我们将这个差异图和左视点输入到选择层,得到右视点。

Deep3D: Fully Automatic 2D-to-3D Video Conversion with Deep Convolutional Neural Networks_第2张图片
图 2:Deep3D 模型结构。我们的模型结合多层级的信息,并通过端到端训练从左视点生成右视点。主网络预测出一个差异的概率分布输入到选择层。选择层是一个以可微的方式实现基于深度图像渲染 (DIBR) 的模型,使得填充可以在网络内部进行。

反卷积双线性插值
  我们采用反卷积层来上采样低层级特征图。反卷积层是将卷积层的前向和后向计算颠倒过来。尽管从技术上讲仍然是进行卷积,但我们按照惯例称之为反卷积。
  我们发现将反卷积层初始化成双线性插值可以使训练更容易。具体地讲,当上采样系数为 S 时,反卷积层的核为 2S 乘 2S,步长为 S,padding 为 S/2。核权重 w w w 初始化为

(1) C = 2 S − 1 − ( S   m o d   2 ) 2 S C = \frac{2S-1-(S\ mod\ 2)}{2S}\tag{1} C=2S2S1(S mod 2)(1)

(2) w i j = ( 1 − ∣ i S − C ∣ ) ( 1 − ∣ j S − C ∣ ) w_{ij}=(1-|\frac{i}{S-C}|)(1-|\frac{j}{S-C}|)\tag{2} wij=(1SCi)(1SCj)(2)

3.2 利用选择层重构

  选择层模型化了传统 2D-3D 转换中的 DIBR 操作。在传统的 2D-3D 转换中,给定了左视点 I I I 和 深度图 Z Z Z,则差异图 D D D

(3) D = B ( Z − f ) Z D = \frac{B(Z-f)}{Z}\tag{3} D=ZB(Zf)(3)

  其中基线 B B B 是两个摄像机之间的距离, Z Z Z 是输入深度, f f f 是从摄像机到焦点平面的距离,如图 3 所示。右视点由如下公式得到

(4) O i , j + D i j = I i , j . O_{i,j+D_{ij}}=I_{i,j}.\tag{4} Oi,j+Dij=Ii,j.(4)

Deep3D: Fully Automatic 2D-to-3D Video Conversion with Deep Convolutional Neural Networks_第3张图片
图 3:深度到差异的转换。左图中物体远于虚拟屏幕平面,右图中物体近于虚拟屏幕平面。给定两眼间距离 B 和眼睛距焦点平面距离 f,我们可以根据公式 (3) 从深度计算出差异。当物体比焦点平面近时差异值为负,反之为正。

  然而由于损失关于 D D D 是不可微的,所以我们不能将这步操作和深度神经网络一起训练。为解决这一问题,我们的网络在每一个像素点预测一个不同差异值 d d d 上的概率分布 D i , j d D_{i,j}^{d} Di,jd,在所有像素点上 ∑ d D i , j d = 1 \sum_dD_{i,j}^{d}=1 dDi,jd=1。我们定义了一个左视点的偏移 I i , j d = I i , j − d I_{i,j}^{d} = I_{i,j-d} Ii,jd=Ii,jd,这样选择层就可以重建右视点了:

(5) O i , j = ∑ d I i , j d D i , j d O_{i,j}=\sum_{d}I_{i,j}^{d}D_{i,j}^{d}\tag{5} Oi,j=dIi,jdDi,jd(5)

  这样损失就关于 D d i , j D_{d}^{i,j} Ddi,j 可微了,所以我们计算输出和 ground truth 右视点的 L1 损失作为训练目标:

(6) L = ∣ O − Y ∣ L = |O-Y|\tag{6} L=OY(6)

  我们使用 L1 损失是因为最近的研究表明在像素级的预测任务上,L1 损失要优于 L2 损失。

3.3 放大至全分辨率

  现代电影的分辨率一般最低为 1080p,每帧有 1920 乘 1080 个像素。在我们的实验中,我们把输入帧按比例缩小到 432 乘 180,缩短计算时间。所以生成的右视点也只有 432 乘 180 的分辨率,这个分辨率对于电影来说是不可接受的。
  为了解决这一问题,我们首先注意到差异图中的高频内容通常比原始图片中少很多。因此我们可以按比例扩大预测出的差异图,然后将它和原始的高分辨率左视点结合,来生成一个全分辨率的右视点。这种方式渲染的右视点比简单地 4 倍上采样得到的图像质量更好。

4 数据集

  因为 Deep3D 可以直接用立体对儿训练无需 ground truth 深度图作为监督,我们具有可以利用大量现成的立体视频的优势,而不用 KITTI 和 NYU Depth 等传统的场景深度数据集。我们收集了 27 部近年发行的非动画 3D 电影,随机地选出 18 部用来训练,9 部用来测试。我们的数据集包含大概 5 百万帧,而 KITTI 和 NYU Depth 仅提供了几百帧。在训练时,每个输入的左帧都被缩小到 432 乘 180 像素,再随机裁剪出 384 乘 160 像素。目标右帧也做同样的变换。我们不使用水平翻转。

5 实验

  在我们的主实验中,我们每次输入单帧不采用时间信息。这使得我们的算法可以和单帧的基线算法公平地对比,同时可以应用到静态照片上而不只是适用于视频。然而,一个很自然的假设是动作提供了重要的深度线索,因此,我们也进行了额外的实验,使用连续的 RGB 帧和计算出的光流作为输入。在 5.4 节中讨论了相关结果。

5.1 实施细节

  定量评估中我们使用没有上采样的输出,尺度为 384 乘 160 像素。定性和人类主观评估中我们用 3.3 节中的方法按 4 倍上采样输出。我们的网络基于 VGG16,一个在 ImageNet 上训练的庞大的卷积神经网络。我们用 VGG16 的权重初始化主干卷积层 (图 2 中绿色层),用标准差 0.01 的正态分布初始化其他权重。
  为了集成低层级特征的信息,我们在每个池化层后面设计了一个分支,进行批量归一化加上 3 乘 3 的卷积层,再然后是初始化成双线性上采样的反卷积层。反卷积层的输出与最终预测的右视点的尺寸相同。我们使用批量归一化连接预训练的 VGG16 层和随机初始化的层,因为这可以解决 VGG16 大而不统一的激活量级导致的数值不稳定问题。
  在上面的 VGG16 卷积层后有两个随机初始化的有 4096 个中间单元的全连接层 (图 2 中蓝色的部分),全连接层后面还有一个线性层。线性层的输出被 reshape 成 33 个通道,每个通道是 12 乘 5 的特征图,然后输入到反卷积层。我们把所有上采样得到的特征图相加,再做一个卷积得到最终的特征表示,输入到选择层。选择层将这个表示理解为 33 个通道上的概率分布,33 个通道分布代表空或从 -15 到 16 的不同差异值。
  在所有的实验中,我们使用 64 的小批量尺寸训练,一共迭代 100000 次。初始的学习率为 0.002,每 20000 次迭代后减小 10 倍。不使用权重下降。0.5 的 dropout 仅在全连接层后使用。训练在一块英伟达 Titan X GPU 上耗时两天。一旦训练完成,Deep3D 可以以 100fps 的帧率生成右视点。我们的实现是基于 MXNet 的: GitHub 下载链接

5.2 算法比较

我们与三个基准算法做了比较:

  1. 全局差异:根据全局差异 δ 由左视点计算出右视点,即最小化验证集上的平均绝对误差 (MAE)。
  2. Eigen 等人的基于 DNN 的单张图片深度估计算法,再加上 3.2 节中提到的 DIBR 方法。
  3. Ground-truth 立体对儿。我们仅在人类主观评价中使用 ground-truth,因为它在定量评估中的差异恒为零。

  据我们所知,Deep3D 是第一个能用立体对儿直接训练的算法,之前的所有方法都需要依靠 ground-truth 深度图来训练。因此,我们不能使用我们的 3D 电影数据集来训练用以比较的算法,但是可以测试。我们把 Eigen 等人发布的模型在我们的测试集上进行评估。这种评估方式是基于一个延伸假设:在 NYU Depth 数据集上训练的模型可以很好地泛化到 3D 电影上。这也显现出了我们的方法的一个主要优势:通过直接用立体对儿训练,我们有多得多的训练数据。
  因为 Eigen 等的方法预测的是深度而不是差异,我们需要用公式 (3) 将深度转化为差异以便进行 DIBR。然而,Eigen 等也不预测摄像机到聚焦平面的距离 f f f f f f 是一个未知量并且由于摄影时的变焦,在不同帧上可能是不同的。瞳距 B B B 同样是未知的,但是固定不变。 B B B f f f 的值可以用以下两种方式确定:

  1. 最优化验证集上的 MAE,然后在全部测试集上使用固定的 B B B f f f,这种方式对应 Eigen 等人的算法的性能下限。
  2. 固定 B B B,但为每一个测试帧选择使得 MAE 最小的 f f f,也就是选择了焦点距离的最佳 (Oracle) 平面,因此这种方式对应着 Eigen 的算法的上限。

  我们采用这两种方式作为两个不同的基准—— Eigen 和 Eigen + Oracle。公平起见,我们也对 Deep3D 的预测做同样的优化,得到两种方式下的性能—— Deep3D 和 Deep3D + Oracle。

5.3 结果

表 1:Deep3D 评估。我们比较了每个方法在像素级的重建误差,以平均绝对误差 (MAE) 作为衡量标准。

方法 MAE
全局差异 7.75
Eigen 7.75
Deep3D 6.87
Eigen + Oracle 6.31
Deep3D + Oracle 5.47

定量评估 我们按如下公式计算平均绝对误差 (MAE):
(7) M A E = 1 H W ∣ y − g ( x ) ∣ MAE=\frac{1}{HW}|y-g(x)|\tag{7} MAE=HW1yg(x)(7)
其中 x x x 是左视点, y y y 是右视点, g (   ) g(\ ) g( ) 是模型, H H H W W W 分别是图像的高和宽。结果见表 1,可以发现 Deep3D 在有无 Oracle 距离的两种情况下都优于基准。

表 2:人类主观评估。表中的数字表示人们主观上认为相应行中的方法优于对应列中的方法频率。可见 66% 的人相较于 Eigen + Oracle 更喜欢 Deep3D,24% 的人相较于 ground truth 更喜欢 Deep3D。

方法 全局差异 Eigen + Oracle Deep3D Ground Truth
全局差异 N/A 26.94% 25.42% 7.88%
Eigen + Oracle 73.06% N/A 33.92% 10.27%
Deep3D 74.58% 66.08% N/A 24.48%
Ground Truth 92.12% 89.73% 75.52% N/A

Deep3D: Fully Automatic 2D-to-3D Video Conversion with Deep Convolutional Neural Networks_第4张图片
图 4:人类主观研究界面。每个受试者被展示 50 对儿 3D 立体电影图片。每对儿图片是由两个随机选择的方法产生的相同场景。受试者被要求带上红-蓝 3D 眼睛,选择出 3D 效果更好的图片或者“不确定”。研究结果见表 2。

定性分析 为了更好地理解提出的方法,我们在图 5 中展示了定性分析的结果。每一张 Deep3D 预测出的立体图像对应 12 个内部软差异分布,按从近 (-3) 到远 (+8) 排序。可以发现 Deep3D 可以从包括尺寸,轮廓和几何结构等多种线索中推断出深度。
  在图 6 中,我们也比较了 Deep3D 的内部差异图 (第三列) 和 Eigen 等预测的深度图 (第二列)。这张图说明了 Deep3D 在描绘出人的轮廓和搞清楚他们到相机的距离上表现得更好。
Deep3D: Fully Automatic 2D-to-3D Video Conversion with Deep Convolutional Neural Networks_第5张图片
图 5:定性分析。第一列是预测出的立体图像 (最好用 3D 眼睛观看)。每一个立体图像对应着从 -3 到 +8 (从近到远) 共 12 个不同差异值的热图。在第一张图中,离相机更近的男人出现在前三个通道中,远一些的女人出现在第四和第五个通道中,背景则出现在最后四个通道中。在第二张图中,背对相机的人比他的四个敌人离相机更近。在第三张图中,窗户框出现在前三个通道中,而窗外远方的景色逐步出现在后续的通道中。
Deep3D: Fully Automatic 2D-to-3D Video Conversion with Deep Convolutional Neural Networks_第6张图片
图 6:Eigen 等的算法与 Deep3D 的对比。第一列是输入图像,第二列和第三列分别是 Eigen 等人和 Deep3D 的预测。这表明 Deep3D 能更好地描绘出人的轮廓并弄清他们到相机的距离。

人类主观评估 我们也进行了人类主观研究来评估不同算法的预测的视觉效果。实验比较了四个算法:全局差异,Eigen + Oracle,无需 Oracle 的 Deep3D,和 ground-truth。
  我们从测试集中随机选取了 500 帧,展示给受试者一系列对比图,每组对比是两个算法从同一个 2D 帧重建出的 3D 立体图。受试者需要戴上红-蓝 3D 眼镜选出 3D 效果更好的那张图或者选择“不确定”。图 4 展示了这项研究的界面。我们邀请了 60 个受试者,每个受试者做 50 组比较,最终收集了全部 C 4 2 500 C^2_4500 C42500 个判断结果。
  表 2 中体现了 Deep3D 超出全局差异 49 个百分点,超出 Eigen + Oracle 32 个百分点。当与 ground truth 比较时,24.48%的人更喜欢 Deep3D,而 Eigen + Oracle 只有 10.27%,全局差异只有 7.88%。

5.4 算法分析

移除分析 为了更好地理解算法各个模块的贡献,我们在表 3 中展示了移除了部分组件的 Deep3D 的性能。在第一行,我们展示了移除了低层级卷积层的 Deep3D 的表现。这个网络只有前馈路径,包含 5 个卷积层和池化层模块以及 2 个全连接层。我们发现阉割版的性能相比于完全体的方法有了明显下降。

表 3:移除分析。我们通过从模型中移除 Deep3D 的不同组件来更好地理解它们的贡献。可以看到移除低层级特征和选择层都会带来性能的下降。
Deep3D: Fully Automatic 2D-to-3D Video Conversion with Deep Convolutional Neural Networks_第7张图片

  在第二行,我们用块匹配算法生成的差异图进行训练,而不直接用立体对儿。预测出的差异图再通过 DIBR 渲染出右视点。这个方法带来了性能下降,说明了 Deep3D 端到端训练的有效性。
  我们也尝试了直接回归得到新视点,移除内部的差异表示和选择层。实验表明这同样带来了性能下降,说明了将 DIBR 模型化的作用。
时间信息 在我们的大部分实验和评估中,我们只使用了静止的 RGB 图片作为输入。我们这样做是为了更公平的比较和更广泛的应用领域。事实上 Deep3D 可以以两种方式结合时间信息:将多个连续的 RGB 帧作为网络的输入,或者通过光流帧提供时间信息。
  我们简单地探索了这两种方式,发现在像素级衡量标准上,性能有一定的提升。我们相信在这个方向上做更多的工作能够带来更大的性能提升,例如模型结构调整,超参数调整和对时间的建模,只不过仅能应用于视频。

6 结论

  在本文中我们提出了基于深度卷积神经网络的全自动的 2D-3D 转换算法。我们的方法在立体图片对儿上进行端到端的训练,因此能够利用比传统 2D 转 3D 学习方法多几个量级的数据。定量分析方面,我们的方法优于基准算法。在人类主观研究上,受试者也更喜欢我们的方法生成的立体图。当与 ground truth 对比时,我们的算法比基准算法更有可能迷惑受试者。
  我们在实验和评估中仅仅使用了静态图片作为输入,而忽略了视频中的时间相干性。这样做的好处是训练得到的模型既可以应用于视频又可以应用于图片。然而,在做视频转换时,利用时间信息很可能可以提高性能。我们简要地实践了这一想法,但是发现在定性的性能提升上收益甚微。我们推测这可能是因为有效地结合时间信息没有这么简单。我们相信这是未来的一个有趣的研究方向。

你可能感兴趣的:(论文阅读)