原文地址
论文分享-《NeuS: Learning Neural Implicit Surfaces by Volume Rendering for Multi-vie》
论文分享-《Volume Rendering of Neural Implicit Surfaces》
CV Master基于神经网络的3D重建(NeRF, SDF 等)
标题:NeuS: Learning Neural Implicit Surfaces by Volume Rendering for Multi-view Reconstruction
翻译:基于体渲染的神经隐式曲面多视图重构学习
input:不同视角的、包含位姿信息的 2D images
output:3D场景,用物体的表面 𝑆 表示,这个表面由神经隐式符号距离函数(SDF)的零水平集(值为0,在边缘上)表示
把符号距离函数(SDF)作为先验信息,加到密度估计之前
nerf:新视角合成
NeuS、IDR:表面重建
combines the advantages of surface rendering based and
volume rendering based methods
总览
对标方法
- DVR (DeepVoxels Reconstruction):需要前景遮罩作为监督,容易陷入局部最小值,对自遮挡严重或细小结构的重建效果较差。
- IDR (Implicit Differentiable Renderer):对复杂结构的物体重建效果有限,尤其在有剧烈深度变化的情况下容易失败,需要前景遮罩作为监督。
- NeRF (Neural Radiance Fields):采用体积渲染方法,尽管在处理复杂对象的优化上表现出色,但难以从隐式表示中提取高质量的曲面。
现有方法的缺点
- DVR和IDR:需要前景遮罩作为监督,容易陷入局部最小值,对自遮挡和细小结构的重建效果不佳。
- NeRF:虽然能处理复杂对象的优化,但从体积密度场中提取高质量曲面很困难,隐式表示中缺乏足够的曲面约束。
解决的问题
NeuS 通过将表面表示为符号距离函数(SDF)的零水平集,并开发了一种新的体积渲染方法来训练神经SDF表示,解决了以下问题:
- 消除几何误差:常规体积渲染方法会引入固有的几何误差(即偏差),NeuS提出了一种新的公式,在一阶近似中消除了这种偏差。
- 无需遮罩监督:即使没有前景遮罩作为监督,NeuS也能实现高质量的表面重建。
实验结果
实验结果表明,NeuS在高质量表面重建方面优于现有的最先进方法,特别是在处理复杂结构和自遮挡的物体和场景时。具体实验结果如下:
- 定量评估:在DTU数据集上的定量评估显示,NeuS在有无遮罩监督的情况下,Chamfer距离均优于IDR和NeRF。
- 定性比较:在DTU和BlendedMVS数据集上的定性比较显示,NeuS在重建薄结构和处理剧烈深度变化方面效果显著优于现有方法。
conclusion
现有的神经表面重建方法,如DVR(Niemeyer等,2020年)和IDR(Yariv等,2020年),需要前景掩码作为监督,容易陷入局部最小值,因此在重建具有严重自遮挡或细薄结构的物体时遇到困难。同时,最近的用于新视角合成的神经方法,如NeRF(Mildenhall等,2020年)及其变体,由于在表示中没有足够的表面约束,所以从这种学习到的隐式表示中提取高质量的表面是困难的。
在NeuS中,我们提出将表面表示为符号距离函数(SDF)的零水平集(位于边缘上的点,值为0),并开发了一种新的体渲染方法来训练神经SDF表示。我们观察到,传统的体渲染方法会导致表面重建的固有几何误差(即偏差),因此提出了一种在一阶近似中无偏的新公式,从而即使在没有掩码监督的情况下也能进行更准确的表面重建。
Drawbacks
- 尽管 NeuS 不严重依赖于纹理特征的对应匹配,但对于无纹理的物体,其性能仍会下降。
- NeuS 只有一个用于建模所有空间位置的概率分布标准偏差的单一尺度参数s。因此,一个有趣的未来研究课题是根据不同的局部几何特征,使用不同的方差来建模不同空间位置的概率,并优化场景表示。
- 大量计算
What's new
将3D表面表示为神经符号距离函数(SDF),并开发了一种新的体渲染方法来训练隐式SDF表示
SDF(Signed Distance Field,有符号距离场)
NeuS 使用符号距离函数(SDF)进行表面表示,并采用一种新颖的体渲染方案来学习神经SDF表示。具体而言,通过引入由SDF引导的密度分布,能够将体渲染方法应用于学习隐式SDF表示,从而实现两全其美的效果,即使用神经SDF模型进行准确的表面表示,并在存在深度突变的情况下,通过体渲染实现鲁棒的网络训练。
新体渲染
简单地将标准体渲染方法应用于与SDF相关的密度会导致重建表面出现明显的偏差(即固有的几何误差)。因此,提出了一种新的体渲染方案,以确保在SDF的一阶近似中实现无偏的表面重建。
模型结构
NeuS 模型的结构包括两个多层感知器(MLPs):
-
SDF MLP:用于建模符号距离函数 ,将空间位置 映射到该位置到物体的符号距离。该网络包含8个隐藏层,每层有256个隐藏单元,激活函数使用Softplus,参数 。第4层使用跳跃连接。
-
颜色预测 MLP:用于预测颜色 ,编码给定点 和视角 下的颜色。该网络包含4个隐藏层,每层有256个隐藏单元,输入包括空间位置 、视角 、SDF 的法向量 和来自 SDF MLP 的256维特征向量。对空间位置 和视角 进行了位置编码。
模型结构详细说明
-
网络架构:两个 MLP 分别编码 SDF 和颜色。SDF MLP 由8个隐藏层组成,每层256个隐藏单元,隐藏层的激活函数为Softplus。第4层有跳跃连接。颜色预测 MLP 由4个隐藏层组成,每层256个隐藏单元,输入包括空间位置、视角、法向量以及从 SDF MLP 获取的256维特征向量。
-
训练细节:使用Adam优化器进行训练,学习率在前5000次迭代中线性升温至 ,然后通过余弦衰减策略降至最小学习率 。每个模型在单个 Nvidia 2080Ti GPU 上训练 300,000 次迭代,训练时间为14小时(有遮罩)或16小时(无遮罩)。
-
采样策略:在实现中,有两种采样点类型——采样段点和采样中点。使用分层采样策略,首先在射线上均匀采样64个点,然后迭代进行4次重要性采样。对于每次迭代,初始采样点数为64,每次迭代增加16个点,总采样点数为128。
-
损失函数:损失函数包括颜色损失、正则化损失和可选的遮罩损失。颜色损失使用L1损失,正则化损失采用Eikonal项,遮罩损失使用二元交叉熵损失。
Relative Works
前景掩码(foreground masks)是在图像处理中用于区分前景(感兴趣的物体)和背景的二值图像。前景掩码中的每个像素通常只有两个值:一种值(如1或白色)表示前景,另一种值(如0或黑色)表示背景。前景掩码常用于计算机视觉任务中,如对象检测、分割、跟踪和重建,以帮助算法专注于图像中的目标对象,而忽略背景的干扰。
SDF(Signed Distance Function)
3.符号距离场
SDF (signed distance function)
A Dataset and Explorer for 3D Signed Distance Functions (SDFs) - JCGT / i3D 2022
符号距离函数 SDF 是一种常用于计算机图形学和计算机视觉中的数学工具,用于表示形状或几何体的边界
-
定义:SDF 是一个标量场,其中每个点的值表示该点到
最近
的形状表面的有符号距离。- 距离为正:点在形状外部。
- 距离为负:点在形状内部。
- 距离为零:点在形状的表面上。
-
计算:
- 对于空间中的任意点 ,SDF 的值 是该点到形状表面最近点的欧几里得距离,并且带有符号,指示该点位于形状的内部还是外部。(点到曲面的最短距离)
-
应用:
- 碰撞检测:通过检测物体之间的距离,可以快速判断物体是否碰撞。
- 表面重建:从点云或其他数据生成复杂形状的光滑表面。
- 流体模拟:在流体模拟中,用于表示和处理复杂边界。
- 3D建模与渲染:用于定义和操纵复杂形状的边界,便于精确控制和生成高质量的渲染效果。
-
表示形式:SDF 通常以栅格形式存储,称为距离场,也可以使用隐函数进行参数化表示。例如,给定一个隐函数 ,可以定义 SDF 为 ,其中 表示点 到形状表面的距离。
通过使用符号距离函数,可以在数学上和计算上简洁而高效地处理和操作复杂的几何形状,为许多图形学和计算机视觉任务提供了强大的工具。
放大仍然保持清晰的原因:
传统对形状建模用像素点,是离散的,放大到一定尺度就会看到像素块;而SDF的距离表示是连续的,不同尺度下都是连续平滑的
在符号距离函数(SDF)的计算中,规则网格的大小和采样密度的确定是一个重要的步骤,它会影响最终SDF的精度和计算效率。确定采样密度通常需要考虑以下几个因素:
1. 目标分辨率
采样密度应与目标应用的分辨率要求相匹配。如果SDF用于高精度的几何表示或细节较多的场景,则需要更高的采样密度。例如,在计算机图形学中,用于细节丰富的3D模型时,采样密度通常较高。
2. 几何复杂度
几何体的复杂度也是确定采样密度的重要因素。复杂几何体(例如包含大量细节或尖锐边缘的形状)需要更高的采样密度来捕捉细节。而简单几何体(例如平滑的表面或简单的形状)则可以使用较低的采样密度。
3. 计算资源
采样密度直接影响计算量和存储需求。高密度采样会增加计算成本和存储开销。因此,在确定采样密度时,需要平衡计算资源的限制。例如,在实时应用中,可能需要降低采样密度以保证实时性能。
4. 误差容忍度
误差容忍度是指应用能够接受的误差范围。在一些应用中,可能允许一定程度的误差,从而可以选择较低的采样密度。而在需要高精度的应用中(如医学成像或精密制造),误差容忍度较低,则需要较高的采样密度。
符号距离函数(SDF)的点是通过计算空间中每个点到形状边界的有符号距离来找到的。以下是一个详细的过程,说明如何找到这些点并计算它们的 SDF 值。
具体步骤
-
确定感兴趣空间的范围:首先确定需要计算SDF的空间范围。这通常是包含几何形状的最小包围盒(bounding box)。
-
选择采样间隔:根据上述因素选择采样间隔(grid spacing)。较小的采样间隔对应较高的采样密度。
-
构建采样网格:在感兴趣的空间范围内,按照选择的采样间隔生成规则网格。每个网格节点对应一个采样点。
1. 定义几何形状
首先,需要有一个几何形状 ,这个形状可以用多种方式表示,例如三角形网格、隐式函数、点云等。
2. 选择空间中的点
在感兴趣的空间中选择一个点 。通常,这些点会形成一个规则的网格,也可以是任意分布的采样点。
3. 计算到形状边界的距离
对每个点 ,需要计算它到形状边界 的最近距离。这个距离可以通过以下几种方法计算:
a. 网格方法
如果形状 是由多边形网格(例如三角形网格)表示的,可以计算点 到每个三角形的距离,然后取最小值。这个方法的计算步骤包括:
- 计算点到三角形平面的垂直距离。
- 检查垂足是否在三角形内部,若在内部,垂直距离即为所求。
- 若垂足不在三角形内部,则计算点到三角形边的距离,并取最小值。
b. 隐式函数方法
如果形状 是通过隐式函数 表示的,那么点 到形状的距离可以通过求解梯度方向上的零点来计算:
- 计算隐式函数 的值和梯度 。
- 沿梯度方向进行投影,找到 的最近点。
- 计算该点到 的距离。
c. 点云方法
如果形状 是由点云表示的,可以计算点 到点云中每个点的距离,取最小值。这通常涉及到最近邻搜索算法,如 k-d 树或八叉树。
4. 符号距离
确定距离后,需要确定符号:
- 如果点 位于形状的外部,则距离为正。
- 如果点 位于形状的内部,则距离为负。
- 边界上的点距离为零。
可以通过光线投射或其他方法判断点 的内部外部关系。例如,在隐式函数方法中,函数值的符号可以直接用于判定内部外部。
5. 生成 SDF 场
重复上述步骤,对空间中的所有点进行计算,生成整个空间的 SDF 场。这可以以多种形式存储,例如网格格式的距离场。
伪代码示例
以下是一个简化的伪代码示例,说明如何计算 SDF 值:
for each point p in space:
min_distance = infinity
for each triangle t in mesh:
distance = calculate_distance(p, t)
if distance < min_distance:
min_distance = distance
if is_inside_shape(p):
sdf_value = -min_distance
else:
sdf_value = min_distance
sdf[p] = sdf_value
英文单词
reconstruction 重建
fidelity 精确度
foreground 前景
sufficient 充足的
inherent 内在的
self-occlusion 自遮挡
abrupt changes 突变
signed 有符号的,有正负之分的