Skip to main content

文总结:One Shot 3D Photography

使用单个2D图像,本报告探索了一种新颖的3D摄影方法。
Created on January 11|Last edited on January 27
本报告是作者Ayush Thakur所写的"Paper Summary: One Shot 3D Photography"的翻译

在本报告中,我们将研究Johannes Kopf等人的One Shot 3D Photography论文的关键内容。 使用链接的colab笔记本,我们将生成令人惊叹的3D照片并查看所形成的即时结果。

在colab中再现结果→\rightarrow

请注意,该论文的官方GitHub存储库仅涵盖论文提及的四种方法之一。 作者建议使用3D Image Inpainting的代码库来生成3D图像,其结果由第一个组件生成。





chrstmas.gif

child.gif

Run set
7


导言

3D摄影是一种将2D图像捕捉到的瞬间更真实地呈现的新方法。作者将3D照片称为因移动视点而引起视差的照片。这样的视点可以在“平坦的”移动端或桌面屏幕上生成。诸如Facebook、Instagram等图片分享(查看)应用程序可以具有3D照片作为附加功能。因此,论文的作者提出了一种针对移动设备进行优化的新颖的3D摄影方法。

话虽如此,创建和显示3D照片带来了以下挑战:

  • 除颜色外,还需要深度信息。
  • 视点的变化显示了图像先前被遮挡的部分,这需要被填充。
  • 视点的改变要简单并计算成本低。

本文中提出的系统为解决上述挑战提供了一种实用的3D摄影方法。此方法的一些隐秘功能包括:

  • 便捷: 该方法只需要单个图像就能将其转换为3D图像。因此,它被命名为“One Shot”。

  • 普适: 在任何移动设备上都可以使用此方法,即使在使用单镜头相机的设备上也可以。

  • 速度: 模型使用量化感知训练(quantized aware training)针对移动设备进行了优化。移动设备上的所有处理步骤只需要花费几秒钟的时间和少量的资源。

  • 交互: 与3D照片的交互是实时的,并且生成的3d图像易于共享。

论文 | |项目网站

这是作者的简短视频,展示了他们惊人的结果。

video_link



方法概述

image.png

图1:提出的4阶段3D图像摄影方法

所提出的方法需要单个图像来生成3D图像。可以使用移动设备捕获输入图像,但不限于此(任何图像都可以使用)。该方法涉及四个处理阶段,可以在任何移动捕获设备上端对端运行。 iPhone 11 pro的处理时间如图1所示。

深度估算

第一步是从输入图像估计稠密深度图(dense depth map)。常规方法可实现高质量的结果,但占用的内存量大,不适用于移动设备。作者提出了一种称为Tiefenrausch的新架构,该架构经过优化后可以在延迟、峰值内存消耗、模型大小等方面消耗更少的资源,同时在表现上仍能保持竞争优势。

image.png

图2:深度估算网络示意图****

实现上述优化的深度估计模型是具有down-/up-sampling blocks和skip connection的著名的U-Net模型。但是,上述改进是通过结合三种技术实现的 -

  • 高效的块结构: 该块专为up-/down-sampling设计,经过优化,可在移动设备上快速处理。该块包含一个逐点(1x1)卷积、KxK深度卷积(其中K是kernel大小),以及另一个(1x1)卷积。此块如图3所示。

    image.png

    -> . 图3:高效的块结构。 ee是扩大渠道的乘数因子。 sus_usds_d分别表示向上和向下采样比例因子(sampling scale factors)。<-

  • 神经网络架构搜索: 作者在给定模型搜索空间的情况下,使用Chameleon方法寻找最佳设计。该方法迭代搜索空间中的样本点以训练精度预测器。该精度预测器用于加速遗传搜索(genetic search),以找到一个在满足指定资源限制的同时最大化预测准确性的模型。最终的网络模型在精度、延迟和模型大小之间实现了更有利的平衡。总搜索时间约为三天,使用了800个Tesla V100 GPU。.

  • 8位量化(8-bit quantization):神经网络体系结构搜索的结果是一个优化的模型,具有减少的FLOP计数和较少的参数,使用量化意识训练(QAT)可以进一步减少/优化参数。生成的低精度(8-bit integer)模型可将模型大小减小4倍,并在性能稍有降低的情况下减少延迟。请在Sayak Paul撰写的A Tale of Model Quantization 中了解有关QAT的更多信息。

下面的面板显示了深度估计网络的结果。




Run set
7


Tiefenrausch 的表现

image.png

-> 图4:对深度估算模型Tiefenrausch的定量评估,采用了几种最先进的基准(baseline)方法。<-

作者使用几种SOTA基准方法评估了其深度模型的四个版本:

  • Baseline: 这是手工制作的模型架构,如图2所示。
  • AS + no-quant: 这是神经体系结构搜索的结果,是优化的体系结构。
  • AS + quant: 这是论文建议的模型。在图4中,我们可以看到该模型具有最低的FLOPS,最小的延迟以及良好的峰值内存需求,而内存总大小也仅为3.3 MiB
  • AS + quant, MD + 3DP: 论文建议的模型+专有的数据集进行了训练,该数据集包含200万双摄像机图像。该模型用于实际环境,具有更好质量。


分层深度图像(Layered Depth Image)

3D摄影需要场景的几何表示。作者已使用分层深度图像(LDI)表示。它由具有整数坐标的规则矩形格子组成,就像普通图像一样;但每个位置可以容纳零个,一个或多个像素。该表示形式是较好的,因为它的稀疏程度(仅包含深度和颜色值),拓扑结构(局部类似于图像),详细程度较高,并且可以轻松转换为带纹理的网格。

在获得深度图之后,将输入图像提升到上述LDI表示形式。但是在这样做之前,稠密深度图要经过预处理步骤。由于在训练过程中进行了正则化处理(regularization),原始深度图过于平滑。这种过度光滑的现象会“冲走”深度不连续性(depth discontinuity)。预处理步骤清理深度不连续,并使其变得清晰。如图5所示,原始深度图像首先使用kernel大小为5x5的weighted median filter进行滤波,然后通过connected component analysis进行清洗。

one-shot.png

图5:稠密深度图的预处理步骤

在深度图的预处理之后,场景的被遮挡部分中的新几何将被“半透明”。首先,将深度图像提升到LDI以表示场景的多层。最初,此LDI到处都是单层的,并且所有像素都完全连接到其相邻像素,除了跨度差大于阈值的不连续性。



LDI修补

此时,我们的LDI在深度不连续周围有多层,但在视差(被遮挡)区域中仍然缺少颜色值。这将用可能的颜色进行修补,以便3D照片的观看显得无缝逼真。

天真的修复方法是将它们修复在屏幕空间中,但是在运行时填充每个视图很慢。更好的方法是在LDI结构上修复。因此,修复只需要执行一次。但是,由于不规则的连接结构,使用神经网络处理LDI并不容易。该问题的解决方案利用了以下思考:LDI在局部结构就像常规图像一样。因此,基于卷积神经网络的体系结构可以完全在2D中进行训练,然后使用预先训练的权重进行LDI修复,而无需对LDI进行任何训练。

LDI修复的模型架构

image.png

图6:LDI修复Farbrausch 模型结构

作者提出了一种名为Farbrausch的新体系结构,该体系结构可以在LDI上对视差区域进行高质量的修补,并针对移动设备进行了优化。作者从传统2D局部卷积(2D Partial Convolutional) U-Net网络开始,经过5个阶段的downsampling。然后,通过将每个PConv层替换为LDIPConv层,将该网络转换为LDI表示形式。该层接受LDI和掩码。请查看Introduction to image inpainting with deep learning以了解有关部分卷积的更多信息。

本案例还使用了Chameleon方法进行神经体系结构搜索来确定最佳的超参数集,该超参数集对编码器每一级的输出通道数量进行编码。FLOP计数与其验证集上的Partial Conv修复损失进行了权衡。

转换为网格表示

我们从单个图像开始,估计深度,用它来获得LDI表示,并训练了一个模型来修补由于视点变化引入的视差而造成的遮挡部分。将此多层修复的LDI转换为最终表示的纹理网格。这分为两个部分:

  • 纹理图集生成
  • 网格划分


结果




Run set
7

Iterate on AI agents and models faster. Try Weights & Biases today.