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

这篇具有很好参考价值的文章主要介绍了NeRF必读:NeuS--三维重建的milestone以及脑补的作者脑回路。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

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的工作还会源源不断。
NeRF必读:NeuS--三维重建的milestone以及脑补的作者脑回路

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就还不错,先上图:
    NeRF必读:NeuS--三维重建的milestone以及脑补的作者脑回路
    现在我们有了体密度函数的表达式
    ϕ 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所在平面,更偏左一些:
    NeRF必读:NeuS--三维重建的milestone以及脑补的作者脑回路
  • 问:如何规避这个问题呢?我们能构造一个 ω ( 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))), 浅浅地推导一下:
    NeRF必读:NeuS--三维重建的milestone以及脑补的作者脑回路
    最后一步分母是一个负无穷到正无穷的分布函数积分,结果为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).文章来源地址https://www.toymoban.com/news/detail-493671.html

到了这里,关于NeRF必读:NeuS--三维重建的milestone以及脑补的作者脑回路的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【3D生成与重建】SSDNeRF:单阶段Diffusion NeRF的三维生成和重建

    题目 :Single-Stage Diffusion NeRF: A Unified Approach to 3D Generation and Reconstruction 论文 :https://arxiv.org/pdf/2304.06714.pdf 任务 :无条件3D生成(如从噪音中,生成不同的车等)、单视图3D生成 机构 :Hansheng Chen,1,* Jiatao Gu,2 Anpei Chen, 同济、苹果、加利福尼亚大学 代码 :https://github.com/Lakon

    2024年02月02日
    浏览(46)
  • 神经辐射场(NERF)模型:一个令人惊叹的三维场景重建方法

      在计算机图形学、计算机视觉和增强现实等领域,三维场景重建一直是一个热门话题。近年来,神经网络模型的出现已经彻底改变了这个领域,而其中最引人注目的就是 NERF(神经辐射场)模型。在这篇文章中,我们将深入探讨这个令人惊叹的三维场景重建方法。     简单

    2024年02月07日
    浏览(41)
  • 三维重建方法3D gaussian splatting与NeRF的区别和异同

    最近学习了一些三维重建相关的内容,目前比较主要的重建流派就是3DGS以及NeRF,NeRF作为2020年发布的文章轰动一时,影响深远,有很多NeRF based的相关工作在这些年涌现。3DGS作为2023年的new talk of the town,其在保证合成质量的情况下能够以数倍乃至数十倍的速度碾压许多NeRF b

    2024年02月01日
    浏览(40)
  • 基于神经辐射场(Neural Radiance Fileds, NeRF)的三维重建- 简介

       Nerf(neural Radiance Fileds) 为2020年ICCV上提出的一个基于隐式表达的三维重建方法,使用2D的 Posed Imageds 来生成(表达)复杂的三维场景。现在越来越多的研究人员开始关注这个潜力巨大的领域,也有方方面面关于 Nerf 的工作在不断被提出。   Nerf 为输入为稀疏的、多角

    2024年02月09日
    浏览(46)
  • 基于3D Gaussian Splatting与NeRF实现三维重建(使用IPhone创建数据集)

    本项目参考YouTube中博主( Spectacular AI ) 详细可了解:SpectacularAI官网 本文项目构建在Windows与Ubuntu中,二者在项目构建中并未有实质性的差距,可相互参考环境与参数的配置,本文即在Windows11(已配置好CUDA)中进行。 Windows下配置CUDA的方法可参考 :《TensorFlow-GPU-2.4.1与CUDA安

    2024年01月17日
    浏览(48)
  • 【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeRF(LLFF格式)数据集

    提示:最近开始在【三维重建】方面进行研究,记录相关知识点,分享学习中遇到的问题已经解决的方法。 LLFF格式是NeRF网络模型训练使用的数据集格式之一,本文基于COLMAP软件展示从LLFF格式数据集的制作到开始模型训练的完整流程。NeRF(神经辐射场)通过输入同一场景不同视角下

    2024年02月10日
    浏览(51)
  • 数字人解决方案——RAD-NeRF真人视频的三维重建数字人源码与训练方法

    1.真人视频三维重建数字人源码是基于NeRF改进的RAD-NeRF, NeRF(Neural Radiance Fields) 是最早在2020年ECCV会议上的Best Paper,其将隐式表达推上了一个新的高度,仅用 2D 的 posed images 作为监督,即可表示复杂的三维场景。 NeRF其输入稀疏的多角度带pose的图像训练得到一个神经辐射场

    2024年02月06日
    浏览(45)
  • NeRF必读五:NeRF in the wild

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

    2023年04月23日
    浏览(85)
  • 体渲染光线行进算法【NeRF必读】

    为了积分由于内散射而沿射线产生的入射光,我们将射线穿过的体块分解为小体块元素,并将每个小体块元素对整个体块对象的贡献结合起来,有点像我们在 2D 编辑软件(例如 Photoshop)中将带有遮罩或 Alpha 通道(通常代表对象的不透明度)的图像彼此堆叠在一起。 这就是我

    2024年02月15日
    浏览(48)
  • NeRF必读:Instant-NGP----RTX3090单卡就能玩转NeRF

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

    2024年02月09日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包