英伟达

Motivation

  • 目前3D模型生成需求非常大(比如游戏建模,还有元宇宙)。最传统的方式是建模师去人工建模,但是这样的方式非常耗时耗力,人工在短时间内生成大量3D模型不太现实。依据当前的需求,3D模型生成的模型,希望能够满足如下条件:

    1. 能生成详细的集合细节与拓扑形状;
    2. 能够输出纹理网络(显式表达),以能够输入到现有软件中进行编辑和应用;
    3. 在训练时使用2D图像进行监督(因为比3D的图像能容易获得)。
  • 目前的生成模型都不能同时满足以上的需求:

    image-20220927092208868

Contribution

  • 提出了GET3D模型,该模型满足所有提出的条件:能够直接生成显式的3D纹理网络,并且能够控制纹理细节与拓扑结构;该模型结合了可微显式表面提取与可微渲染,前者能够直接优化和输出具有任意拓扑的3D纹理网格,后者能够用2D图像训练模型,能够使用现有2D图像合成任务中比较成熟的鉴别器。
  • 可以拓展到其他任务:使用CLIP嵌入的文本指导形状生成;在无监督的条件下,学习使用先进的可微渲染技术生成分离出来的材料(decomposed material,材料纹理图片?)和依赖于视图的照明效果。

Method

  • GET3D整体模型架构与训练/推理流程:

image-20220928092106108

image-20220929121104284

Mapping Network

  • 由于相同形状的物体可以有不同的材质、相同的材质又可以运用到不同形状的物体上,因此可以视为二者相互独立,因此要单独控制。
  • 随机选取z1R512\mathbf{z_{1}} \in \mathbb{R^{512}}z2R512\mathbf{z_{2}} \in \mathbb{R}^{512},依照StyleGAN的方式通过两个非线性映射fgeof_{geo}ftexf_{tex},得到两个隐变量w1=fgeo (z1)\mathbf{w_{1}} = f_{\text {geo }}(\mathbf{z_{1}})w2=ftex (z2)\mathbf{w_{2}}=f_{\text {tex }}(\mathbf{z_{2}}),它们会分别控制几何形状与材质。
  • Mapping network是一个8层的全连接网络,维度为512,每层激活函数为 leaky-ReLU,整体与StyleGAN相同。

Geometry Generator

image-20220928093317063

  • 几何生成器(Geometry generator)的目标是将结果可以应用到DMTet(一个最近提出的可微的表面表示方法)中。
  • VTV_{T}表示四面体网络T的顶点的集合,用(VT,T)(V_{T},T)可以表示整个物体所在的四面体空间;TT网络中的每个TkT_{k}由四个顶点vak,vbk,vCk,vdk{\mathbf{v_{a_{k}}}, \mathbf{v_{b_{k}}}, \mathbf{v_{C_{k}}}, \mathbf{v_{d_{k}}}}定义。k(1,2,3...K)k \in ({1,2,3...K})KK是四面体的总数。每个顶点记录了三维坐标、SDF的值sis_{i}、形变量Δvi\Delta \mathbf{v}_{i}
  • 这种表示方法可以通过可微行进四面体(Differentiable Marching Tetrahedra)恢复显式网格(Mesh);变形顶点vi=vi+Δvi\mathbf{v_{i}^{\prime}}=\mathbf{v_{i}}+\Delta \mathbf{v_{i}}上的SDF值sis_{i}通过重心插值计算得到连续空间中的SDF值。
  • 在需要高分辨率建模的情况下(如车轮的纹理),进一步使用DMTet中的体积细分法。

Network Architecture

image-20220930095405225

  • 网络由一系列的三维卷积与全连接层组成,将采样的得到的w1R512w_{1} \in \mathbb{R}^{512}映射到SDF的值与顶点的形变量。使用条件三维卷积层来生成一个以w1w_{1}为条件的特征;然后使用三线性插值查询每个顶点viv_{i}的特征,并将其输入到MLP,得到SDF值sis_{i}和变形量Δvi\Delta v_{i}

  • 随机初始化一个特征量FgeoR4×4×4×256F_{geo} \in \mathbb{R}_{4 \times 4 \times 4 \times 256},它的权重在所有输入中共享,是一个可学习的参数;经过三个ModBlock3D(Modulated 3D Convolution Block):

    image-20220930130042184

    图为ModBlock*D,*代表不同维度但结构相同,比如纹理生成的部分还使用到了ModBlock2D。

  • 在每个ModBlock3D中FF首先使用双线性插值的方式对特征进行上采样,接着经过一个3D-ResNet,残差路径使用卷积核大小为1×1×11\times1\times1,主路径为3×3×33\times3\times3

  • 对于条件w1w_{1},首先进行仿射变换到hhhh被用于调制(M)和解调(D)条件卷积层的权重:

    M:θi,j,k,l,m=hiωi,j,k,l,m,D:θi,j,k,l,m=θi,j,k,l,m/i,k,l,mθi,j,k,l,m2,\begin{array}{l} \mathbf{M}: \theta_{i, j, k, l, m}^{\prime}=h_{i} \cdot \omega_{i, j, k, l, m}, \\ \mathbf{D}: \theta_{i, j, k, l, m}^{\prime \prime}=\theta_{i, j, k, l, m}^{\prime} / \sqrt{\sum_{i, k, l, m} \theta_{i, j, k, l, m^{2}}^{\prime}}, \end{array}

    其中,θ\thetaθ\theta^{''}分别是初始与调制后的权重,hih_{i}是第ii个输入通道的style(StyleGAN中的说法),jj为输出通道维数,k,l,mk, l, m为三维卷积滤波器的空间维数。

  • 经过卷积之后即可得到特征FgeoF_{geo}^{'},再对其进行三线性插值(TI),得到每个顶点的特征向量fgeoR64\mathbf{f}_{\mathrm{geo}}^{\prime} \in \mathbb{R}^{64},再对该向量对应顶点的坐标进行位置编码(PE),将向量与位置编码后的位置进行拼接输入到ModFC中。

    image-20220930153026174

    ModFC包括一个全连接层,与ModBlock类似经过了调制与解调的过程。拼接后的结果经过三层的ModFC,中间使用leaky-ReLU作为激活;最后一层使用tanh,将SDF的值归一化到[1,1][-1,1],将形变Δv\Delta v归一化到[1 tet-res ,1 tet-res ]\left[-\frac{1}{\text { tet-res }}, \frac{1}{\text { tet-res }}\right],tet-res表示四面体网络的分辨率(原实验设置为90)。

Differentiable Mesh Extraction

  • 在获得所有顶点的SDF和形变量的值后,使用可微行进四面体算法(Differentiable Marching Tetrahedra Algorithm)提取显式网格。

  • 行进四面体根据sis_{i}的符号确定每个四面体的拓扑结构,当sign(si)sign(sj)\text{sign}(s_{i}) \ne \text{sign}(s_{j})时即可以确定一个表面,其中i, j表示四面体边缘的顶点索引,然后该面的顶点mi,j\mathbf{m}_{i, j}通过线性插值的方式确定:

mi,j=visjvjsisjsi \mathbf{m_{i, j}} = \frac {\mathbf{v_{i}}^{\prime} s_{j}-\mathbf{v_{j}}^{\prime} s_{i}} {s_{j}-s_{i}}

  • 当且仅当sisjs_{i} \ne s_{j}时才会进行计算(分母非0),因此mi,j\mathbf{m}_{i, j}是可微的,即可通过反向传播优化。

  • 通过预测sis_{i}的不同符号即可生成任意拓扑形状。

Texture Generator

image-20220929114450540

  • 纹理生成将纹理参数化为一个纹理场(Texture field);纹理场用三平面表示(更高效)。

  • 具体来说,用函数ftf_{t}对纹理场进行建模,将三维的点p\mathbf{p},以w1w_{1}(由于纹理与几何有关)与w2w_{2}为条件映射到该位置的RGB颜色值cR3\mathbf{c} \in \mathbb{R}^{3}。因此:

    c=ft(p,w1w2)\mathbf{c}=f_{t}(\mathbf{p}, \mathbf{w_{1}} \oplus \mathbf{w_{2}})

  • 与传统工作光线追踪不同的是,本工作获得颜色的方式是直接输入图像表面的三维坐标即可查询到对应的颜色,极大简化了渲染的复杂度并且保证了多视图的一致性。

Network Architecture

image-20220930155711829

  • 与StyleGAN2类似的网络结构,使用条件二维卷积网络将w1w2\mathbf{w_{1}} \oplus \mathbf{w}_{2}映射成大小为N×N×(C×3)N \times N \times (C \times 3)的三平面坐标。(N=256,C=32)
  • 随机初始化一个特征网络$ F_{tex} \in \mathbb{R_{4 \times 4 \times 512}},它的权重在所有输入中共享,是一个可学习的参数;将其通过6ModBlock2D(结构与ModBlock3D相同,条件为,它的权重在所有输入中共享,是一个可学习的参数;将其通过6层ModBlock2D(结构与ModBlock3D相同,条件为\mathbf{w_{1}} \oplus \mathbf{w_{2}}$,维度为2)。

image-20221001204719064

  • 每一层ModBlock2D的输出分别经过一个tTPF网络,tTPF为一个卷积核为1×11 \times 1的条件卷积网络,根据StyleGAN2,tTPF只进行调制(M)而不进行解调(D),首先将条件进行仿射变换,与几何生成(Geometry Generator)部分介绍的方法相同,计算条件卷积的初始权重θ\theta。最后特征网络FtexF_{tex}被上采样到FtexR256×256×96F_{tex}^{'} \in \mathbb{R}_{256 \times 256 \times 96}
  • 给定一个特征表面上的点p\mathbf{p},计算特征向量ftex=eρ(πe(p))\mathbf{f_{\mathrm{tex}}}=\sum_{e} \rho\left(\pi_{e}(\mathbf{p})\right),其中πe\pi_{e}表示向e平面投影,ρ()\rho(*)表示双线性插值,然后通过三层全连接层将特征向量和位置转化为颜色c\mathbf{c}

Differentiable Rendering

  • 假设数据集中相机的分布为C\mathcal{C},随机采样一个相机c,使用Nvdiffrast将重建的3D网络转化为2D图像与轮廓,每个像素包含了3D图像的坐标;这些坐标进一步用于查询纹理场进而获得RGB颜色值。
  • 由于直接在生成的Mesh上操作,因此可以高效率地渲染高分辨率图像,允许模型训练图像分辨率高达1024×1024。

Discriminator

  • 与StyleGAN的鉴别器架构相同,使用两个鉴别器来训练GET3D:一个用于RGB输出,一个用于2D轮廓。

  • 使用与StyleGAN相同的带有R1正则化的非饱和GAN目标(Non-saturating GAN Objective)。令DxD_{x}表示判别器,其中xx可以是RGB图像或2D轮廓,则对抗优化目标定义如下:

    L(Dx,G)=EzN,cC[g(Dx(R(G(z),c)))]+EIxpx[g(Dx(Ix))+λDx(Ix)2]L(D_{x}, G)=\mathbb{E_{\mathbf{z} \in \mathcal{N}, c \in \mathcal{C}}}[g(D_{x}(R(G(\mathbf{z}), c)))] +\mathbb{E_{I_{x} \in p_{x}}}[g(-D_{x}(I_{x}))+\lambda {\|| \nabla D_{x}(I_{x})\||}^2]

    其中g(u)=log(1+exp(u))g(u)=-\log (1+\exp (-u))pxp_{x}是图像的分布。

  • 为了去除在任何视图中都不可见的内部浮动面(internal floating faces),用相邻顶点的SDF值的交叉损失熵来进一步规范几何生成:

Lreg=i,jSeH(σ(si),sign(sj))+H(σ(sj),sign(si))L_{\mathrm{reg}}=\sum_{i, j \in \mathbb{S_{e}}} H\left(\sigma\left(s_{i}\right), \operatorname{sign}\left(s_{j}\right)\right)+H\left(\sigma\left(s_{j}\right), \operatorname{sign}\left(s_{i}\right)\right)

  • 最终的损失函数:

    L=L(Drgb,G)+L(Dmask ,G)+μLregL=L\left(D_{\mathrm{rgb}}, G\right)+L\left(D_{\text {mask }}, G\right)+\mu L_{\mathrm{reg}}