G010, L003, k034 NeuS2, Fast Learning of Neural Implicit Surfaces for Multi-view Reconstruction

Zhangwenniu 于 2025-03-04 发布

论文链接

发表时间:

[v1] Sat, 10 Dec 2022 07:19:43 UTC (29,621 KB)

[v2] Sat, 19 Aug 2023 18:09:23 UTC (15,848 KB)

[v3] Thu, 16 Nov 2023 22:00:04 UTC (15,848 KB)

论文重点和难点介绍

重点

  1. 快速神经表面重建
    NeuS2提出了一种快速的神经表面重建方法,能够在短时间内高质量地重建静态和动态场景。通过多分辨率哈希编码和CUDA加速,NeuS2将训练速度提高了两个数量级,同时保持了与NeuS相当的重建质量。

  2. 高效的二阶导数计算
    为了加速训练,作者提出了一种针对ReLU激活函数的二阶导数计算方法。通过简化的公式和CUDA实现,显著降低了计算成本,使得训练过程更加高效。

  3. 动态场景重建
    NeuS2扩展到动态场景重建,采用增量训练策略和全局变换预测,能够高效处理具有大运动和变形的动态场景。每帧的重建时间缩短到20秒,显著优于现有的动态场景重建方法。

  4. 渐进式训练策略
    为了进一步加速训练,NeuS2引入了渐进式训练策略,从低分辨率到高分辨率逐步优化哈希编码,避免了过拟合和欠拟合问题,提高了训练的收敛速度和质量。

难点

  1. 二阶导数的高效计算
    在神经隐式表示中,计算二阶导数是训练过程中的关键步骤,但计算成本较高。NeuS2通过推导简化的二阶导数公式并结合CUDA实现,解决了这一问题。然而,这种计算仍然需要仔细设计以避免内存和计算瓶颈。

  2. 动态场景的全局变换预测
    在动态场景重建中,当两帧之间的运动较大时,直接增量训练可能导致重建结果陷入局部最小值。NeuS2通过预测全局变换来对齐两帧,从而解决了这一问题。然而,准确预测全局变换本身是一个具有挑战性的问题,尤其是在大运动场景中。

  3. 内存和计算效率的平衡
    NeuS2通过多分辨率哈希编码和CUDA加速显著提高了训练速度,但这也带来了内存占用和计算效率之间的平衡问题。例如,高分辨率的哈希编码虽然能提高重建质量,但会增加内存需求和计算复杂度。

  4. 时空一致性的缺失
    NeuS2虽然能够高效重建每一帧的几何和外观,但目前缺乏帧间的时间一致性。如何在动态场景中实现高质量的时空连贯性是一个尚未解决的问题,可能需要进一步的算法设计和优化。

这些重点和难点展示了NeuS2在神经隐式曲面重建领域的创新性和挑战性。

论文详细讲解

1. 研究背景与动机

三维重建技术在计算机视觉和图形学中具有重要应用,如增强现实(AR)、虚拟现实(VR)、3D电影和游戏等。传统方法(如立体视觉算法)计算成本高且难以重建高质量结果。近年来,基于神经隐式表示的方法(如NeuS [60])取得了显著进展,但训练速度极慢(约8小时),难以应用于动态场景。因此,本文提出NeuS2,旨在实现快速、高质量的静态和动态场景重建。

2. 方法

2.1 静态场景重建

2.1.1 多分辨率哈希编码

NeuS2利用多分辨率哈希编码来加速神经表面的训练。具体来说,三维空间被划分为多分辨率的体素网格,每个网格映射到一个固定大小的哈希表中,表中的每个条目是一个可学习的特征向量。对于每个三维位置 $x$,其哈希编码 $h(x)$ 通过插值周围网格的特征向量获得:

\[h(x) = \{h_i(x)\}_{i=1}^L \in \mathbb{R}^{L \times d}\]

其中,$L$ 是分辨率层级数,$d$ 是特征向量的维度。

2.1.2 高效的二阶导数计算

NeuS2需要计算二阶导数来优化符号距离场(SDF)。为此,作者提出了一种简化的二阶导数公式,专门针对基于ReLU的多层感知机(MLP)。具体公式如下:

\[\frac{\partial \mathcal{L}}{\partial \Omega} = \frac{\partial \mathcal{L}}{\partial \mathbf{n}} \left(\frac{\partial \mathbf{e}}{\partial \mathbf{x}} \frac{\partial \frac{\partial d}{\partial \mathbf{e}}}{\partial \Omega} \frac{\partial \mathbf{e}}{\partial \Omega} + \frac{\partial d}{\partial \mathbf{e}} \frac{\partial \frac{\partial \mathbf{e}}{\partial \mathbf{x}}}{\partial \Omega} \right)\] \[\frac{\partial \mathcal{L}}{\partial \Theta} = \frac{\partial \mathcal{L}}{\partial \mathbf{n}} \left(\frac{\partial \mathbf{e}}{\partial \mathbf{x}} \frac{\partial \frac{\partial d}{\partial \mathbf{e}}}{\partial \Theta} + \frac{\partial d}{\partial \mathbf{e}} \frac{\partial \frac{\partial \mathbf{e}}{\partial \mathbf{x}}}{\partial \Theta} \right)\]

通过这种简化,NeuS2能够高效地在GPU上并行计算二阶导数,显著加速训练过程。

2.1.3 渐进式训练策略

为了进一步加速训练,NeuS2采用渐进式训练策略,从低分辨率到高分辨率逐步优化哈希编码。具体来说,训练过程中逐渐增加哈希编码的分辨率,避免了高分辨率下的过拟合问题,同时加速了训练收敛。

2.2 动态场景重建

2.2.1 增量训练

对于动态场景,NeuS2采用增量训练策略。首先训练第一帧,然后利用前一帧的哈希编码初始化后续帧的训练,从而显著减少每帧的训练时间。这种方法利用了连续帧之间的相似性,提高了训练效率。

2.2.2 全局变换预测

当两帧之间的运动较大时,增量训练可能导致重建结果陷入局部最小值。为此,NeuS2引入了全局变换预测(Global Transformation Prediction, GTP)。在训练每一帧之前,预测该帧相对于前一帧的全局变换(旋转和平移),并将该帧的几何信息变换到规范空间中,从而避免局部最优问题。

3. 实验

3.1 静态场景重建

NeuS2在DTU数据集上进行了实验,结果表明,NeuS2的训练时间从NeuS的8小时缩短到5分钟,同时在几何重建质量(Chamfer Distance)上优于NeuS和Instant-NGP。在外观重建(novel view synthesis)方面,NeuS2与Instant-NGP相当,但训练速度更快。

3.2 动态场景重建

NeuS2在合成和真实动态场景数据集上进行了实验。结果表明,NeuS2的训练时间从D-NeRF的20小时缩短到每帧20秒,同时在几何和外观重建方面均优于D-NeRF。NeuS2能够处理大运动和非刚性变形的场景,而D-NeRF在这些场景中表现不佳。

4. 局限性与未来工作

尽管NeuS2在单帧重建上表现出色,但目前缺乏帧间的时间一致性。未来的工作可以考虑通过变形模板或光流场来实现连续的动态网格序列。此外,每帧的模型参数需要单独保存,占用较多内存。未来可以探索参数压缩技术,以减少内存占用。

5. 结论

NeuS2通过多分辨率哈希编码、高效的二阶导数计算和渐进式训练策略,显著提高了神经表面重建的速度,同时保持了高质量的几何和外观重建效果。该方法在静态和动态场景重建任务上均取得了优异的性能,是该领域的一个重要进展。

论文方法部分详细讲解

1. 静态神经表面重建

1.1 多分辨率哈希编码

NeuS2采用多分辨率哈希编码来加速神经表面的训练。具体来说,三维空间被划分为多分辨率的体素网格,每个网格映射到一个固定大小的哈希表中,表中的每个条目是一个可学习的特征向量。对于每个三维位置$x$,其哈希编码$h(x)$通过插值周围网格的特征向量获得:

\[h(x) = \{h_i(x)\}_{i=1}^L \in \mathbb{R}^{L \times d}\]

其中,$L$是分辨率层级数,$d$是特征向量的维度。这种编码方式能够有效减少计算量和内存占用,同时保留场景的细节。

1.2 高效的二阶导数计算

NeuS2需要计算二阶导数来优化符号距离场(SDF)。为此,作者提出了一种简化的二阶导数公式,专门针对基于ReLU的多层感知机(MLP)。具体公式如下:

\[\frac{\partial \mathcal{L}}{\partial \Omega} = \frac{\partial \mathcal{L}}{\partial \mathbf{n}} \left(\frac{\partial \mathbf{e}}{\partial \mathbf{x}} \frac{\partial \frac{\partial d}{\partial \mathbf{e}}}{\partial \Omega} \frac{\partial \mathbf{e}}{\partial \Omega} + \frac{\partial d}{\partial \mathbf{e}} \frac{\partial \frac{\partial \mathbf{e}}{\partial \mathbf{x}}}{\partial \Omega} \right)\] \[\frac{\partial \mathcal{L}}{\partial \Theta} = \frac{\partial \mathcal{L}}{\partial \mathbf{n}} \left(\frac{\partial \mathbf{e}}{\partial \mathbf{x}} \frac{\partial \frac{\partial d}{\partial \mathbf{e}}}{\partial \Theta} + \frac{\partial d}{\partial \mathbf{e}} \frac{\partial \frac{\partial \mathbf{e}}{\partial \mathbf{x}}}{\partial \Theta} \right)\]

通过这种简化,NeuS2能够高效地在GPU上并行计算二阶导数,显著加速训练过程。

1.3 渐进式训练策略

为了进一步加速训练,NeuS2采用渐进式训练策略,从低分辨率到高分辨率逐步优化哈希编码。具体来说,训练过程中逐渐增加哈希编码的分辨率,避免了高分辨率下的过拟合问题,同时加速了训练收敛。

2. 动态神经表面重建

2.1 增量训练

对于动态场景,NeuS2采用增量训练策略。首先训练第一帧,然后利用前一帧的哈希编码初始化后续帧的训练,从而显著减少每帧的训练时间。这种方法利用了连续帧之间的相似性,提高了训练效率。

2.2 全局变换预测

当两帧之间的运动较大时,增量训练可能导致重建结果陷入局部最小值。为此,NeuS2引入了全局变换预测(Global Transformation Prediction, GTP)。在训练每一帧之前,预测该帧相对于前一帧的全局变换(旋转和平移),并将该帧的几何信息变换到规范空间中,从而避免局部最优问题。

具体步骤如下:

  1. 对于任意给定的三维位置$x_i$,将其从第$i$帧的坐标空间变换到第$i-1$帧的坐标空间:
\[x_{i-1} = R_i (x_i + T_i)\]
  1. 然后,通过累积变换,将点$x_i$变换到第一帧的坐标空间$x_c$:
\[x_c = R^c_{i-1} (x_{i-1} + T^c_{i-1}) = R^c_i (x_i + T^c_i)\]

其中,$R^c_i = R^c_{i-1} R_i$ 和 $T^c_i = T_i + R^{-1}i T^c{i-1}$。这种全局变换预测方法允许NeuS2只更新当前帧中与前一帧不同的小部分场景,而不是更新当前帧的整个场景,从而减少内存成本并提高重建精度。

3. 网络架构

NeuS2的网络架构包括以下部分:

4. 渲染与优化

NeuS2采用体积渲染技术将符号距离场(SDF)渲染为图像。具体来说,对于图像的每个像素,沿其相机光线采样$n$个点${p(t_i) = o + t_i v | i = 0, 1, \dots, n-1}$,其中$o$是相机中心,$v$是观察方向。通过累积采样点的SDF基密度和颜色,计算光线的颜色$\hat{C}$。由于渲染过程是可微的,NeuS2可以从多视角图像中学习符号距离场$f$和辐射场$c$。

5. 损失函数

NeuS2的损失函数包括两部分:

\[L_{\text{color}} = \frac{1}{m} \sum_{i} R(\hat{C}_i, C_i)\]

其中,$R$是Huber损失,$m$是批量大小。

\[L_{\text{eikonal}} = \frac{1}{mn} \sum_{k,i} (\|n_{k,i}\| - 1)^2\]

其中,$n_{k,i}$是采样点的法线,$n$是采样点的数量。

通过上述方法,NeuS2实现了快速、高质量的静态和动态场景重建,显著提升了神经隐式曲面重建的效率和效果。

评论