Neural Rays for Occlusion-aware Image-based Rendering
主页:https://liuyuan-pal.github.io/NeuRay/
论文:https://arxiv.org/abs/2107.13421
Code:https://github.com/liuyuan-pal/NeuRay
效果:
desktop
摘要
We present a new neural representation, called Neural Ray (NeuRay), for the novel view synthesis task. Recent works construct radiance fields from image features of input views to render novel view images, which enables the generalization to new scenes. However, due to occlusions, a 3D point may be invisible to some input views. On such a 3D point, these generalization methods will include inconsistent image features from invisible views, which interfere with the radiance field construction. To solve this problem, we predict the visibility of 3D points to input views within our NeuRay representation. This visibility enables the radiance field construction to focus on visible image features, which significantly improves its rendering quality. Meanwhile, a novel consistency loss is proposed to refine the visibility in NeuRay when finetuning on a specific scene. Experiments demonstrate that our approach achieves stateof-the-art performance on the novel view synthesis task when generalizing to unseen scenes and outperforms perscene optimization methods after finetuning.
译文:
提出了一种新的神经元表示方法,称为神经射线(NeuRay),用于新的视图合成任务。近年来的研究工作利用输入视图的图像特征构造辐射场来绘制新的视图图像,从而实现对新场景的泛化。然而,由于遮挡,3D点对于某些输入视图可能不可见。在这样的3D点上,这些泛化方法将包括来自不可见视图的不一致图像特征,这干扰辐射场构造。为了解决这个问题,我们预测了NeuRay表示中3D点对输入视图的可见性。这种可见性使得辐射场构造能够集中在可见图像特征上,这显著提高了其渲染质量。同时,提出了一种新的一致性损失算法,用于在NeuRay中对特定场景进行微调时改善可见性。实验结果表明,该方法在泛化到不可见场景时具有最佳的合成性能,在微调后的合成性能优于基于场景的优化方法。
文章工作
问题:
- 不能推广到看不见的场景,因为它们学习场景特定的网络,这通常需要几个小时或几天的时间来学习单个场景。(场景限制,耗时)
- NVS的目标是从任意虚拟相机姿态合成场景的图像。
- 神经辐射场(NeRF)[33]表明,可以通过在神经网络中编码的5D辐射场上进行体绘制来合成新视图的照片级真实感图像,该神经网络将位置和方向映射到密度和颜色。
图1.(a)没有遮挡,局部图像特征在表面点上是一致的。(b)由于遮挡,局部图像特征在表面点上不一致。(c)局部图像特征在非表面点上不一致。由于特征一致性,泛化方法将正确地向(a)中的表面点分配大密度。然而,当特征在(b)和(c)中不是非常一致时,这些方法相对难以正确地确定密度。
工作
该文章提出了一种新的神经元表示方法–神经射线(NeuRay)。NeuRay由每个输入视图上的像素对齐特征向量组成。在从输入视图上的像素发射的摄像机射线上,该像素上的相关NeuRay特征向量能够预测可见性,以确定特定深度处的3D点是否可见。有了这样的可见性,我们可以很容易地区分图1中遮挡引起的特征不一致性和非表面引起的特征不一致性,这导致更准确的辐射场构造,从而在具有严重自遮挡的困难场景上获得更好的渲染质量。
- 有助于在不可见场景上构建辐射场,而且能够通过在特定场景上微调来完善自身,并具有新颖的一致性损失。
- 提出了一个损失,以加强来自NeuRay表示和来自构建的辐射场的表面位置之间的一致性。这种损失使NeuRay能够记住辐射场预测的场景几何结构。同时,NeuRay中存储的场景几何结构反过来将通过提供更好的遮挡推断来改善辐射场构建。
- 我们的方法也属于基于图像的绘制的范畴,并且也使用来自MVS方法的成本体积或估计深度。然而,我们的方法可以在没有外部MVS算法帮助的情况下从头训练,并且还可以在场景上进行微调以弥补MVS的重建误差。
挑战
- 如何估计不可见场景中的可见性。这是先有鸡还是先有蛋的问题,因为可见度的估计需要知道表面位置,而估计的可见度旨在用于辐射场构造中的更好的表面估计。为了打破这种循环,我们建议应用精心设计的多视图立体(MVS)算法,如成本体积构建[62]或面片匹配[49],以重建场景几何结构,然后从重建的几何结构中提取NeuRay的像素对齐特征向量。最后,将NeuRay用于可见度的计算,以改善辐射场的构建。
- 另一个问题是如何在NeuRay中参数化这种可见性。一种直接的方法是预测从视图到3D点沿着摄像机光线的密度,然后累积这些密度以计算透射率作为可见度,如NeRF [33]。然而,使用该策略计算可见性在计算上是不切实际的,因为给定N个输入视图和一个3D点,我们应该沿着从每个输入视图到该3D点的所有N条相机射线累积密度,这意味着我们需要在每条相机射线上采样K个点,并评估所有N × K个采样点上的密度。为了降低计算复杂度,我们使用NeuRay中的累积分布函数(CDF)直接参数化可见性,这避免了沿着射线的密度累积,并且仅需要N个网络前向传递来计算所有N个输入视图的可见性。
Method
Volume rendering
图2.从输入视图动态构建辐射场,通过体绘制合成测试视图图像。首先在测试射线上采样点,然后聚合输入视图的局部特征确定采样点的alpha值和颜色,最后通过体绘制累积颜色计算输出颜色。我们的方法在输入视图上构建NeuRay来预测样本点的可见性,从而允许在这些样本点上进行遮挡感知特征聚合
Occlusion-aware radiance field construction
-
辐射场动态构建
- 与学习特定场景神经辐射场的NeRF [33]相反,泛化渲染方法[5,57,58,65]通过聚集局部特征来动态地构造辐射场。如图2所示,给定一个3D点
p
i
∈
R
3
p_i \in R^3
pi∈R3,这些方法首先通过CNN提取输入视图上的特征,然后通过下式聚合该点上输入视图的特征:
f i = M ( { f i , j ∣ j = 1 , … , N } ) \boldsymbol{f}_{i}=\mathcal{M}\left(\left\{\boldsymbol{f}_{i, j} \mid j=1, \ldots, N\right\}\right) fi=M({fi,j∣j=1,…,N}) - 其中 f i , j f_{i,j} fi,j是投影在第 j j j个输入视图上的采样点 p i p_i pi的局部图像特征, M \mathcal{M} M是聚集来自不同视图的特征以产生特征 f i f_i fi的网络。然后,该点 p i p_i pi的 σ 值 σ i \sigma值\sigma_i σ值σi和颜色 c i c_i ci将由其他网络从聚合特征 f i f_i fi解码。
- 与学习特定场景神经辐射场的NeRF [33]相反,泛化渲染方法[5,57,58,65]通过聚集局部特征来动态地构造辐射场。如图2所示,给定一个3D点
p
i
∈
R
3
p_i \in R^3
pi∈R3,这些方法首先通过CNN提取输入视图上的特征,然后通过下式聚合该点上输入视图的特征:
-
遮挡感知构造
- 该方法与已有方法一样,也可以动态地建立辐射场。另外,我们预测可见性项
v
i
,
j
v_{i,j}
vi,j,其示出第j个输入视图对于该3D点
p
i
p_i
pi是否可见,以用于遮挡感知特征聚合
f i = M ( { f i , j , v i , j ∣ j = 1 , … , N } ) \boldsymbol{f}_{i}=\mathcal{M}\left(\left\{\boldsymbol{f}_{i, j},\boldsymbol{v}_{i,j} \mid j=1, \ldots, N\right\}\right) fi=M({fi,j,vi,j∣j=1,…,N}) - 在这种情况下,聚合网络 M \mathcal{M} M能够关注聚合特征 f i f_i fi中的可见视图,并且减少来自不可见视图的干扰。
- 该方法与已有方法一样,也可以动态地建立辐射场。另外,我们预测可见性项
v
i
,
j
v_{i,j}
vi,j,其示出第j个输入视图对于该3D点
p
i
p_i
pi是否可见,以用于遮挡感知特征聚合
NeuRay representation
给定从输入视图发射的摄像机光线(称为输入光线),NeuRay能够预测可见度函数v(z),该函数指示深度z处的点对于该输入光线是否可见,如图3所示。在每个输入视图上,NeuRay由可见性特征映射 G ∈ R H × W × C G \in R^{H×W×C} G∈RH×W×C表示。设 G ∈ R C G \in R^{C} G∈RC为给定输入光线在G上对应的特征向量,我们将计算该输入光线从g的可见度 v ( z ) v(z) v(z)。显然,一个有效的可见性函数 v ( z ) v(z) v(z)应该在z上是非增的,并且 0 ≤ v ( z ) ≤ 1 0 ≤ v(z)≤ 1 0≤v(z)≤1。在下文中,我们讨论如何从g参数化可见性函数 v ( z ) v(z) v(z)。
- 遮挡概率的可见性:
- 我们用累积密度函数(CDF)t(z)表示可见性函数, v ( z ) = 1 − t ( z ) v(z)= 1− t(z) v(z)=1−t(z),如图3所示,它被参数化为logistics distributions的混合.
- 其中,我们混合 N l N_l Nl个logsitics分布, μ i \mu_ i μi是第i个logsitics分布的均值, σ i \sigma_i σi是标准差, w i wi wi是混合权重,其中 ∑ i w i = 1 , S ( ⋅ ) \sum_ i wi = 1,S(·) ∑iwi=1,S(⋅)是S形函数。所有参数 ∣ μ i , σ i , w i ∣ = F ( g ) |\mu_i,\sigma_i,w_i| = F(g) ∣μi,σi,wi∣=F(g)由MLP F从特征g解码。作为CDF,t(z)是非递减的,因此1 − t(z)形成有效的可见性函数。
- t(z)实际上对应于输入射线在深度z之前被遮挡的遮挡概率,并且我们将对应的概率密度函数(PDF)称为命中概率密度。可见度v(z)实际上是z之后PDF曲线下的面积。一般来说,一条射线只会击中一个表面,因此一次logistics分布就足够了。但是,当光线照射到半透明曲面或曲面边时,使用混合logistics 分布可以提高性能。
或者,我们可以用NeRF类密度来参数化可见性。然而,用这种策略计算可见性在计算上过于密集。在该公式中,我们直接解码密度d(z)=(z;g)使用MLP从g出发。为了计算可见度v(z),我们需要先对深度{zk}进行采样,其中zk〈z,计算它们的密度d(zk)和相应的α值αk
= 1 − exp(−ReLU(dk)),最后得到可见度 v ( z ) = ∏ k = 1 K r ( 1 − α k ) v(z)= \prod_{k=1}^{Kr} (1 − αk) v(z)=∏k=1Kr(1−αk)。虽然这个公式是一个有效的可见性函数,但它在计算上是不切实际的,因为它需要Kr次对的求值来计算输入视图对一个点的可见性。
图三,NeuRay中的可见性计算。NeuRay由每个输入视图上的可见性特征图G组成。G上的每个特征向量g都可以通过MLP解码为一个混合的logistics distributions。该分布示出了从位置g发射的输入光线的可见度函数v(z),位置g是深度z之后的曲线下的面积。
Generalize with NeuRay
- Pipeline:
- NeuRay在不可见场景中渲染的整个流程如图4所示。在所有输入视图上,通过MVS算法[49,62]估计成本体积或深度图,其由CNN处理以产生可见性特征图G。然后,对于测试射线上的3D样本点,我们计算输入视图对这些点的可见性 v i , j v_{i,j} vi,j(第3.3)并且聚集局部特征 f i , j f_{i,j} fi,j以及 v i , j v_{i,j} vi,j以计算这些点上的 α \alpha α和c。最后,通过体绘制沿测试射线累积 α \alpha α值和颜色,以合成测试图像。
图4.使用NeuRay渲染的管道。1.在输入视图上,估计成本体积或深度图,其用于由CNN预测可见性特征图。2.可见性特征图用于计算输入视图对3D点的可见性。3.对于3D点,我们聚合输入视图中的局部特征以及可见性,以计算这些点上的alpha值和颜色。4.体积渲染用于累积阿尔法值和颜色以合成图像。
- Loss:
- 整个渲染框架可以在训练场景上进行预训练,然后直接应用于不可见场景进行渲染。为了对渲染框架进行预训练,我们随机选择训练场景中的一个视图作为测试视图,并使用其他视图作为输入视图来渲染所选的测试视图,但会有渲染损失:
ℓ render = ∑ ∥ c − c g t ∥ 2 \ell_{\text {render }}=\sum\left\|\boldsymbol{c}-\boldsymbol{c}_{g t}\right\|^{2} ℓrender =∑∥c−cgt∥2
- 整个渲染框架可以在训练场景上进行预训练,然后直接应用于不可见场景进行渲染。为了对渲染框架进行预训练,我们随机选择训练场景中的一个视图作为测试视图,并使用其他视图作为输入视图来渲染所选的测试视图,但会有渲染损失:
Finetune with NeuRay
-
NeuRay的可训练参数:
- 图5示出了图4中CNN的详细结构。在每个输入视图上,构造的成本体积(或估计的深度图)和可见性特征图G之间的中间特征图 G ′ ∈ R H × W × C G′ ∈ R^{H×W×C} G′∈RH×W×C被视为该输入视图的NeuRay的可训练参数。我们称G′之前的卷积层为初始化网络,称G′和G之间的卷积层为可见性编码器。参数G′不是从零开始训练的,而是由初始化网络使用构造的成本体或估计的深度图来初始化的。然后,丢弃初始化的网络,同时在微调中优化G′沿着其他网络参数。
图5.在对场景进行微调时,将中间特征映射G ′作为NeuRay的可训练参数,由初始化网络初始化。然后,在微调中丢弃初始化网络。
- 一致性损失:
- 除了渲染损失,我们还在微调中使用一致性损失。由于构建的辐射场和NeuRay的可见性都描述了场景几何结构,因此我们可以在微调中加强它们之间的一致性。具体地,在微调中,我们在伪测试射线上采样点
p
i
≡
p
(
z
i
)
p_i ≡ p(z_i)
pi≡p(zi),并从构造的辐射场计算采样点上的命中概率
h
i
h_i
hi。同时,伪测试视图也是输入视图,在该输入视图上存在NeuRay表示以解码该伪测试射线的分布t(z)。基于t(z),我们通过下式计算每个采样点
p
i
p_i
pi上的新命中概率
h
i
h_i
hi:
h ~ i = t ( z i + 1 ) − t ( z i ) \tilde{h}_{i}=t\left(z_{i+1}\right)-t\left(z_{i}\right) h~i=t(zi+1)−t(zi) - 其中
z
i
z_i
zi是点的深度。因此,我们可以通过加强
h
~
i
\tilde h_i
h~i和
h
i
h_i
hi之间的一致性来构造损失:
ℓ consist = 1 K t ∑ i = 1 K t C E ( h ~ i , h i ) \ell_{\text {consist }}=\frac{1}{K_{t}} \sum_{i=1}^{K_{t}} C E\left(\tilde{h}_{i}, h_{i}\right) ℓconsist =Kt1i=1∑KtCE(h~i,hi) - 式中CE为交叉熵损失;
- 除了渲染损失,我们还在微调中使用一致性损失。由于构建的辐射场和NeuRay的可见性都描述了场景几何结构,因此我们可以在微调中加强它们之间的一致性。具体地,在微调中,我们在伪测试射线上采样点
p
i
≡
p
(
z
i
)
p_i ≡ p(z_i)
pi≡p(zi),并从构造的辐射场计算采样点上的命中概率
h
i
h_i
hi。同时,伪测试视图也是输入视图,在该输入视图上存在NeuRay表示以解码该伪测试射线的分布t(z)。基于t(z),我们通过下式计算每个采样点
p
i
p_i
pi上的新命中概率
h
i
h_i
hi:
结果对比
图6.不同方法的定性结果
图7.我们的方法比NeRF更清晰地呈现细节。
图8.比较混合物流分布Nl = 2和单一物流分布Nl = 1的阻塞概率。混合逻辑分布改善了深度突然变化的边缘上的结果(红色矩形)。
NeRF合成数据集上的PSNR和训练步骤/时间。