简介
主页:https://lingjie0206.github.io/papers/NeuS/index.htm
如图(a)顶部所示,由于孔洞引起的激进的深度变化,神经网络会错误地预测出前表面附近的点为蓝色,而无法找到远后的蓝色表面。图 (b)中的实际测试实例表明,对于深度突变的边缘附近,IDR无法正确重构表面
在IDR中使用的表面渲染方法只考虑每条光线的单一表面交点。因此,梯度只存在于这一个点上,这对于有效的反向传播来说过于局部,当图像上的深度发生突变时,优化会卡在一个较差的局部最小值,同时还需要物体掩模作为收敛到有效曲面的监督
用符号距离函数(SDF)的零水平集来表示一个表面,并开发了一种新的体绘制方法来训练神经SDF表示
传统的体绘制方法会对表面重建造成固有的几何误差(即偏差),因此论文提出了一种新的公式,该公式在一阶近似中不存在偏差,因此即使没有掩模的监督,也可以实现更精确的表面重建
实现流程
Scene representation
NeuS将待重建物体的场景用两个函数表示
f : R3 → R:将空间位置x∈R3映射到物体的符号距离
c : R3 × S2 → R3:对点x∈R3和观察方向v∈S2对应的颜色进行编码
以上两个函数都由多层感知器(MLP)编码,物体的曲面S由其SDF的零水平集表示
为了应用体积绘制方法训练SDF网络,首先引入了一个概率密度函数Φs(f (x)),称为s -density,其中f (x), x∈R3,是有符号距离函数,Φs(x) = se(−sx) / ( 1 + e(−sx) )2,通常称为logistic密度分布,是Sigmoid函数的导数Φs(x) = (1 + e(−sx) )−1,即Φs(x) = Φ’s(x)。原理上Φs(x)可以是任意以0为中心的单峰(即钟形)密度分布;为了便于计算,这里选择了logistic密度分布。注意Φs(x)的标准差为1/s,这也是一个可训练的参数,即随着网络训练的收敛,1/s趋于零。
NeuS的主要思想是借助Φs(f (x))密度场,以2D输入图像作为监督,利用体绘制技术训练SDF网络
基于此监督成功最小化损失函数后,网络编码的SDF的零水平集有望表示一个精确的重构曲面S,其诱导S密度Φs(f (x))在曲面附近具有显著的高值
Rendering
从该像素发出的射线为{p(t) = o + tv|t≥0},其中o为摄像机的中心,v为射线的单位方向向量。沿着光线积累颜色
C(o, v)是该像素的输出颜色,w(t)是点p(t)的权值,C(p(t), v)是点p沿观看方向v的颜色
Requirements on weight function
关键在输出颜色和SDF之间建立适当的联系,根据场景的SDF f推导出光线上合适的权重函数w(t)
权重函数w(t)的要求:
- Unbiased:给定一个相机光线p(t), w(t)在表面交点p(t∗)处达到局部最大值,也就是说f (p(t∗))= 0,也就是说p(t∗)在SDF (x)的零水平集上
- Occlusion-aware:给定任意两个深度值 t 0 t_0 t0 和 t 1 t_1 t1 满足f ( t 0 t_0 t0) = f ( t 1 t_1 t1), w( t 0 t_0 t0) > 0, w( t 1 t_1 t1) > 0,和 t 0 t_0 t0 < t 1 t_1 t1,则有w( t 0 t_0 t0) > w( t 1 t_1 t1)。也就是说,当两个点的SDF值相同(即SDF诱导的s密度值相同)时,离视点越近的点对最终输出颜色的贡献越大
无偏权函数w(t)保证了相机光线与SDF的零水平集的交集对像素颜色的贡献最大。
遮挡感知属性确保当光线连续通过多个表面时,渲染过程将正确使用最接近相机的表面的颜色来计算输出颜色
原始NeRF权重函数
σ(t)为经典体绘制中所谓的体积密度
T(t)沿射线累积透过率
为采用标准体积密度公式,设σ(t)等于s -density,即σ(t) = Φs(f (p(t))),权重函数 w(t) 由公式3计算得到
最终的权重函数是遮挡感知的,但它是有偏差的,因为它引入了重建表面的固有误差
权重函数w(t)在光线到达表面点p(t∗)之前的某一点上达到局部最大值,满足f (p(t∗))= 0
论文方法
首先介绍了一种简单的方法来构造一个无偏权函数,它直接使用归一化的 s-density 作为权值
如果射线穿透两个表面,则SDF函数f将在射线上有两个零点,这导致权重函数w(t)上出现两个峰值,得到的权重函数将在不考虑遮挡的情况下均匀混合两个表面的颜色。
为此,需要在SDF的一阶近似中具有遮挡感知和无偏的权重函数w(t)。
为了保证权重函数w(t)的遮挡感知特性,仍然遵循体积渲染的基本框架(公式3)。用一种新的方式从 s-density 定义函数w(t)。
首先定义了一个不透明的密度函数 ρ(t),它与标准体积渲染中的体积密度 σ 对应。然后我们计算新的权函数 w(t)
推导不透明密度ρ
首先考虑一个简单的情况,即只有一个表面相交,而这个表面只是一个平面。由于在此假设下公式 4确实满足上述要求,因此利用体绘制框架推导出与公式4权重定义相对应的不透明密度ρ。然后将这种不透明密度推广到多面相交的一般情况。
具体地说,在单平面相交的简单情况下,很容易看到有符号距离函数 f (p(t)) 为 −| cos(θ)|·(t−t*),其中 f (p(t*)) = 0, θ 是视图方向 v 和外表面法向量 n 之间的夹角。因为表面是局部假设的,| cos(θ)| 是一个常数。从公式4得出
在体积呈现框架内的权重函数由 w(t) = t (t)ρ(t) 给出,其中 T (t) 表示累积透过率。
根据 T (t) ,因此很容易验证
T
(
t
)
ρ
(
t
)
=
−
d
T
d
T
(
t
)
T(t)ρ(t) = −\frac{dT}{dT(t)}
T(t)ρ(t)=−dT(t)dT ,进一步注意
∣
c
o
s
(
θ
)
∣
Φ
s
(
f
(
p
(
t
)
)
)
=
−
d
Φ
s
d
t
(
f
(
p
(
t
)
)
| cos(θ)|Φ~s~(f (p(t))) = − \frac{dΦ~s~}{dt (f (p(t))}
∣cos(θ)∣Φ s (f(p(t)))=−dt(f(p(t))dΦ s 。得到
d
T
d
T
(
t
)
=
d
Φ
s
d
T
(
f
(
p
(
t
)
)
)
\frac{dT}{dT (t)} = \frac{dΦ_s}{dT (f (p(t)))}
dT(t)dT=dT(f(p(t)))dΦs。对方程两边积分得到
取对数,然后两边求导,得到
现在将不透明密度推广到沿光线 p(t) 有多个表面交点的一般情况。在这种情况下, − d Φ s d t ∗ ( f ( p ( t ) ) ) −\frac{dΦs}{dt * (f (p(t)))} −dt∗(f(p(t)))dΦs 在SDF值增加的射线段上变为负的。因此,要确保ρ的值始终是非负的。这在一般情况下给出了下面的不透明密度函数 ρ(t)。
下面的定理说明在一般情况下(即包括单面交和多面交),公式10和公式5定义的权函数在SDF的一阶近似中是无偏的
定理:
假设一个光滑曲面 S 由有符号距离函数 f (x) = 0的零水平集定义,一条光线 p(t) = o + tv从外到内进入曲面S,交点是
p
(
t
∗
)
p(t^*)
p(t∗),即
f
(
p
(
t
∗
)
)
=
0
f (p(t^*)) = 0
f(p(t∗))=0,存在一个区间 [tl, tr] ,使t∗ ∈ [tl, tr] 和 f (p(t)) 在 [tl, tr] 中单调递减。假设在这个局部区间 [tl, tr] 中,曲面可以切向逼近一个足够小的平面小块,即:∇f 被认为是固定的。然后,在[tl, tr] 中公式10和公式5计算的权重函数w(t)在t∗时达到最大值
离散化
为了获得不透明度函数和权函数的离散对应,采用与NeRF相同的近似方案,该方案采样n个点{pi = o + tiv|i = 1,…, n, ti < ti+1}沿射线计算近似像素颜色的射线为
其中Ti是定义的离散累积透射率
αi为离散不透明度值
进一步表示为
损失函数
在每一次迭代中,从一幅图像中随机抽取世界空间
P
=
C
k
,
M
k
,
o
k
,
v
k
P = {C_k, M_k, o_k, v_k}
P=Ck,Mk,ok,vk中的一批像素及其对应的射线,其中Ck是其像素颜色,Mk∈{0,1}是其可选掩码值。假设点采样量为n,批处理量为m,损失函数
颜色损失为
在采样点上加入 Eikonal 项来正则 fθ 的 SDF
可选掩码损失 Lmask
是沿相机射线的权重之和,BCE是二元交叉熵损失
采样
与同时优化粗网络和细网络的NeRF不同,只维持一个网络,其中粗抽样的概率是基于固定标准差的 s-density Φs(f (x)) 计算的,而细抽样的概率是基于已学习的 s 的 Φs(f (x)) 计算的
效果