论文带读——3D Neural Field Generation using Triplane Diffusion

2023-11-11

论文带读——3D Neural Field Generation using Triplane Diffusion

————YssssMikey

Tips: 我会基本上几天更新一篇论文引读,一般是AIGC模型——3D+Diffusion方向每日在Arxiv上新发布的最新Paper来导读,喜欢支持的伙伴可以支持关注点赞哦!!对于文章中可能出现的错误和建议可以在评论区打出(本人也只是刚入AIGC方向的小朋友)
在这里插入图片描述

Summary

提出直接使用SOTA 2D diffusion model1来生成triplane,使扩散模型来控制生成的神经场。本文对训练数据(Shapenet meshes) 转换为连续占用字段2并分解为一组axis-aligned triplane feature representations(轴向三平面特征表示)。在实验中,3D训练场景都有2D特征平面表示,这样可以直接在这些表示上直接训练现有的2D扩散模型。

Key in this paper approach:

Key to our approach is our treatment of well-fit triplanes in a shared latent space as ground truth data for training our diffusion model. We show that the latent space of these triplanes is grounded spatially in local detail, giving the diffusion model a critical inductive bias for 3D generation. Our approach gives rise to an expressive 3D diffusion model.

将共享latent space中well-fit triplanes作为ground truth来处理,这些在latent space的triplanes在局部细节上是基本grounded的,这样就使扩散模型在3D生成上有较好的归纳偏置


Intro

提出一种基于神经场的扩散框架来用于3D表示学习。主要步骤分为以下两部分:

  • 3D 场景的训练集被分解为一组per-scene triplane features (每个场景的三平面特征) & a single , shared feature decoder(单一且共享的特征编码器)

  • 在如上的这些三平面上训练2D diffusion model,训练后的diffusion model可以在推理时用于生成新的3D场景

这样将三平面→多通道2D image,就可将生成与渲染分开,有利于直接使用SOTA 2D diffusion的backbone.

在这里插入图片描述

上图是denoising process.展示了在推理过程中的迭代去噪功能,以及通过联合学习MLP decode三平面噪声得到的形状。(将三平面特征→多通道特征图像)

3D 场景表示:使用神经场将场景表示为连续函数可以很好的扩展场景复杂性。最初的NERF是只使用单一的、大型的MLP来表示整个场景。后面主要的改进是利用局部函数学习,或使用混合显式-隐式表示,使用小的MLP来进行推理,且在局部场景细节表现的更好。本文采用的是EG3D介绍的混合三平面表示,但为了与去噪框架兼容做了一些调整。

对于现在存在的工作single-latent,只是利用3D解码器将场景表示从1D转换到了3D,而未直接进行3D扩散,这样就失去了归纳偏置而效果较差。


Contribution

  • 提出了利用2D diffusion model backbone并且有内置3D归纳偏置的框架来用于三维场景的扩散,

  • 该方法有能力生成高保真和多样化的3D场景,有余SOTA 3D GANs


Method

在这里插入图片描述

Pipeline :

  • Step-1: 用trained DDPM将latent noise→feature maps,再将它转换成三平面表示

  • Step-2: 用局部条件occupancy Net将三平面(相加 F x y + F x z + F y z F_{xy}+F_{xz}+F_{yz} Fxy+Fxz+Fyz)解码为最终的神经场

Triplane Diffusion Framework(三维形状的神经场扩散NFD):
  • Representing a 3D Scene using a Triplane

    使用occupancy fields 的3D场景表示,这样的神经场的输出是二进制的,来表明在对象的内部还是外部,并且M=1.

    Triplane representation:是一种混合的显-隐式的神经场网络架构; 其使用三个二维特征平面 f x , f y , y z ∈ R N × N × C f_x,f_y,y_z \in R^{N×N×C} fx,fy,yzRN×N×C (每个fearture的维度是**​ N × N × C N×N×C N×N×C)和一个轻量级decoder(MLP)——解释平面特征。

    通过将3D坐标投影到每个轴向平面( x − y , x − z , y − z x-y,x-z,y-z xy,xz,yz),查询和聚合各自的特征,并利用 M L P ϕ MLP_\phi MLPϕ 解码上述处理过的feature (通过求和来进行特征聚合)

    N F ( x ) = M L P ϕ ( f x y ( x ) + f y z ( x ) + f x z ( x ) ) NF(x)=MLP_\phi(f_{xy}(x)+f_{yz}(x)+f_{xz}(x)) NF(x)=MLPϕ(fxy(x)+fyz(x)+fxz(x))

    MLP和feature planes可以联合优化来表示shape的occupancy field

  • Representing a Class of objects with triplanes

    将shape dataset→triplane dataset,这样就可以在learned feature planes上训练扩散模型。

    但是要注意的点:不能对每个对象进行训练一个三平面,因为MLP和特征平面是联合学习的,所以为了将数据集中每个对象的MLP推广到有扩散模型生成的triplane,我们应当为多个对象联合优化特征平面,并使用一个shared across all objectsdecoder.

    上述联合优化的效果:联合优化得到的feature planes和一个MLP能够解释任何三平面,在推理时也可以利用这个MLP来解码我们模型生成的特征平面

    在训练过程:

    • J:每个对象J个点坐标

    • I:包含I个对象的dataset

    • N F ( i ) ( x j ( i ) ) NF^{(i)}(x_j^{(i)}) NF(i)(xj(i)): 每个点的预测占位值(occupancy values)

    • O j ( i ) O_j^{(i)} Oj(i): ground truth 占位值

    • x j ( i ) x_j^{(i)} xj(i) : 第i个场景的第j个点

    在训练过程中,J=10M,其中5M个点在整个体积中均匀采样,5M个点在物体表面附近采样,以下是训练目标(每个点的预测占位值和ground truth的占位值之间的L2 loss):

    L N A I V E = ∑ i I ∑ j J ∥ N F ( i ) ( x j ( i ) ) − O j ( i ) ∥ 2 \mathcal{L}_{\mathrm{NAIVE}}=\sum_{i}^{I} \sum_{j}^{J}\left\|_{\mathrm{NF}^{(i)}}\left(\mathbf{x}_{j}^{(i)}\right)-\mathrm{O}_{j}^{(i)}\right\|_{2} LNAIVE=iIjJNF(i)(xj(i))Oj(i)2

  • Training a Diffusion Model for Triplane Features中:

    L D D P M = E t , f 0 , ϵ [ ∥ ϵ − ϵ θ ( α ˉ t f 0 + 1 − α ˉ t ϵ , t ) ∥ 2 ] \mathcal{L}_{\mathrm{DDPM}}=\mathbb{E}_{t, \mathbf{f}_0, \boldsymbol{\epsilon}}\left[\left\|\boldsymbol{\epsilon}-\boldsymbol{\epsilon}_\theta\left(\sqrt{\bar{\alpha}_t} \mathbf{f}_0+\sqrt{1-\bar{\alpha}_t} \boldsymbol{\epsilon}, t\right)\right\|^2\right] LDDPM=Et,f0,ϵ[ϵϵθ(αˉt f0+1αˉt ϵ,t)2]

    f 0 ~ q ( f 0 ) f_0 ~q(f_0) f0q(f0) :数据分布中抽取的随机样本

    f T ~ N ( f T ; 0 , I ) f_T ~N(f_T;0,I) fTN(fT;0,I) :纯高斯噪声组成的三平面特征图,分T步逐步去噪

    f 0... T ∈ R N × N × 3 C f_{0...T}∈ R^{N ×N ×3C} f0...TRN×N×3C :三平面特征(在扩散模型中将三个三平面特征堆叠到一个图像中)

  • Regularizing Triplanes for Effective Generalization

    简单的利用(a shared triplane decoder + a dataset of triplane features),在从这些三平面特征上训练一个扩散模型后进行推理得到的shape具有人工制品的嫌疑。

    因此,文章中在优化过程中对三平面特征进行了正则化

    • 其在loss中加入了权重为 λ 1 \lambda_1 λ1 的TV(total variation)正则项**来使三平面特征的分布更类似于自然图像的manifold流型。

    • 对特征平面归一化,加入了在权值为 λ 2 \lambda_2 λ2 的三平面特征上包含L2正则项**来抑制离群值

    • 加入一个显式密度正则项EDR,从体积中采样一组随机点,用随机向量 ω \omega ω 来抵消这些点,用MLP来计算他们的均方误差 E D R ( N F ( x ) , ω ) = ‖ N F ( x ) − N F ( x + ω ) ‖ 2 2 EDR (NF (x), ω) =‖NF (x)−NF (x + ω)‖_2^2 EDR(NF(x)ω)=NF(x)NF(x+ω)22 ——上述的目的是来学习smooth outside-of-shape volume

    因此最终的训练Loss如下:

    L = ∑ i N ∑ j M ∥ N F ( i ) ( x j ( i ) ) − o j ( i ) ∥ 2 + λ 1 ( T V ( f x y ( i ) ) + T V ( f x z ( i ) ) + T V ( f y z ( i ) ) ) + λ 2 ( ∥ f x y ( i ) ∥ 2 + ∥ f y z ( i ) ∥ 2 + ∥ f x z ( i ) ∥ 2 ) + EDR ⁡ ( N F ( x j ( i ) ) , ω ) \begin{aligned} \mathcal{L}=\sum_{i}^{N} \sum_{j}^{M} &\left\|\mathrm{NF}^{(i)}\left(\mathbf{x}_{j}^{(i)}\right)-\mathrm{o}_{j}^{(i)}\right\|_{2} \\ &+\lambda_{1}\left(\mathrm{TV}\left(\mathbf{f}_{x y}^{(i)}\right)+\mathrm{TV}\left(\mathbf{f}_{x z}^{(i)}\right)+\mathrm{TV}\left(\mathbf{f}_{y z}^{(i)}\right)\right) \\ &+\lambda_{2}\left(\left\|\mathbf{f}_{x y}^{(i)}\right\|_{2}+\left\|\mathbf{f}_{y z}^{(i)}\right\|_{2}+\left\|\mathbf{f}_{x z}^{(i)}\right\|_{2}\right) \\ &+\operatorname{EDR}\left(\mathrm{NF}\left(\mathbf{x}_{j}^{(i)}\right), \boldsymbol{\omega}\right) \end{aligned} L=iNjMNF(i)(xj(i))oj(i)2+λ1(TV(fxy(i))+TV(fxz(i))+TV(fyz(i)))+λ2(fxy(i)2+fyz(i)2+fxz(i)2)+EDR(NF(xj(i)),ω)

  • Sampling Novel 3D Shape

    推理过程中shape的无条件生成分为两个Steps

    • 从训练的扩散模型中采样三平面(与从扩散模型中采样图像是相同的)

      f t − 1 = 1 α t ( f t − 1 − α t 1 − α ˉ t ϵ θ ( f t , t ) ) + σ t ϵ \mathbf{f}_{t-1}=\frac{1}{\sqrt{\alpha_t}}\left(\mathbf{f}_t-\frac{1-\alpha_t}{\sqrt{1-\bar{\alpha}_t}} \boldsymbol{\epsilon}_\theta\left(\mathbf{f}_t, t\right)\right)+\sigma_t \boldsymbol{\epsilon} ft1=αt 1(ft1αˉt 1αtϵθ(ft,t))+σtϵ

      去噪过程的最后结果是归一化的三平面特征图像分布中的一个样本 f 0 f_0 f0,然后对其进行反归一化,并将生成的特征分割为 f x y , f y z , f x z f_{xy},f_{yz},f_{xz} fxy,fyz,fxz ,生成一组三平面特征

    • 查询神经场并提取meshes

      将上述得到的三平面特征与pre-trained的MLP相结合来查询神经场,再用marching cubes algorithm进行提取mesh


Conclusion:

提出了3D-Aware diffusion model,使用2D diffusion 的backbone来生成三平面特征,将强大的2D diffusion model和3D物体进行连接。与现有的3d-aware模型相比大大提高了生成对象的质量和多样性。

limitations: 生成速度很慢,这样的慢采样同DDPM的问题一样

Future works:

  • 文章中是利用生成occupancy fields的方法,但实际上可以扩展到用三平面表示的任何类型的神经场

  • 本文做的是无条件生成,但可以将其调整到文本、图像或其他输入

  • 对于慢采样问题,可以用更有效的采样器[参考Elucidating the Design Space of Diffusion-Based Generative Models]来解决,实现适时合成的效果


  1. 文章使用的是ADM(Improved Denoising Diffusion Probabilistic Models) ↩︎

  2. 可以去看看Occupancy Networks: Learning 3D Reconstruction in Function Space ↩︎

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

论文带读——3D Neural Field Generation using Triplane Diffusion 的相关文章

  • 求和面积表 (SAT) 的 3D 变体

    根据维基百科 A 面积求和表 http en wikipedia org wiki Summed area table是一种数据结构和算法 用于快速有效地生成网格矩形子集中的值之和 对于二维空间 可以通过迭代生成求和面积表x y超过所需的范
  • glkView:drawInRect: 和 glkViewControllerUpdate: 之间的区别? OpenGL ES 2 - iOS

    在我的渲染循环中 这两种方法之间的目的应该有什么区别 苹果有话要说 关于更新 视图控制器调用其委托的 glkViewControllerUpdate 方法 您的代理应该更新不涉及将结果渲染到屏幕的帧数据 关于绘制矩形 GLKView 对象使
  • 如何在 Matlab 中计算 3D 网格的投影

    我正在尝试使用 matlab 从不同视图计算 3d 网格的 2d 投影 我现在使用的解决方案是绘制 3D 网格 旋转它并制作屏幕截图 我想知道是否有任何 matlab 内部函数或任何其他解决方案允许我在给定一组顶点和三角形的情况下计算投影而
  • 使用 DirectX 或 OpenGL 显示 100 个浮动立方体

    我想使用显示 100 个浮动立方体DirectX or OpenGL 我正在寻找一些示例源代码或该技术的描述 我无法正确显示多个立方体 我在网上搜索了一系列很好的教程 尽管他们谈论了如何做3D基元 我找不到有关如何进行大量操作的信息3D原语
  • 根据表面包围的 3D 区域将表面分配给区域

    给定三维空间中的一组曲面 我尝试将每个曲面分配给一个区域 该区域引用该组所包围的最小 3D 区域 或者如果不适用则不指定任何区域 我还想确定一个表面是否是两个区域之间的界面 因此 例如 如果我们有 11 个表面 代表两个堆叠在一起的立方体
  • 使用 Scenform 将 SceneView 加载到片段中后出现黑屏

    我正在开发一个项目 该项目将在一个片段中包含 3D 模型查看器 为了做到这一点 我决定使用 sceneform 在尝试在我的选项卡片段中显示 SceneView 后 我遇到了 SceneView 的问题 一切都是根据示例和 scenefor
  • 在运行时更改 AR core 中对象的纹理

    我正在创建一个应用程序 我需要在其中更改 3d 对象的纹理 图案 我正在使用 AR Core SDK 和 android 我已经使用了下面的代码 但它不起作用 Texture builder setSource this R drawabl
  • Python openAL 3D 声音

    我刚刚开始使用 python 正在制作音频操作程序 我正在尝试在我的 python 应用程序中使用 openAL 实现 3D 声音 但我只能让它工作 这是我的 3D 声音代码 from openal loaders import load
  • 网格三角剖分和简化 C++ 库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 C 库来三角测量和简化 3D 网格 我的 3D 网格可能很大 大约 300 万个顶点
  • 使用相机将 3D 透视投影到 2D 屏幕上的基本渲染(无需 opengl)

    假设我有一个如下的数据结构 Camera double x y z ideally the camera angle is positioned to aim at the 0 0 0 point double angleX angleY
  • R - hist3D 序列颜色和标签问题

    所以我有一个 5 行 20 列的数据集 我正在尝试绘制一个hist3D来自plot3D包裹 dt structure c 1 1 1 3 1 2 1 0 2 1 2 1 0 1 1 0 1 0 2 2 1 1 1 1 4 4 1 1 2 3
  • 如何在 OpenGL 中创建廉价的阴影? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有两个模型 A 和 B 以及一个灯 L 我希望模型 A 在模型 B 上投射阴影 我暂时不想考虑阴影体
  • 如何计算逆运动学[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想知道如何使用逆运动学计算旋转角度 我计划将其用于实时 3D 动画 有人知道一些详细介绍具体解决方案的好文献吗 以下资源调查了逆运动学问题的一些流行
  • 3d 表面的凸包算法 z = f(x, y)

    我有一个以一组三元组 x i y i z i 形式给出的 3D 表面 其中 x i 和 y i 大致位于网格上 并且每个 x i y i 都有一个关联的 z i 值 典型的网格是20x20 我需要在给定的公差范围内找到哪些点属于曲面的凸包
  • 在 Unity 3D 中使用触摸输入在地形上移动相机

    我是 Unity 新手 我正在尝试弄清楚如何使用触摸输入在地图 地形上移动相机 摄像机将以 90 0 0 的旋转角度俯视地形 地形位于第 8 层 我用键盘移动它没有问题 现在我尝试移动到触摸 如果你想在 iOS 上保持预期的使用情况 那就非
  • 如何使用更少的包绘制二元正态分布的表面和轮廓

    我将绘制二元正态分布的 3D 曲面及其轮廓 可以是任何二元正态分布 我想用persp and contour在我的画中 我在网上搜索了一下 但发现了很多方法 大多数人都使用过一些软件包 但我想以使用更少的软件包甚至不安装任何软件包的方式来执
  • OpenGL Z 偏置(多边形偏移)限制

    我有两个共面的多边形 我尝试做 glEnable GL POLYGON OFFSET FILL glPolygonOffset 0 1 并期望其中一个明显 位于 另一个之上 这种情况直到大约 70 75 个单位之外 近剪裁平面为 1 远剪裁
  • 一次性渲染阴影

    考虑到阴影投射的成本 我想知道对于动态定位的静态对象 例如 程序城市 是否有一个功能或可能 实验性的方法可以在 Three js 中仅渲染一次阴影贴图 甚至在 webgl 中 因此 结果可以在静态对象的下一帧中免费使用 仅当物体移动时才会进
  • 如何在 GTX 560 及更高版本上使用 OpenGL 进行立体 3D?

    我正在使用在 Windows 7 上运行的开源触觉和 3D 图形库 Chai3D 我重写了该库以使用 Nvidia nvision 执行立体 3D 我将 OpenGL 与 GLUT 一起使用 并使用 glutInitDisplayMode
  • IE9-11 检测变换样式:preserve-3d

    我为一个项目制作了一个 3d 类型的菜单 自然 IE 会引起问题 因为 IE10 即使 3d 变换工作 也不支持变换样式 preserve 3d 我尝试了解决方法 通过对 3d 菜单容器的每个子元素应用变换 但至少可以说 动画看起来很糟糕

随机推荐