Neus学习笔记

NeuS: Learning Neural Implicit Surfaces by Volume Rendering for Multi-view Reconstruction

主页:https://lingjie0206.github.io/papers/NeuS/
论文:https://arxiv.org/abs/2106.10689
代码:https://github.com/Totoro97/NeuS

效果展示

摘要

We present a novel neural surface reconstruction method, called NeuS, for reconstructing objects and scenes with high fidelity from 2D image inputs. Existing neural surface reconstruction approaches, such as DVR [Niemeyer et al., 2020] and IDR [Yariv et al., 2020], require foreground mask as supervision, easily get trapped in local minima, and therefore struggle with the reconstruction of objects with severe self-occlusion or thin structures. Meanwhile, recent neural methods for novel view synthesis, such as NeRF [Mildenhall et al., 2020] and its variants, use volume rendering to produce a neural scene representation with robustness of optimization, even for highly complex objects. However, extracting high-quality surfaces from this learned implicit representation is difficult because there are not sufficient surface constraints in the representation. In NeuS, we propose to represent a surface as the zero-level set of a signed distance function (SDF) and develop a new volume rendering method to train a neural SDF representation. We observe that the conventional volume rendering method causes inherent geometric errors (i.e. bias) for surface reconstruction, and therefore propose a new formulation that is free of bias in the first order of approximation, thus leading to more accurate surface reconstruction even without the mask supervision. Experiments on the DTU dataset and the BlendedMVS dataset show that NeuS outperforms the state-of-the-arts in high-quality surface reconstruction, especially for objects and scenes with complex structures and self-occlusion.
译文:
我们提出了一种新颖的神经表面重建方法,称为NeuS,用于从2D图像输入以高保真度重建对象和场景。现有的神经表面重建方法,例如DVR [Niemeyer等人,2020] 和IDR [Yariv等人,2020],需要前景掩模作为监督,容易被困在局部最小值中,并且因此与具有严重自遮挡或薄结构的对象的重建作斗争。同时,用于新颖视图合成的最近的神经方法,例如NeRF [Mildenhall等人,2020] 及其变体,使用体积渲染来产生具有优化鲁棒性的神经场景表示,即使对于高度复杂的对象也是如此。但是,很难从这种学习的隐式表示中提取高质量的曲面,因为表示中没有足够的曲面约束。在NeuS中,我们建议将曲面表示为有符号距离函数 (SDF) 的零级集,并开发一种新的体绘制方法来训练神经SDF表示。我们观察到传统的体绘制方法会导致表面重建的固有几何误差 (即偏差),因此提出了一种新的公式,该公式在一阶近似中没有偏差,因此即使没有掩模监督,也可以实现更准确的表面重建。在DTU数据集和BlendedMVS数据集上的实验表明,NeuS在高质量的表面重建方面的性能优于现有技术,特别是对于具有复杂结构和自遮挡的对象和场景。

IDEA

  • NeRF旨在进行新颖的视图合成而不是表面重建,因此NeRF仅学习体积密度场,因此很难从中提取高质量的表面。

Neus学习笔记_第1张图片

图1 : ( a) 表面渲染和体积渲染的图示。(b) 竹花机的玩具实例,其中花机顶部有咬合物。与最先进的方法相比,我们的方法可以处理闭塞并获得更好的重建质量。

  • 针对该问题,该文章提出通过引入由SDF引起的密度分布,应用体绘制方法来学习隐式SDF表示。又因简单地将标准体绘制方法应用于与SDF相关的密度将导致重构表面中的可识别偏差,文章提出一种新颖的体绘制方案,以确保在SDF的一阶近似中进行无偏表面重建。

Related Works

  • Classical Multi-view Surface and Volumetric Reconstruction
    • 基于点和表面的重建
      • 基于点和表面的重建方法通过利用图像间光度一致性来估计每个像素的深度图,然后将深度图融合为全局密集点云;
      • 表面重建通常是通过诸如筛选的泊松表面重建之类的方法进行后处理 ;
      • 总结:重建质量很大程度上依赖于对应匹配的质量,对于没有丰富纹理的对象,匹配对应的困难往往会导致重建结果出现严重的伪影和缺失部分;
    • 体积重建
      • 体积重建方法通过从多视图图像中估计体素网格中的占用率和颜色并评估每个体素的颜色一致性来规避显式对应匹配的困难;
      • 总结:由于可实现的体素分辨率有限,这些方法无法实现高精度;
  • Neural Implicit Representation
    • 一些方法通过引入归纳偏差来在深度学习框架中强制实现3D理解。这些归纳偏差可以是显式表示,例如体素网格 ,点云 ,网格和隐式表示。
    • 由于神经网络编码的隐式表示是连续的并且可以实现高空间分辨率,因此最近引起了很多关注。此表示已成功应用于形状表示,新颖的视图合成 和多视图3D重建。

Method

给定一组3D对象的摆姿势图像 { I k } \{I_k\} {Ik},我们的目标是重建其表面 S S S。表面由神经隐式SDF的零级集表示。为了学习神经网络的权重,我们开发了一种新颖的体绘制方法,用于从隐式SDF渲染图像,并最小化渲染图像与输入图像之间的差异。这种体绘制方法可确保NeuS中的稳健优化,以重建复杂结构的对象。

Rendering Procedure

要重建的对象的场景由两个函数表示:

  • f f f : R 3 → R \mathbb{R^3} →\mathbb{R} R3R将空间位置 x ∈ R 3 x ∈\mathbb{R^3} xR3映射到其到对象的有符号距离
  • c : R 3 × S 2 → R 3 c: \mathbb{R^3 × S^2 → R^3} c:R3×S2R3,对与点 x ∈ R 3 \mathbb{x ∈ R^3} xR3和观看方向 v ∈ S 2 \mathbb{v ∈ S^2} vS2相关联的颜色进行编码。

这两个函数都由多层感知器 (MLP) 编码。对象物体的曲面 S S S由其SDF的零级集表示,即,

S = { x ∈ R 3 ∣ f ( x ) = 0 } . ( 1 ) S = \{x ∈ \mathbb{R^3} | f(x) = 0\} . (1) S={xR3f(x)=0}.(1)
为了应用体绘制方法来训练SDF网络,首先引入概率密度函数 ϕ s ( f ( x ) ) \phi_s (f(x)) ϕs(f(x)),称为 S − d e n s i t y S-density Sdensity,其中 f ( x ) , x ∈ R 3 f(x),\mathbb{x ∈ R^3} f(x)xR3是有符号距离3函数, ϕ s ( x ) = s e − s x / ( 1 + e − s x ) 2 \phi_s (x) = se^{− sx}/(1+e^{− sx})^2 ϕs(x)=sesx/(1+esx)2,通常称为逻辑密度分布,是s型函数 ϕ s ( x ) = ( 1 + e − s x ) − 1 \phi_s (x) = (1+e^{− sx})^{-1} ϕs(x)=(1+esx)1的导数,即 ϕ s ( x ) = Φ s ( x ) \phi_s(x) = \varPhi_s(x) ϕs(x)=Φs(x)。原则上, ϕ s ( x ) \phi_s (x) ϕs(x)可以是以0为中心的任何单峰 (即钟形) 密度分布; 这里我们选择逻辑密度分布是为了计算方便。

NeuS的主要思想是,借助S密度场 ϕ x ( f ( x ) ) \phi_x(f(x)) ϕx(f(x)),使用体绘制来训练仅使用2D输入图像作为监督的SDF网络。在基于此监督成功最小化损失函数后,网络编码的SDF的零级集有望代表精确重建的表面 S S S,其引起的 S − d e n s i t y    ϕ s ( f ( x ) ) S-density\ \ \phi_s (f(x)) Sdensity  ϕs(f(x))假定在表面附近的值很高。

Rendering

为了了解神经SDF和RGB的参数,文章使用一种体绘制方案来根据建议的SDF表示渲染图像。给定一个像素,定义从该像素发出的ray: { p ( t ) = o + t v ∣ t ≥ 0 } \{p(t) = o + tv | t ≥ 0\} {p(t)=o+tvt0},o:摄像机的中心,v:ray的单位向量。我们沿着光线积累颜色:
C ( o , v ) = ∫ 0 + ∞ w ( t ) ⋅ c ( p ( t ) , v ) ⋅ d t , ( 2 ) C(o,v)=\int_{0}^{+\infty}{w(t)·c(p(t),v)·dt},(2) C(ov)=0+w(t)c(p(t),v)dt,(2)
其中 C ( o , v ) C(o,v) C(ov)是该像素的输出颜色, w ( t ) w(t) w(t) 是点 p ( t ) p(t) p(t)的权重, c ( p ( t ) , v ) c(p(t),v) c(p(t)v) 是点 p p p沿观看方向v的颜色。

Requirements on weight function

  1. Unbiased(无偏见)。给定相机射线 p ( t ) , w ( t ) p(t),w(t) p(t)w(t) 在表面交点 p ( t ∗ ) p(t^∗) p(t) 处达到局部最大值,即 f ( p ( t ∗ ) ) = 0 f(p(t^∗)) = 0 f(p(t))=0,即,点 p ( t ∗ ) p(t^∗) p(t) S D F ( x ) SDF (x) SDF(x)的zero-level集合上。
  2. Occlusion-aware(遮挡感知)。给定满足 f ( t 0 ) = f ( t 1 ) , w ( t 0 ) > 0 , w ( t 1 ) > 0 f(t_0) = f(t_1),w(t_0)>0,w(t_1)>0 f(t0)=f(t1)w(t0)>0w(t1)>0,且 t 0 < t 1 t_0t0<t1的任意两个深度值t0和t1,则存在 w ( t 0 ) > w ( t 1 ) w(t_0)>w(t_1) w(t0)>w(t1)。也就是说,当两个点具有相同的SDF值 (因此具有相同的SDF诱导的S密度值) 时,更靠近视点的点对最终输出颜色的贡献应大于另一点。

无偏权重函数 w ( t ) w(t) w(t) 保证了相机光线与SDF的零级集的交集对像素颜色的贡献最大。遮挡感知属性可确保当光线顺序通过多个表面时,渲染过程将正确使用最靠近相机的表面的颜色来计算输出颜色。接下来,我们将首先介绍一种直接使用体绘制标准流水线定义权重函数w(t) 的单纯的方法,并在介绍我们新颖的 w ( t ) w(t) w(t) 构造之前解释为什么不适合重建。

Naive solution

为了使权重函数遮挡感知,自然解决方案基于标准体积渲染公式 ,该公式通过以下方式定义了权重函数
w ( t ) = T ( t ) σ ( t ) , ( 3 ) w(t) = T(t)\sigma(t),(3) w(t)=T(t)σ(t),(3)
其中 σ ( t ) \sigma(t) σ(t)是经典体绘制中的所谓体积密度, T ( t ) = e x p ( − ∫ 0 t σ ( u ) d u ) T(t) = exp(− \int_0^t \sigma(u)du) T(t)=exp(0tσ(u)du) 这里表示沿射线的累积透射率。采用标准体积密度制剂 [29], σ ( t ) \sigma(t) σ(t)被设置为等于 S − d e n s i t y S-density Sdensity ” 值,即 σ ( t ) = ϕ s ( f ( p ( t ) ) ) \sigma(t) = \phi_s(f(p(t))) σ(t)=ϕs(f(p(t)))和函数w(t) 的计算公式.3.尽管所得的权重函数是遮挡感知的,但由于它在重建表面中引入了固有误差,因此存在偏差。
Neus学习笔记_第2张图片
图2: 说明 (a) 朴素解的权重偏差,以及 (b) 在我们的解中定义的权重函数,该函数在SDF的一阶近似中是无偏的。

Our solution

提出一种构造无偏权重函数的简单方法,该方法直接使用归一化的 S − d e n s i t y S-density Sdensity作为权重
w ( t ) = ϕ s ( f ( p ( t ) ) ) ∫ 0 + ∞ ϕ s ( f ( p ( u ) ) ) d u w(t) = \frac{\phi_s(f(p(t)))}{\int_0^{+\infty}\phi_s(f(p(u)))du} w(t)=0+ϕs(f(p(u)))duϕs(f(p(t)))
权重函数的这种构造是无偏的,但不是遮挡感知的
为此,现在我们将基于上述直接构造,设计在SDF的一阶近似中既具有遮挡感知又无偏的权重函数w(t)。为了确保权重函数w(t) 的遮挡感知属性,我们仍将遵循体积渲染的基本框架作为Eqn。3.但是,与上述朴素解决方案中的常规处理不同,我们以新的方式从S密度定义了函数w(t)。我们首先定义一个不透明的密度函数 ρ(t),它是标准体绘制中体积密度 σ 的对应物。然后我们通过以下公式计算新的权重函数w(t)
w ( t ) = T ( t ) p ( t ) , w h e r r e     T ( t ) = e x p ( − ∫ 0 t p ( u ) d u ) w(t) = T(t)p(t),wherre \ \ \ T(t) = exp(− \int_0^t p(u)du) w(t)=T(t)p(t)wherre   T(t)=exp(0tp(u)du)

How we derive opaque density p p p

根据几何关系, f ( p ( t ) ) = ∣ cos ⁡ ( θ ) ∣ ⋅ ( t − t ∗ ) f(\mathbf p (t)) = |\cos (\theta)| \cdot\left(t-t^{*}\right) f(p(t))=cos(θ)(tt),其中 f ( p ( t ∗ ) ) = 0 f(\mathbf p (t^*))=0 f(p(t))=0是视角方向与物体表面法向量 n \mathbf n n 的夹角,这里可以看成常量。仍然使用上面的直接方法表示权重 w ( t ) w(t) w(t),有
w ( t ) = ϕ s ( f ( p ( t ) ) ) ∫ − ∞ + ∞ ϕ s ( f ( p ( u ) ) ) d u = ϕ s ( f ( p ( t ) ) ) ∫ − ∞ + ∞ ϕ s ( − ∣ cos ⁡ ( θ ) ∣ ⋅ ( u − t ∗ ) ) d u = ϕ s ( f ( p ( t ) ) ) ∣ cos ⁡ ( θ ) ∣ − 1 ∫ − ∞ + ∞ ϕ s ⋅ ( u − t ∗ ) d u = ∣ cos ⁡ ( θ ) ∣ ϕ s ( f ( p ( t ) ) ) . w(t) = \frac{\phi_s(f(p(t)))}{\int_{-\infty}^{+\infty}\phi_s(f(p(u)))du}\\ =\frac{\phi_s(f(p(t)))}{\int_{-\infty}^{+\infty}\phi_s(-|\cos (\theta)|·(u-t^*))du}\\ = \frac{\phi_s(f(p(t)))}{|\cos (\theta)|^{-1}\int_{-\infty}^{+\infty}\phi_s·(u-t^*)du}\\ =|\cos (\theta)|\phi_s(f(p(t))). w(t)=+ϕs(f(p(u)))duϕs(f(p(t)))=+ϕs(cos(θ)(ut))duϕs(f(p(t)))=cos(θ)1+ϕs(ut)duϕs(f(p(t)))=cos(θ)ϕs(f(p(t))).
体绘制框架内的权重函数由 w ( t ) = T ( t ) p ( t ) w(t) = T(t)p(t) w(t)=T(t)p(t) 给出,其中 T ( t ) = e x p ( − ∫ 0 t p ( u ) d u ) T(t) = exp(− \int_0^t p(u)du) T(t)=exp(0tp(u)du)表示累积透射率。因此,要推导 p ( t ) p(t) p(t),我们有
T ( t ) p ( t ) = ∣ c o s ( θ ) ∣ ϕ x ( f ( p ( t ) ) ) . ( 7 ) T(t)p(t) = | cos(\theta)| \phi_x(f(\mathbf p (t))).(7) T(t)p(t)=cos(θ)ϕx(f(p(t))).(7)
由于 T ( t ) = e x p ( − ∫ 0 t p ( u ) d u ) T(t) = exp(− \int_0^t p(u)du) T(t)=exp(0tp(u)du),很容易验证 T ( t ) p ( t ) = − d T d t ( t ) T(t)p(t) = − \frac{dT}{dt}(t) T(t)p(t)=dtdT(t)。此外, ∣ cos ⁡ ( θ ) ∣ ϕ s ( f ( p ( t ) ) ) = − d Φ s d t ( f ( p ( t ) ) ) |\cos (\theta)|\phi_s(f(p(t)))=− \frac{d\varPhi_s}{dt}(f(p(t))) cos(θ)ϕs(f(p(t)))=dtdΦs(f(p(t))).随之而来的 d T d t ( t ) = d Φ s d t ( f ( p ( t ) ) ) \frac{dT}{dt}(t)=\frac{d\varPhi_s}{dt}(f(p(t))) dtdT(t)=dtdΦs(f(p(t))),整合上式:
T ( t ) = Φ s ( f ( p ( t ) ) ) . ( 8 ) T(t)=\varPhi_s(f(p(t))).(8) T(t)=Φs(f(p(t))).(8)
取对数,然后区分两边:
∫ − ∞ t p ( u ) d u = − l n ( Φ s ( f ( p ( t ) ) ) ) ⇒ p ( t ) = − d Φ s d t ( f ( p ( t ) ) ) Φ s ( f ( p ( t ) ) ) . ( 9 ) \int_{-\infty}^tp(u)du = -ln(\varPhi_s(f(p(t))))\\ \Rightarrow p(t) = \frac{ −\frac{d\varPhi_s}{dt}(f(p(t)))}{\varPhi_s(f(p(t)))}.(9) tp(u)du=ln(Φs(f(p(t))))p(t)=Φs(f(p(t)))dtdΦs(f(p(t))).(9)
上式是单个surface的情况,当光线在两个surface之间时会变成负,把它拓展到多surface的情况需要在这时将之设为0。
p ( t ) = m a x ( − d Φ s d t ( f ( p ( t ) ) ) Φ s ( f ( p ( t ) ) ) , 0 ) . ( 10 ) p(t) = max( \frac{ −\frac{d\varPhi_s}{dt}(f(p(t)))}{\varPhi_s(f(p(t)))},0).(10) p(t)=max(Φs(f(p(t)))dtdΦs(f(p(t))),0).(10)
Neus学习笔记_第3张图片
图3: 多表面相交情况下的重量分布图示

Discretization

为了获得不透明度和权重函数的离散对应物,我们采用与NeRF [29] 中使用的近似方案,该方案对n个点进行采样 { p i = o + t i v ∣ i = 1 , . . . , n , t i < t i + 1 } \{pi = o + t_iv | i = 1,...,n,t_i{pi=o+tivi=1...nti<ti+1} 计算射线的近似像素颜色为
C ^ ( r ) = ∑ i = 1 N α i T i c i . ( 11 ) \hat{C}\left( r \right) =\sum_{i=1}^N{\alpha _iT_ic_i}.(11) C^(r)=i=1NαiTici.(11)
T i = ∏ j = 1 i − 1 ( 1 − α j ) T_i=\prod_{j=1}^{i-1}(1-\alpha_j) Ti=j=1i1(1αj)是离散的累积透射比, α = 1 − e x p ( − ∫ t i t i + 1 p ( t ) d t ) \alpha=1-exp(-\int_{t_i}^{t_{i+1}}p(t)dt) α=1exp(titi+1p(t)dt)是离散不透明度值;
α i = m a x ( Φ s ( f ( p ( t i ) ) ) − Φ s ( f ( p ( t t + 1 ) ) ) Φ s ( f ( p ( t ) ) ) , 0 ) . ( 13 ) \alpha_i = max(\frac{\varPhi_s(f(p(t_i)))-\varPhi_s(f(p(t_{t+1})))}{\varPhi_s(f(p(t)))},0).(13) αi=max(Φs(f(p(t)))Φs(f(p(ti)))Φs(f(p(tt+1))),0).(13)

Training

分为有mask和无mask两种情况。为了优化网络和标准差倒数s ss,随机采样一个batch的像素点和对应的光线 P = { C k , M k , o k , v k } P=\left\{C_{k}, M_{k}, \mathbf{o}{k}, \mathbf{v}{k}\right\} P={Ck,Mk,ok,vk}是像素点颜色, M k ∈ { 0 , 1 } M_k \in \{0,1\} Mk{0,1}指是否存在mask。batch大小设为m,一条光线上的采样点数设为n。
定义损失函数:
L = L c o l o r + λ L r e g + β L m a s k L=L_{color} +\lambda L_{reg} +\beta L_{mask} L=Lcolor+λLreg+βLmask

  • L c o l o r = 1 m ∑ k R ( C ^ k , C k ) L_{color}=\frac{1}{m}\sum_k\mathbf R(\hat{C}_k,C_k) Lcolor=m1kR(C^k,Ck).类似IDR,R 采用 L1 loss;
  • L r e g = 1 n m ∑ k , i ( ∣ ∇ f ( P ^ k , i ) ∣ − 1 ) 2 L_{reg}= \frac{1}{nm}\sum_{k,i}(|\nabla f(\hat{P}_{k,i})|-1)^2 Lreg=nm1k,i(∣∇f(P^k,i)1)2;
  • L m a s k = B C E ( M k , O ^ k ) L_{mask} = BCE(M_{k}, \mathbf{\hat{O}}{k}) Lmask=BCE(Mk,O^k), O ^ k = ∑ i = 1 n T k , i α k , i \mathbf{\hat{O}}{k} =\sum_{i=1}^{n}T_{k,i}\alpha_{k,i} O^k=i=1nTk,iαk,i是采样点权重的和;

Hierarchical Sampling

不同与NeRF同时优化 coarse 和 fine 网络,这里只维持一个网络,coarse阶段采样的概率是基于 S − d e n s i t y   ϕ s ( f ( x ) ) S-density\ \phi_s(f(x)) Sdensity ϕs(f(x)) 和一个大的固定的标准差计算得到,而fine阶段采样的概率基于 ϕ s ( f ( x ) ) \phi_s(f(x)) ϕs(f(x))和学得的标准差。

效果对比

Neus学习笔记_第4张图片

你可能感兴趣的:(Paper,NeRF,学习,人工智能,深度学习)