Point-NeRF

Title Point-NeRF: Point-based Neural Radiance Fields
Author Qiangeng Xu, Zexiang Xu, Julien Philip, Sai Bi, Zhixin ShuKalyan Sunkavalli , Ulrich Neumann
Conf/Jour CVPR 2022 Oral
Year 2022
Project Point-NeRF: Point-based Neural Radiance Fields (xharlie.github.io)
Paper Point-NeRF: Point-based Neural Radiance Fields (readpaper.com)

image.png

  • 生成初始点云(本文),此外还有Colmap和Metashape等方法生成
    • 基于MVS Net的$G_{p,γ}$,生成每个点的位置和置信度(点是否在表面上)
    • 基于2D CNN的$G_f$,生成每个点的特征
  • 点云处理:排除降低渲染质量的孔和异常值 每10K次迭代
    • Point pruning 对置信度低于0.1的点进行删除
    • Point growing 当ray marching中密度最大点(表面附近的点)周围的点比较少时,添加点来填补空白
  • MLP获取点x的信息
    • MLP F:x点周围点的新特征$f_{i,x}=F(f_{i},x-p_{i}).$
    • MLP R:x点的辐射值(or颜色) $r=R(f_{x},d).$
      • x点的聚合特征$f_{x}=\sum_{i}\gamma_{i}\frac{w_{i}}{\sum w_{i}}f_{i,x},\mathrm{~where~}w_{i}=\frac{1}{|p_{i}-x|}.$
    • MLP T:x点周围点的密度 $\sigma_i=T(f_{i,x})$
      • x点的聚合密度$\sigma=\sum_{i}\sigma_{i}\gamma_{i}\frac{w_{i}}{\sum w_{i}},w_{i}=\frac{1}{|p_{i}-x|}.$

Conclusion

在本文中,我们提出了一种高质量神经场景重建和渲染的新方法。我们提出了一种新的神经场景表示Point-NeRF,用神经点云模拟体积辐射场。我们通过直接网络推理直接从输入图像重建了一个良好的Point-NeRF初始化,并表明我们可以有效地对场景的初始化进行微调。这使得高效的Point-NeRF重建只需要20 - 40分钟的每个场景优化,导致渲染质量可以媲美甚至超过需要更长的训练时间(20+小时)的NeRF。我们还为我们的每场景优化提出了新的有效的生长和修剪技术,显著改善了我们的结果,并使我们的方法在不同的点云质量下具有鲁棒性。我们的Point-NeRF成功地结合了经典点云表示和神经辐射场表示的优点,向高效和逼真的实用场景重建解决方案迈出了重要一步。

AIR

像NeRF[35]这样的体积神经渲染方法可以生成高质量的视图合成结果,但对每个场景进行了优化,导致重建时间过长。另一方面,深度多视点立体视觉方法deep multi-view stereo methods可以通过直接网络推理快速重建场景几何。Point-NeRF结合了这两种方法的优点,通过使用神经3D点云和相关的神经特征来模拟辐射场。在基于光线行进的渲染管道中,通过聚集场景表面附近的神经点特征,可以有效地渲染点nerf。此外,可以通过预先训练的深度网络的直接推断来初始化点神经网络,从而生成神经点云;这个点云可以经过微调,以30倍快的训练时间超越NeRF的视觉质量。Point-NeRF可以与其他三维重建方法相结合,并通过一种新的修剪生长机制来处理这些方法中的误差和异常值。在DTU[18]、NeRF synthetic[35]、ScanNet[11]和Tanks and temple[23]数据集上的实验表明,Point-NeRF可以超越现有的方法,实现最先进的结果。

Introduction

从图像数据中建模真实场景并绘制逼真的新视图是计算机视觉和图形学的核心问题。NeRF[35]及其扩展[29,32,64]通过模拟神经辐射场在这方面取得了巨大成功。这些方法[35,38,64]通常通过射线marching,使用全局mlp对整个空间重建辐射场。由于每个场景网络拟合缓慢以及不必要的大量空白空间采样,这导致重建时间长
我们使用Point-NeRF解决了这个问题,Point-NeRF是一种新的基于点的辐射场表示,它使用3D神经点来模拟连续的体积辐射场。与NeRF完全依赖于每个场景的拟合不同,PointNeRF可以通过前馈深度神经网络进行有效的初始化,跨场景进行预训练。此外,PointNeRF通过利用接近实际场景几何的经典点云来避免在空场景空间中进行光线采样。与其他神经辐射场模型相比,Point-NeRF的这一优势导致了更高效的重建和更准确的渲染[8,35,53,63]。
我们的Point-NeRF表示由具有点神经特征的点云组成: 每个神经点编码其周围的局部3D场景几何形状和外观。先前的基于点的渲染技术[2]使用类似的神经点云,但在图像空间中使用栅格化和2D CNNs进行渲染。相反,我们将这些神经点视为3D中的局部神经基函数,以模拟连续的体辐射场,从而使用可微射线行进实现高质量的渲染。特别地,对于任何3D位置,我们建议使用MLP网络来聚集其邻域的神经点,以回归该位置的体积密度和视图依赖辐射。这表示一个连续的辐射场。
我们提出了一个基于学习的框架来有效地初始化和优化基于点的辐射场。为了生成初始场,我们利用深度多视图立体(MVS)技术[59],即应用cost-volume-based的网络来预测深度,然后将其非投影到3D空间。此外,训练深度CNN从输入图像中提取2D特征映射,自然地提供点特征。这些来自多个视图的神经点被组合成一个神经点云,形成一个基于点的场景辐射场。我们使用基于点的体绘制网络对该点生成模块进行了端到端训练,以呈现新颖的视图图像并使用地面真实度对其进行监督。这导致了一个可推广的模型,可以直接预测基于点的辐射场在推理时间。一旦预测,初始的基于点的场将在短时间内进一步优化每个场景,以实现逼真的渲染。如图1(左)所示,使用Point-NeRF进行21分钟优化的效果优于经过数天训练的NeRF模型。

image.png

除了使用内置的点云重建外,我们的方法是通用的,也可以基于其他重建技术的点云生成辐射场。然而,使用COLMAP[44]等技术生成的重建点云在实际中包含孔洞和异常值,这些孔洞和异常值会对最终渲染产生不利影响。为了解决这个问题,我们引入点生长和修剪作为我们优化过程的一部分。我们在体绘制过程中利用几何推理[13],在高体密度区域中点云边界附近生长点,在低体密度区域中修剪点。该机制有效地提高了我们最终的重建和渲染质量。我们在图1(右)中展示了一个示例,其中我们将COLMAP点转换为辐射场,并成功填充大孔并生成逼真的渲染图。

我们在DTU数据集[18]上训练我们的模型,并在DTU测试场景、NeRF合成场景、Tanks & Temples[23]和ScanNet[11]场景上进行评估。结果表明,我们的方法可以实现最先进的新视图合成,优于许多现有技术,包括基于点的方法[2]、NeRF、NSVF[29]和许多其他可推广的神经方法[8,53,63],详细(见表1和表2)。

image.png

  • Scene representations.
    • 传统方法和神经方法已经在不同的视觉和图形应用中研究了许多3D场景表示,包括体[19,25,41,46,56]、点云[1,40,51]、网格[20,52]、深度图[17,28]和隐式函数[9,33,37,60]。最近,各种神经场景表示已经被提出[4,30,47,67],推进了新视图合成和逼真渲染的技术水平,体积神经辐射场(NeRF)[35]产生了高保真度的结果。NeRF通常被重构为编码整个场景空间的全局MLP[35,38,64];在重建复杂的大规模场景时,这种方法效率低下且成本高昂。相反,Point-NeRF是一种局部神经表示,将体积辐射场与经典用于近似场景几何的点云相结合。我们分配细粒度的神经点来模拟复杂的局部场景几何和外观,从而获得比NeRF更好的渲染质量(见图6,7)。
    • 具有per-voxel神经特征的体素网格[8,16,29]也是一种局部神经辐射表示。然而,我们基于点的表示更适合实际表面,从而获得更好的质量。此外,我们直接预测了良好的初始神经点特征,绕过了大多数基于体素的方法所需的逐场景优化[16,29]。
  • Multi-view reconstruction and rendering
    • 多视图三维重建已经得到了广泛的研究和解决,包括一些SFM[43,49,50]和MVS技术[10,14,25,44,59]。点云通常是MVS或深度传感器的直接输出,尽管它们通常被转换为网格[21,31]用于渲染和可视化。网格划分可能会引入误差,并且可能需要基于图像的渲染[6,12,66]才能实现高质量的渲染。我们直接使用深度MVS中的点云来实现逼真的渲染。
    • 点云在渲染中得到了广泛的应用,通常是通过基于栅格化的点splatting,甚至是可微栅格化模块[26,55]。然而,重建的点云通常有孔洞和异常值,导致渲染中的伪影。基于点的神经渲染方法通过splatting神经特征并使用2D cnn来渲染它们来解决这个问题[2,24,34]。相比之下,我们的基于点的方法利用3D体渲染,导致比以前的基于点的方法明显更好的结果。
  • Neural radiance fields
    • NeRF[35]已经证明了新视图合成的显著高质量结果。它们已经扩展到实现动态场景捕获[27,39]、重光照[3,5]、外观编辑[57]、快速渲染[16,62]和生成模型[7,36,45]。然而,大多数方法[3,27,39,57]仍然遵循原始的NeRF框架,并训练每个场景的mlp来表示亮度场。我们利用场景中具有空间变化神经特征的神经点对其辐射场进行编码。与网络容量有限的纯mlp相比,这种本地化表示可以模拟更复杂的场景内容。更重要的是,我们证明了我们的基于点的神经场可以通过一个预训练的深度神经网络有效地初始化,该神经网络可以泛化整个场景,并导致高效的辐射场重建。
    • 先前的工作也提出了基于辐射场的通用方法。PixelNeRF[63]和IBRNet[53]在每个采样的射线点聚合多视图2D图像特征,回归体渲染属性进行亮度场渲染。相反,我们利用场景表面周围的3D神经点的特征来模拟辐射场。这避免了在广阔的空白空间中采样点,并导致比PixelNeRF和IBRNet更高的渲染质量和更快的辐射场重建。MVSNeRF[8]可以实现非常快速的基于体素的辐射场重建。然而,其预测网络需要固定数量的三幅小基线图像作为输入,因此只能有效地重建局部辐射场。我们的方法可以从任意数量的视图融合神经点,实现完整的360度辐射场的快速重建,这是MVSNeRF无法支持的。

Point-NeRF Representation

我们提出了新的基于点的亮度场表示,设计用于高效重建和渲染(见图2 (b))。我们从一些预备开始。

image.png
Point-NeRF概述(a)从多视图图像中,我们的模型通过使用基于cost volume的3D CNN Gp,γ来生成每个视图的深度,并通过2D CNN Gf从输入图像中提取2D特征。在对深度图进行聚合后,我们得到了一个基于点的辐射场,其中每个点具有空间位置pi、置信度γi和未投影图像特征fi。(b)为了合成一个新的视图,我们只在神经点云(例如xa, xb, xc)附近进行可微射线行进和计算阴影。在每个shading位置,point - nerf从它的K个神经点邻居中聚集特征,计算亮度r和体积密度σ,然后使用σ计算累加量。整个过程是端到端可训练的,基于点的亮度场可以优化渲染损失。

Volume rendering and radiance fields

基于物理的体绘制可以通过可微射线推进进行数值评估。具体来说,像素的亮度可以通过让光线穿过像素来计算,在$\{x_{j}\mid j=1,…,M\}$沿射线,并利用体积密度累积辐射,如:
$c=\sum_{M}\tau_{j}(1-\exp(-\sigma_{j}\Delta_{j}))r_{j},$
$\tau_{j}=\exp(-\sum_{t=1}^{j-1}\sigma_{t}\Delta_{t}).$
其中,τ表示体积透过率;$σ_j$、$r_j$为$x_j$处每个shading点j的体积密度和亮度,$∆_t$为相邻遮阳样本之间的距离。
辐射场表示任何3D位置的体积密度σ和视景相关的辐射r。NeRF[35]提出使用多层感知器(MLP)来回归这样的辐射场。我们提出了Point-NeRF,它利用神经点云来计算体积属性,从而实现更快、更高质量的渲染。

Point-based radiance field.

我们用$P=\{(p_i,f_i,\gamma_i)|i=1,…,N\},$其中每个点i位于$p_i$,并与编码局部场景内容的神经特征向量$f_i$相关联。我们还为每个点分配一个尺度置信度值$γ_i∈[0,1]$,它表示该点位于实际场景表面附近的可能性。我们从这个点云回归辐射场。
给定任何3D位置x,我们在一定半径r内查询它周围的K个相邻神经点。我们基于点的亮度场可以抽象为一个神经模块,它从相邻神经点回归任何阴影shading位置x的体积密度σ和视图依赖亮度r(沿任何观看方向d),如下所示:
$(\sigma,r)=\text{Point-NeRF}(x,d,p_1,f_1,\gamma_1,…,p_K,f_K,\gamma_K).$
我们使用一个类似于pointnet的[40]神经网络,具有多个子mlp,来进行这种回归。总的来说,我们首先对每个神经点进行神经处理,然后将多个点的信息进行聚合,得到最终的估计值。

Per-point processing.

我们使用MLP F来处理每个相邻的神经点,通过以下方法预测阴影位置x的新特征向量:$f_{i,x}=F(f_{i},x-p_{i}).$
本质上,原始特征$f_i$编码了$p_i$周围的局部3D场景内容。该MLP网络表示一个局部3D函数,该函数输出特定的神经场景描述在x处$f_{i,x}$,由其局部帧中的神经点建模。相对位置x−p的使用使得网络对点平移具有不变性,从而更好地泛化。

View-dependent radiance regression

我们使用标准逆距离加权来聚合从这K个相邻点回归的神经特征$f_{i,x}$,以获得描述x处场景外观的单个特征$f_x$:
$f_{x}=\sum_{i}\gamma_{i}\frac{w_{i}}{\sum w_{i}}f_{i,x},\mathrm{~where~}w_{i}=\frac{1}{|p_{i}-x|}.$

然后一个MLP R,根据给定的观测方向d,从该特征中回归与视图相关的辐射:$r=R(f_{x},d).$

反距离权值$w_i$广泛应用于离散数据插值;我们利用它来聚合神经特征,使更接近的神经点对着色计算贡献更多。此外,我们在此过程中使用了逐点置信度γ;这在最后的重构中进行了优化,并减少了稀疏性损失,使网络能够灵活地拒绝不必要的点。

Density regression

为了计算x处的体积密度σ,我们遵循类似的多点聚合。然而,我们首先使用MLP T回归每个点的密度$σ_i$,然后做基于距离的逆加权,给出如下:$\sigma_i=T(f_{i,x})$
然后在x处的密度为(标准逆距离加权)
$\sigma=\sum_{i}\sigma_{i}\gamma_{i}\frac{w_{i}}{\sum w_{i}},w_{i}=\frac{1}{|p_{i}-x|}.$

因此,每个神经点直接贡献体积密度,点置信度$γ_i$与这种贡献明确相关。我们在点去除过程中利用了这一点(见第4.2节)。

Discussion

与之前基于神经点的方法[2,34]不同,这些方法将点特征栅格化,然后用2D cnn渲染它们,我们的表示和渲染完全是3D的。通过使用近似场景几何形状的点云,我们的表示自然而有效地适应场景表面,并避免在空场景空间中采样阴影位置。对于沿着每条射线的阴影点,我们实现了一种有效的算法来查询相邻的神经点;详情见补充材料。

Point-NeRF Reconstruction

我们现在介绍我们的管道有效地重建基于点的辐射场。

  • 我们首先利用跨场景训练的深度神经网络,通过直接网络推理生成初始的基于点的场(第4.1节)。
  • 用我们的点生长和修剪技术进一步优化每个场景的初始场,导致我们最终的高质量亮度场重建(第4.2节)。

图3显示了这个工作流,以及用于初始预测和场景优化的相应梯度更新。

image.png
虚线表示亮度场初始化和每个场景优化的梯度更新。

Generating initial point-based radiance fields

给定一组已知图像$I_1,…,I_Q$和一个点云,我们的point -NeRF表示可以通过优化随机初始化的每点神经特征和具有渲染损失(类似于NeRF)的mlp来重建。然而,这种纯粹的逐场景优化依赖于现有的点云,并且可能会非常慢。因此,我们提出了一个神经生成模块,通过前馈神经网络预测所有神经点属性,包括点位置pi,神经特征fi和点置信度γi,以实现高效重建。网络的直接推理输出了一个良好的初始基于点的辐射场。然后可以对初始字段进行微调,以实现高质量的呈现。在很短的时间内,渲染质量更好或与NeRF相当,而NeRF需要更长的时间来优化(见表1和2)。

Point location and confidence.

我们利用深度MVS方法,使用基于成本体积的3D cnn生成3D点位置[10,59]。这样的网络产生高质量的密集几何,并在各个领域推广良好。对于每个在视点q处具有相机参数$Φ_q$的输入图像$I_q$,我们遵循MVSNet[17],首先通过从邻近视点弯曲二维图像特征来构建平面扫描代价体积,然后使用深度3D cnn回归深度概率体积。深度图是通过线性组合每个平面的深度值加权概率来计算的。我们将深度图反投影到3D空间,得到每个视图q的一个点云${p_1,…, p_{N_{q}}}$。

由于深度概率描述了点在表面上的可能性,我们对深度概率体积进行三线性采样,以获得每个点$p_i$的点置信度γ。以上过程可以用
$\{p_{i},\gamma_{i}\}=G_{p,\gamma}(I_{q},\Phi_{q},I_{q_{1}},\Phi_{q_{1}},I_{q_{2}},\Phi_{q_{2}},…),$

其中$G_{p,γ}$为基于mvsnet的网络。$I_{q_{1}}, Φ_{q_{1}},…$是MVS重建中使用的附加相邻视图;在大多数情况下,我们使用两个附加视图。

Point features.

我们使用2D CNN $G_f$从每个图像$I_q$中提取神经2D图像特征映射。这些特征映射与来自$G_{p,γ}$的点(深度)预测对齐,并用于直接预测每个点的特征$f_i$:$\{f_i\}=G_f(I_q).$
特别地,我们使用了一个有三个下采样层的VGG网络架构。我们将不同分辨率的中间特征组合为fi,提供了一个有意义的点描述来模拟多尺度场景的外观。(见图2(a))
image.png

End-to-end reconstruction.

我们结合来自多个视点的点云来获得我们最终的神经点云。我们训练点生成网络和表示网络,从头到尾都有渲染损失(见图3)。这使得我们的生成模块产生合理的初始辐射场。它还以合理的权重初始化Point-NeRF表示中的mlp,极大地节省了每个场景的拟合时间。
此外,除了使用完整的生成模块,我们的管道还支持使用从其他方法(如COLMAP[44])重建的点云,其中我们的模型(不包括MVS网络)仍然可以为每个点提供有意义的初始神经特征。详情请参考我们的补充资料。

Optimizing point-based radiance fields

上面的管道可以为一个新场景输出一个合理的基于初始点的亮度场。通过可微射线行进,对于特定场景,我们可以通过优化神经点云(点特征$f_i$and点置信度$γ_i$)和我们表示中的mlp来进一步改善亮度场(见图3)。

初始点云,特别是来自外部重建方法的点云(例如,图1中的Metashape或COLMAP),通常会包含降低渲染质量的孔和异常值。在逐场景优化过程中,为了解决这个问题,我们发现直接优化现有点的位置会使训练不稳定,无法填充大洞(见1)。相反,我们采用了新的点修剪和生长技术,逐渐提高几何建模和渲染质量

Point pruning.

如第3节所述,我们设计了点置信度值$γ_i$来描述神经点是否靠近场景表面。我们利用这些置信度值来修剪不必要的异常点。请注意,点置信度与体积密度回归中每个点的贡献直接相关(Eqn. 7);因此,低置信度反映了点局部区域的低体积密度,表明它是空的。因此,我们每10K次迭代就修剪$γ_i < 0.1$的点。我们还对点置信度施加了稀疏性损失[30], $\mathcal{L}_{\mathrm{sparse}}=\frac{1}{|\gamma|}\sum_{\gamma_{i}}\left[log(\gamma_{i})+log(1-\gamma_{i})\right]$ 这迫使置信值要么接近0,要么接近1。如图4所示,这种剪枝技术可以去除离群点,减少相应的伪影。

Point growing.

我们还提出了一种新的技术来生长新的点来覆盖原始点云中缺失的场景几何。与直接利用现有点信息的点修剪不同,生长点需要在不存在点的空白区域恢复信息。我们通过基于我们的point - nerf表示建模的局部场景几何来逐步增长点云边界附近的点来实现这一点。
特别是,我们利用在光线行进中采样的每射线着色位置(Eqn. 1中的$x_j$)来识别新的候选点。具体来说,我们确定沿光线不透明度最高的阴影位置$x_{j_{g}}$:
$\alpha_j=1-\exp(-\sigma_j\Delta_j),j_g=\operatorname*{argmax}_j\alpha_j.$
我们将$\epsilon_{j_{g}}$计算为$x_{j_{g}}$到它最近的神经点的距离。

对于行进射线,如果$\alpha_{j_g}>T_{\text{opacity}}$, $\epsilon_{j_{g}}>T_{\mathrm{dist}}$,我们在$x_{j_{g}}$处生长一个神经点。这意味着该位置位于表面附近,但远离其他神经点。通过重复这种增长策略,我们的亮度场可以扩展到覆盖初始点云中的缺失区域。点增长尤其有利于通过COLMAP等方法重建的点云,这些方法不密集(见图4)。我们表明,即使在只有1000个初始点的极端情况下,我们的技术也能够逐步增长新的点并合理地覆盖物体表面(见图5)。

Implementation details

Network details
我们对每点处理网络$G_f$的相对位置和每点特征以及网络r的观看方向应用频率位置编码。我们在network $G_f$中以不同分辨率从三层提取多尺度图像特征,从而得到一个具有56(8+16+32)个通道的向量。我们还从每个输入视点附加相应的观看方向,以处理与视图相关的效果。因此,我们最终的逐点神经特征是一个59通道向量。请参考我们的补充资料,了解网络架构和遮阳时的神经点查询的细节。

Training and optimization details.
我们在DTU数据集上训练我们的完整管道,使用与PixelNeRF和MVSNeRF相同的训练和测试分割。我们首先使用类似于原始MVSNet论文[59]的地面真值深度对基于MVSNet的深度生成网络进行预训练。然后,我们纯粹使用L2渲染损失$L_render$从端到端训练我们的完整管道,用ground truth监督我们从光线行进(通过Eqn. 1)中渲染的像素,以获得我们的Point-NeRF重建网络。我们使用Adam[22]优化器训练整个管道,初始学习率为5e−4。我们的前馈网络从三个输入视图生成一个点云需要0.2s。
在逐场景优化阶段,我们采用了一种结合了渲染和稀疏度损失的损失函数$\mathcal{L}_{\mathrm{opt}}=\mathcal{L}_{\mathrm{render}}+a\mathcal{L}_{\mathrm{sparse}},$
我们用a = 2e - 3来做所有的实验。我们每10K次迭代执行点生长和修剪,以实现最终的高质量重建。

Experiments

  • Evaluation on the DTU testing set.
  • Evaluation on the NeRF Synthetic dataset.
  • Evaluation on the Tanks & Temples and the ScanNet dataset.
  • Additional experiments.
    • Converting COLMAP point clouds to Point-NeRF
    • Point growing and pruning.

Welcome to my other publishing channels