Skip to main content

[概述] X-Fields:隐式神经视图、光线和时间的图像插值

本报告简要回顾了这篇令人兴奋的论文,它提出了一种新颖的方法来使用X-Field无缝插值2D图像的时间、光线和视图。
Created on February 5|Last edited on July 12


Interpolation

time_rendered.gif

Time 3

IMG_1893.JPG

Time 1

IMG_1891.JPG

Time 0

IMG_1889.JPG

Run set
0


本报告简要地回顾了这一令人兴奋的论文,它提出了一种新颖的方法来对2D图像的时间、光线和视图进行无缝插值,即使用稀疏数据X-field。这个X-field是通过学习一个神经网络来表征,将时间、光线或视图坐标映射到2D图像上。

论文 | GitHub | Colab笔记本

导言

新的传感器从不同的点(视频)、角度(光场)或在变化的照明(反射场)下捕获场景的图像。人们可以利用这种多样化的信息来改善VR(虚拟现实)的体验。利用此信息,可以插入新视图、光线等,实现从一个场景到另一个场景的无缝过渡。

但是,无缝插值需要密集采样,从而导致过多的存储、捕获和处理需求。稀疏采样是一种替代方法,但很明显,这需要在时间、光线和视野范围内进行精确插值。

X-field是跨不同视图、时间或照明条件(即视频、光场、反射场或其组合)拍摄的一组2D图像。作者提出了一种基于神经网络的架构,可以表示这种高维X-fields。

根据上面的图1,可以理解本文的关键所在:利用在不同条件和坐标下观察到的稀疏图像(在这种情况下为时间),来训练神经网络(映射),可以在提供空间、时间或光线坐标作为输入的情况下,生成观察到的样本图像作为输出。对于未观察到的坐标,将对输出进行如实插值(如GIF所示)。

请观看作者提供的YouTube官方视频

video_link



方法概述

该方法的灵感来自两个主要的观察:

深度表示有助于插值:使用神经网络表示信息可带来更好的插值。

只要每个单元都是可区分的,这个说法就成立:只要所有单元都是可区分的,以上观察对于任何架构都适用

X-field表示为非线性函数:

Loutθ(x)∈χ→R3×npL_{out}^θ (x) \in \chi \to \mathbb{R}^{3 \times n_p}

其中可训练的参数θ用来将nd维X-field坐标[formula]映射到具有np个像素的2D RGB图像。 X-field(χ)的维度取决于捕获模式,例如,视频插值是1D。

我们可将X-field视为高维连续空间。我们有有限的、非常稀疏输入图像。这种稀疏观察到的X-Field坐标可以表示为Y⊂χ,在已知坐标y处捕获了图像Lin(y)。 ∣Y∣很稀疏,即很小,例如3×3、2×3等。

例如,给定一个3×5的光场图像序列,输入是2D坐标(s,t),其中s∈0,1,2,t∈0,1,2,3,4。在测试期间,我们可以为s给出0到2之间的任意连续值,为t给出0到4之间的任意连续值。学习的神经网络架构将如实地在给定范围内进行插值。

下面显示的图像是稀疏输入(Y),属于X-field(χ)。在这种情况下,捕获方式适用于光线(照明)插值。请观察图中白色天使的影子。




Run set
7


总之,这里训练了一个Lout架构,以将向量y映射到捕获的图像Lin(y),同时也希望得到对于未观察到的向量x的合理图像Lout(x)。这与上面提到的第一个主要观察一致。

在测试期间,插值是预期的,但受Y限制。因此,训练永远不会评估不在Y中的任何X-field坐标x,因为我们不知道该坐标处的图像$ L_ {in}(x)是什么。



架构设计

架构设计是本文的新颖之处。 Lout使用三个主要思想进行建模。

外观是观察图像中外观的组合(Lin(y))。 · 外观被认为是阴影(Shading )和反照率(albedo)的乘积。 · x处未观察到的阴影和反照率被视为y处观察到的阴影和反照率的变形形式。

这些假设并不一定成立,但在那种情况下,神经网络在捕获坐标和图像之间的关系上将面临更多挑战。

该架构通过四个步骤实现:

分离阴影和反照率:阴影是指在3D模型(3D计算机图形学领域)或插图(2D计算机图形学范围)中,通过改变暗度来进行深度感知的描述。反照率是入射光从表面反射出去的比例。换句话说,它是物体的整体亮度。 · 插值图像是变形图像的加权组合。 · 使用神经网络表示“flow(流)”。 · 解决不连续问题。

我们将逐一介绍它们。

image.png

分离阴影和反照率(光线消除)

光线消除(De-lighting)将外观分割为阴影的组合,以单一方向移动来响应X-Field的坐标变化。

每个观察到的图像都分解为:

Lin(y)=E(y)⊙A(y)L_{in}(y) = E(y) \odot A(y)

E是阴影图像,A是反照率图像,⊙是点积。

在测试期间,分别对阴影和反照率进行插值,并通过相乘在未观察到的位置x处重新组合为新的辐射度。输出的数学公式为:

Lout(x)=int(A(Lin(y)),y→x)⊙int(E(Lin(y)),y→x)L_{out}(x) = int(A(L_{in}(y)), y \to x) \odot int(E(L_{in}(y)), y \to x)

int是一个运算符,将在稍后进行描述。




Run set
7


插值和变形

变形将观察到的图像变形为未观察到的图像,该图像以观察到的和未观察到的X-Field坐标为条件:

warp(I,y→x)∈I×χ×Y→Iwarp(I, y \to x) \in I \times \chi \times Y \to I

根据给定的“flow”映射,具有双线性滤波的空间转换器(STN)从一幅图像读取像素来计算另一幅图像中的像素。

插值会变形所有观察到的图像并合并各个结果。对阴影(E)和反照率(A)的变形和合并是完全相同的。此操作用I表示(也用于上面),并由以下给出:

int(I,y→x)=∑y∈Y(cons(y→x)⊙warp(I(y),y→x))int(I, y \to x) = \sum_{y \in Y} (cons(y \to x) \odot warp(I(y), y \to x))

这里的关键问题是,当用y处的图像重建x处的图像时,“ p”处的像素应从哪个位置“ q”读取?

答案的前半部分是使用从X-Field坐标到像素位置的映射的Jacobians(雅可比行列式)。例如, Jacobian可以捕捉随着时间改变,像素在特定视图和光线中的移动方式。在数学上,对于给定像素“ p”,它是一个偏导数,表示为:

flowδ(x)[p]=δp(x)δx∈X→R2×ndflow_{\delta}(x)[p] = \frac{\delta p(x)}{\delta x} \in X \to \mathbb{R}^{2 \times n_d}

[p]在这里索引到离散像素阵列。上面的公式指定了像素如何在X-Field坐标无穷小变化的情况下移动。Jacobian矩阵包含两个像素坐标相对于所有nd维X-Field坐标的所有偏导数。但是,这不是有限值“ q”。为了找到“ q”,这里使用有限差分将X-Field坐标y→x的变化投影到2D像素运动:

flowΔ(y→x)[p]=p+Δ(y→x)flowδ(x)[p]=qflow_{\Delta}(y \to x)[p] = p + \Delta (y \to x)flow_{\delta}(x)[p] = q

该公式为X-Field坐标的有限变化提供了有限的像素运动。

流(Flow)

Flow计算的输入是X-Field坐标x,输出是Jacobian行列式。这是通过使用卷积神经网络(CNN)实现的。该模型始于一个完全连接的层,该层输入坐标x,然后将其重塑为具有128个通道的2D图像。在此阶段添加了Cord-Conv层。随后进行多次上采样,以达到输出分辨率,同时将通道数减少到nd个输出通道。




Run set
6


一致性

为了合并所有经过变形的观察到的图像到未观察到的X-Field坐标,每个图像像素通过flow一致性进行加权。为了使像素“ q”对应到“ p”处的图像,“ q”处的flow必须映射回“ p”。一个像素“ p”(当从y坐标变形到x坐标时)的一致性是加权函数的单位分解:

cons(y→x)[p]=w(y→x)[p](∑y′∈Yw(y′→x)[p])−1cons(y \to x)[p] = w(y \to x)[p](\sum_{y' \in Y} w(y' \to x)[p])^{-1}

权重𝑤是像素位置“ p”变化的1-norm和“ p”变形到位置“ q”处的反向flow的平稳递减函数:

w(y→x)[p]=exp(−σ∣p−flowΔ(x→y)[q])∣1)w(y \to x)[p] = exp(-σ|p - flow_{\Delta}(x \to y)[q])|_1)

在此,σ= 10是带宽参数。



训练

请查看Colab笔记本以重现结果→

GitHub官方储存库可以在这里找到。我用同样的方法工具化了Weights and Biases,你可以在这里找到该储存库。

在链接的Colab笔记本中,你可以使用里面的数据集。选择所需的数据集,然后选择适当的Python命令来训练该场景的模型。可能需要一些时间,但具体取决于数据集。

不同模型的平均L1损耗如在下面的媒体面板所示。




Run set
7


结果




Run set
7

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