• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

NeRF必读NeuS--三维重建的milestone以和脑补的作者脑回路

武飞扬头像
Rick0xFFFFFF
帮助1

前言

NeRF从2020年发展至今,仅仅三年时间,而Follow的工作已呈井喷之势,相信在不久的将来,NeRF会一举重塑三维重建这个业界,甚至重建我们的四维世界(开头先吹一波)。NeRF的发展时间虽短,有几篇工作却在我研究的领域开始呈现万精油趋势:

  • PixelNeRF----泛化法宝
  • MipNeRF----近远景重建
  • NeRF in the wild----光线变换下的背景重建
  • NeuS----用NeRF重建Surface
  • Instant-NGP----多尺度Hash编码实现高效渲染

Why NeuS?

基于二维图片的三维重建是计算机视觉中最核心的任务之一,传统方法的发展目前已经收敛于某种上限。从视觉中提取出物体的三维信息并将其直接用于三维重建是一项富有挑战但非常有实际意义的工作,得益于NeRF惊人的新视角合成效果,作者在NeRF的基础上提出了重建物体Surface的模型并在数据集上取得了理想的效果。NeuS打开了三维重建新方法的大门,此后有很多重量级工作都在NeuS的基础上展开,相信Follow的工作还会源源不断。
学新通

Method

输入:

给定一个序列的带位姿的图片 { I k } \{\mathcal{I}_k\} {Ik},这些图片中包含了同一个物体 O \mathcal{O} O(这也是后面论文可以改进的点)

输出:

对物体 O \mathcal{O} O surface的重建结果

Surface Representation

原文叫做Scene Representation, 我的拙见是Surface Representation更直观些:
S = { x ∈ R 3 ∣ f ( x ) = 0 } \mathcal{S}=\{\mathbf{x} \in \mathbb{R}^3 | f(\mathbf{x})=0\} S={xR3f(x)=0}
这里借用了level set的概念, f ( x ) f(\mathbf{x}) f(x)是仅在被观测物体表面上 f ( x ) = 0 f(\mathbf{x})=0 f(x)=0的函数,该函数可以用一个神经网络表征, 文中将其命名为SDF Network那么问题来了,如何将这个SDF Network函数和NeRF建立关联,从而能够利用NeRF的损失函数优化surface的表征 SDF Nertwork呢?这一点是本文最核心的创新点


脑补版本作者脑回路开始

现在,我们来假想一下作者的脑回路

  • 观察经典NeRF的Volume Rendering Formula:
    C ^ ( o , v ) = ∫ t n t f T ( t ) σ ( p ( t ) ) c ( p ( t ) , v ) d t where  p ( t ) = o t v \mathbf{\hat{C}(\mathbf{o,v})}=\int^{t_f}_{t_n}T(t)\sigma(p(t))\mathbf{c}(p(t),\mathbf{v})dt \\ \text{where} \space p(t)=\mathbf{o} t\mathbf{v} C^(o,v)=tntfT(t)σ(p(t))c(p(t),v)dtwhere p(t)=o tv
  • 看来看去,公式里面只有 σ ( p ( t ) ) \sigma(p(t)) σ(p(t))可以和 f ( x ) f(\mathbf{x}) f(x)建立关联,这也符合大多数人的直觉。
  • 问:怎样才能找到一个映射满足 f ( t ) → σ ^ ( t ) f(t)\rightarrow \hat{\sigma}(t) f(t)σ^(t),并且 σ ^ ( t ) \hat{\sigma}(t) σ^(t)还是能满足经典NeRF中 σ ( t ) \sigma(t) σ(t)的特性使得该神经网络也能描述空间的体密度分布呢?
  • 答:要使体密度描述准确,至少要满足下界: 在surface表面或者附近体密度最大(即当 f ( x ) = 0 f(\mathbf{x})=0 f(x)=0时, σ ( x ) \sigma(\mathbf{x}) σ(x)同时也达到最大值,对应文中的性质Unbiased)
  • 问:什么函数在x=0时,值最大,且在x<0时递增,在x>0时递减呢:Sigmoid的导数,logistic density distribution就还不错,先上图:
    学新通
    现在我们有了体密度函数的表达式
    ϕ s ( u ) = s e − s u / ( 1 e − s u ) u = f ( x ) \phi_s(u)=se^{-su}/(1 e^{-su})\\ u=f(x) ϕs(u)=sesu/(1 esu)u=f(x)
    一顿操作猛如虎,现在将得到的这个体密度表达 ϕ s ( f ( x ) ) \phi_s(f(x)) ϕs(f(x))命名为S-denstiy,将 S − d e n s i t y S-density Sdensity带入Rendering Formula得:
    C ^ ( o , v ) = ∫ t n t f T ( t ) ϕ s ( f ( p ( t ) ) ) c ( p ( t ) , v ) d t where  p ( t ) = o t v \mathbf{\hat{C}(\mathbf{o,v})}=\int^{t_f}_{t_n}T(t)\phi_s(f(p(t)))\mathbf{c}(p(t),\mathbf{v})dt \\ \text{where} \space p(t)=\mathbf{o} t\mathbf{v} C^(o,v)=tntfT(t)ϕs(f(p(t)))c(p(t),v)dtwhere p(t)=o tv
    ω ( t ) = T ( t ) ϕ s ( f ( p ( t ) ) ) \omega(t)=T(t)\phi_s(f(p(t))) ω(t)=T(t)ϕs(f(p(t))),就得到了原文中Naive的solution, 为啥时Naive呢,很多读者都懵了,不是公式都推完了吗?
    因为我们犯了一个致命错误:我们需要做到Unbiased的变量并非 σ ( t ) \sigma(t) σ(t),而是 ω ( t ) = T ( t ) σ ( t ) \omega(t)=T(t)\sigma(t) ω(t)=T(t)σ(t)!,前面的推导我们是不考虑Occlusion-Awared的,也就是文中 ω ( t ) \omega(t) ω(t)函数需要满足的第二个性质,体密度相同,但距离相机的距离不同时,分配给该点像素的权重是应该不一样的,否则会有歧义性。一句话:前面对Unbiased的推导没考虑 T ( t ) T(t) T(t)的影响。那么实际上 T ( t ) T(t) T(t)的加入会对Naive的分布产生影响吗,作者给出了图,确实产生了影响!Naive solution虽然带有Occlusion Awared,但是 ω ( t ) \omega(t) ω(t)不再是unbiased的了,如左下图所示, ω ( t ) \omega(t) ω(t)的极点并非surface所在平面,更偏左一些:
    学新通
  • 问:如何规避这个问题呢?我们能构造一个 ω ( t ) \omega(t) ω(t)同时满足Unbiased 和Occulusion-Aware两个性质吗?
  • 答:想个办法让 ω ( t ) = \omega(t)= ω(t)=logistic density distribution呗~
  • 问:那Occlusion-Aware呢
  • 答:直白的说就是 T ( t ) σ ( t ) = T(t)\sigma(t)= T(t)σ(t)=logistic density distribution, T ( t ) T(t) T(t)就是Occlusion Aware了。 好家伙,这样就能做到Unbiased的同时,又能够描述Occlusion-Aware了。但是Naived logistic density distribution是不满足求和为1的,所以呢作者做了一个归一化:
    ω ( t ) = ϕ s ( f ( p ( t ) ) ) ∫ 0 ∞ ϕ s ( f ( p ( t ) ) ) d u \omega(t)=\frac{\phi_s(f(\mathbf{p}(t)))}{\int^{ \infty}_0 \phi_s(f(\mathbf{p}(t)))du} ω(t)=0 ϕs(f(p(t)))duϕs(f(p(t)))

ω ( t ) = T ( t ) ρ ( t ) \omega(t)=T(t)\rho(t) ω(t)=T(t)ρ(t),且 T ( t ) = exp ⁡ ( − ∫ 0 t ρ ( u ) d u ) T(t)=\exp(-\int^t_0\rho(u)du) T(t)=exp(0tρ(u)du),直接根据这个公式求解出 T ( t ) T(t) T(t) ρ ( t ) \rho(t) ρ(t)即可,至此作者完成了NeRF与surface reconstruction的完美结合!


脑补版本作者脑回路完毕

总结

作者为了使得 ω ( t ) \omega(t) ω(t)无偏,将logistic density distribution分解成了透射率 T ( t ) T(t) T(t)和体密度 ρ ( t ) \rho(t) ρ(t)

ρ ( t ) \rho(t) ρ(t)的推导以及离散化

本节讲述作者如何将 ω ( t ) \omega(t) ω(t)分解为 T ( t ) T(t) T(t) ρ ( t ) \rho(t) ρ(t)。首先给定 ω ( t ) ,   T ( t ) ,   ρ ( t ) \omega(t),\space T(t),\space \rho (t) ω(t), T(t), ρ(t)关系如下:
ω ( t ) = T ( t ) ρ ( t ) ,  where  T ( t ) = exp ⁡ ( − ∫ 0 t ρ ( u ) d u ) \omega(t)=T(t)\rho (t), \space\text{where}\space T(t)= \exp{(-\int^t_0 \rho(u)du)} ω(t)=T(t)ρ(t), where T(t)=exp(0tρ(u)du)

上文中作者给出了 ω ( t ) \omega(t) ω(t)的最终形式:
ω ( t ) = ϕ s ( f ( p ( t ) ) ) ∫ 0 ∞ ϕ s ( f ( p ( t ) ) ) d u \omega(t)=\frac{\phi_s(f(\mathbf{p}(t)))}{\int^{ \infty}_0 \phi_s(f(\mathbf{p}(t)))du} ω(t)=0 ϕs(f(p(t)))duϕs(f(p(t)))

  • 其中的 f ( p ( t ) ) f(\mathbf{p}(t)) f(p(t))SDF Function,作者首先按照一般到特殊的思想推导出 T ( t ) , ρ ( t ) T(t), \rho(t) T(t),ρ(t)的表达,推导流程如下:
  1. 设所求面为单面,面表达式为: f ( p ( t ) ) = − ∣ cos ⁡ ( θ ) ∣ ⋅ ( t − t ∗ ) f(\mathbf{p}(t))=-|\cos(\theta)|\cdot (t-t^*) f(p(t))=cos(θ)(tt)
  2. 令面在无限远处,得 ω ( t ) = lim ⁡ t ∗ → ∞ ϕ s ( f ( p ( t ) ) ) ∫ 0 ∞ f ( p ( u ) ) d u \omega(t)=\lim\limits_{t^*\to \infty}\frac{\phi_s(f(\mathbf{p}(t)))}{\int^{ \infty}_{0}f(\mathbf{p}(u))du} ω(t)=t lim0 f(p(u))duϕs(f(p(t))), 浅浅地推导一下:
    学新通
    最后一步分母是一个负无穷到正无穷的分布函数积分,结果为1,被消掉了(至此猜到了这个分母表达式是被作者设计出来的),故:
    T ( t ) ρ ( t ) = ∣ cos ⁡ ( θ ) ∣ ϕ s ( f ( p ( t ) ) ) T(t)\rho(t)=|\cos(\theta)|\phi_s(f(\mathbf{p}(t))) T(t)ρ(t)=cos(θ)ϕs(f(p(t)))
    因为
    T ( t ) = exp ⁡ ( − ∫ 0 t ρ ( u ) d u ) ,  and − d T d t ( t ) = T ( t ) ρ ( t ) T ( t ) ρ ( t ) = ω ( t ) = ∣ cos ⁡ ( θ ) ∣ ϕ s ( f ( p ( t ) ) ) = d Φ s ( t ) d t ( f ( p ( t ) ) ) T(t)=\exp{(-\int^t_0\rho(u)du)}, \space \text{and} -\frac{dT}{dt}(t)=T(t)\rho(t)\\ T(t)\rho(t)=\omega(t)=|\cos(\theta)|\phi_s(f(\mathbf{p}(t)))=\frac{d\Phi_s(t)}{dt}(f(\mathbf{p}(t))) T(t)=exp(0tρ(u)du), anddtdT(t)=T(t)ρ(t)T(t)ρ(t)=ω(t)=cos(θ)ϕs(f(p(t)))=dtdΦs(t)(f(p(t)))
    注意下式右侧分子是大写的 Φ s \Phi_s Φs, 不然推不出来。。我当时就认错了。。。
    所以得出:
    − d T d t ( t ) = d Φ s ( t ) d t ( f ( p ( t ) ) ) -\frac{dT}{dt}(t)=\frac{d\Phi_s(t)}{dt}(f(\mathbf{p}(t))) dtdT(t)=dtdΦs(t)(f(p(t)))
    两边对 d t dt dt积分得: T ( t ) = Φ s ( f ( p ( t ) ) ) T(t)=\Phi_s(f(\mathbf{p}(t))) T(t)=Φs(f(p(t))), 对公式两侧求log并求导:
    − ∫ 0 t ρ ( u ) d u = ln ⁡ ( Φ s ( f ( p ( t ) ) ) ) , → ρ ( t ) = − d Φ s ( t ) d t ( f ( p ( t ) ) ) Φ s ( f ( p ( t ) ) ) -\int^t_0\rho(u)du=\ln(\Phi_s(f(\mathbf{p}(t)))),\\ \rightarrow\rho(t)=\frac{-\frac{d\Phi_s(t)}{dt}(f(\mathbf{p}(t))) }{\Phi_s(f(\mathbf{p}(t)))} 0tρ(u)du=ln(Φs(f(p(t)))),ρ(t)=Φs(f(p(t)))dtdΦs(t)(f(p(t)))
    但上述公式有个问题,当随着 t t t的增大,越过临界点 t ∗ t^* t之前,函数 − d Φ s ( t ) d t ( f ( p ( t ) ) ) -\frac{d\Phi_s(t)}{dt}(f(\mathbf{p}(t))) dtdΦs(t)(f(p(t))) 为负值,而 ρ ( t ) ≥ 0 \rho(t)\ge 0 ρ(t)0。为避免这种情况,将公式修正为:
    ρ ( t ) = max ⁡ ( − d Φ s ( t ) d t ( f ( p ( t ) ) ) Φ s ( f ( p ( t ) ) ) , 0 ) \rho(t)=\max(\frac{-\frac{d\Phi_s(t)}{dt}(f(\mathbf{p}(t))) }{\Phi_s(f(\mathbf{p}(t)))},0) ρ(t)=max(Φs(f(p(t)))dtdΦs(t)(f(p(t))),0)
    至此,公式的最关键部分推导完毕
  • 离散化后主要包含三个公式:
    C ^ = ∑ i = 1 n T i α i c i T i = ∏ j = 1 i − 1 ( 1 − α j ) α i = max ⁡ ( Φ s ( f ( p ( t i ) ) ) − Φ s ( f ( p ( t i 1 ) ) ) Φ s ( f ( p ( t i ) ) ) , 0 ) \hat{C}=\sum^n_{i=1}T_i \alpha_i c_i\\ T_i=\prod^{i-1}_{j=1}(1-\alpha_j)\\ \alpha_i=\max(\frac{\Phi_s(f(\mathbf{p}(t_i)))-\Phi_s(f(\mathbf{p}(t_{i 1})))}{\Phi_s(f(\mathbf{p}(t_i)))},0) C^=i=1nTiαiciTi=j=1i1(1αj)αi=max(Φs(f(p(ti)))Φs(f(p(ti)))Φs(f(p(ti 1))),0)
    其中 α i \alpha_i αi就是 ρ ( t ) \rho(t) ρ(t)的离散化。

训练

NeuS Loss分为三部分,表达式如下:
L = L c o l o r λ L r e g β L m a s k L c o l o r = 1 m ∑ R ( C ^ k , C k ) L r e g = 1 m n ∑ k , i ( ∥ ∇ f ( p ^ k , i ( t ) ) ∥ 2 − 1 ) 2 L m a s k = B C E ( M k , O ^ k ) \mathcal{L}=\mathcal{L}_{color} \lambda\mathcal{L}_{reg} \beta\mathcal{L}_{mask}\\ \mathcal{L}_{color}=\frac{1}{m}\sum\mathcal{R}(\hat{C}_k,C_k)\\ \mathcal{L}_{reg}=\frac{1}{mn}\sum_{k,i}(\Vert\nabla f(\mathbf{\hat{p}}_{k,i}(t)) \Vert_2-1)^2\\ \mathcal{L}_{mask}=BCE(M_k,\hat{O}_k) L=Lcolor λLreg βLmaskLcolor=m1R(C^k,Ck)Lreg=mn1k,i(∥∇f(p^k,i(t))21)2Lmask=BCE(Mk,O^k)
其中第二项可以理解为对表面的法向量添加约束,要求表面法向量的模为1,这样应该可以稳定训练,具体的文章还没有看,这个Loss挺常用的,有时间也解析一下。

厚颜(后言)无耻

  1. 文章不足之处欢迎指正,各位大佬们一键三连多多支持,paper 百发百中!
  2. 要是有什么想看的文章欢迎私信我哟~

参考文献:
Wang, Peng, et al. “Neus: Learning neural implicit surfaces by volume rendering for multi-view reconstruction.” arXiv preprint arXiv:2106.10689 (2021).

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgfkfig
系列文章
更多 icon
同类精品
更多 icon
继续加载