引:本文作者大多为VAST的科研人员,最大的亮点是提出了一种新的拓扑表示方式,从而避免了此前的方式——将Mesh表示为一串离散Token,并使用Transformer自回归生成——引入的自回归过程累计误差以及Mesh本身并不具备的顺序性质

文首配图

背景

现有艺术 mesh 生成方法通常把 mesh 表示成一串离散 token,然后用自回归 Transformer 一个 token 一个 token 地预测。很多研究重点放在:怎么把 mesh 压缩成更短的序列,从而让训练和推理更容易。

虽然这些方法效果不错,但有三个核心问题:

  • 第一,mesh 越复杂,序列越长,生成一个 mesh 需要很多步自回归预测,所以推理可能很慢。
  • 第二,自回归过程容易误差累积:前面某些 token 一旦错了,后面的 mesh 序列可能就全乱了。
  • 此外,mesh 本身其实没有天然顺序,不应该被强行当作一个线性序列;它更像图像、点云一样,应该作为整体来建模。

已有一些基于 diffusion 的方法尝试直接处理三角面或 latent,但是它们在处理变长token序列的问题上效率始终有限,因此拓展性有限。

为了解决这个问题,作者提出 Nexus,这是一个同时用 diffusion 生成几何和拓扑的 mesh 生成框架。具体贡献总结如下:

  1. 提出 Nexus,一个完全基于 diffusion 的 mesh 生成框架,不需要排序,也避免了自回归序列化瓶颈。
  2. 设计了分层八叉树 diffusion,用 coarse-to-fine 的方式高效生成顶点结构。
  3. 提出 Spacetime Interval,把拓扑编码成每顶点特征,并通过 topology autoencoder 得到连续 latent,使 topology diffusion 成为可能。
  4. 在大规模数据集上展示了较好的生成效果,可以生成复杂、任意拓扑的 mesh,同时避免序列模型常见的误差累积。

方法

Nexus是一个用于在输入条件 C\mathcal{C} 下生成三角网格 M\mathcal{M} 的生成框架。这里的条件 C\mathcal{C} 可以是点云,也可以是图像。

如果把一个 mesh 记作M=(V,F)\mathcal{M}=(\mathcal{V},\mathcal{F}),其中 V\mathcal{V} 表示顶点(Vertex)集合,F\mathcal{F} 表示面集合。那么Nexus 要建模的就是一种条件概率。基本思想可以表达为以下的式子:

p(MC)=p(VC)p(FV,C)p(\mathcal{M}|\mathcal{C}) = p(\mathcal{V}|\mathcal{C}) \cdot p(\mathcal{F}|\mathcal{V},\mathcal{C})

也就是说,这个生成过程是两阶段的,第一阶段用点云/图像条件来生成顶点集合,第二阶段在顶点集合的基础上,根据条件生成拓扑连接,也就是形成面。

Pipeline图

顶点生成

Nexus 把顶点集合 V\mathcal{V} 表示成八叉树结构 O\mathcal{O}

VO={O0,O1,,OD}\mathcal{V} \rightarrow \mathcal{O}=\{\mathbf{O}_0,\mathbf{O}_1,\cdots,\mathbf{O}_D\}

我们可以想象一个立方体,它可以被等分为8个小立方体,而每个小立方体又可以被等分为8个更小的立方体……这样无穷分下去,总有一个时刻能做到让所有顶点都身处不同的小立方体。而这个分裂过程我们可以用一个八叉树来表示,假设树的深度是DD,所以我们就可以用一个DD bit的坐标来描述一个顶点,且每个顶点都是八叉树中一片叶子。

而我们的目标就是先生成这样一个物体的顶点集合。文中提到这个生成过程是一种“Coarse-to-Fine”的过程,也就是从最外层的尺度不断细分,直到达到规定的最大深度。我们用Od\mathbf{O}_d 表示深度 dd 的八叉树节点分布情况,生成过程就可以写成一种条件概率

p(VC)=p(OC)=d=1Dp(OdOd1,C)p(\mathcal{V}|\mathcal{C}) = p(\mathcal{O}|\mathcal{C}) = \prod_{d=1}^{D} p(\mathbf{O}_d|\mathbf{O}_{d-1},\mathcal{C})

所以每一层八叉树的生成都依赖上一层的情况和输入条件。

训练

作者选择用一个统一网络来建模所有深度上的生成p(OdOd1,C)p(\mathbf{O}_d|\mathbf{O}_{d-1},\mathcal{C}),它可以预测每个存在顶点的父节点(Occupied Parent)的8个子节点的顶点分布情况(Occupancy)。

在这样的一个八叉树中,每个节点的取值可以是0或1,1表示节点上存在一个顶点,0表示不存在。为了将这样的离散标识值放到连续生成模型里,作者将二值目标当成两个实数,然后使用flow matching来训练,即模型预测数据从带噪状态向正确答案的演变方向。自然地,针对这样的任务,主干网络被设计为多层的DiT,它接受一个8维的Occupancy pattern,对其embedding后当成token来处理。举个例子:某时刻我们已经预测出八叉树某层一个节点中有顶点,然后我们假设它的8个子节点的值分布是[1, 0, 0, 1, 0, 0, 0, 1],这个向量会经过线性层被映射到高维,再加上位置编码(3D RoPE)和深度编码(这个编码可学习),成为最终被处理的token。

而另一方面,输入条件会通过编码以交叉注意力的方式注入降噪网络。如果是点云条件,就使用一个和DiT一同训练的VecSet Encoder;如果是图像条件,就使用预训练的DINOv3。

推理

推理时,模型按 Coarse-to-Fine 的方式生成顶点。开始只有一个根节点,之后每一层里模型都从上一层预测出来的Od1O_{d-1}里找出含顶点的nodes,然后用训练好的diffusion模型预测OdO_d,一直重复到最深层D。最后,最深层里所有有顶点的节点,其对应的小立方体的中心点就作为这个顶点的坐标。

拓扑生成

为了生成 mesh topology,作者设计了一个 topology AE,并训练一个在顶点条件下工作的 diffusion 模型。作者将边拓扑面拓扑分开建模,先花费O(V2)O(|V|^2)的时间恢复edge,再在edge graph上枚举三角形。这种方法的计算量比直接恢复一个一个face(O(V3)O(|V|^3)的复杂度)要少。

在这个阶段,模型学习每个顶点的 embedding,用它判断两个顶点之间是否有边、三个顶点之间是否组成一个面。设每个顶点都有一个 embedding zvz_v,我们通过各顶点在这个embedding空间的分布情况,先判断由点如何连成边,然后判断不同边如何组成三角形。

整体的拓扑生成,是本文贡献较大的一个部分。而这部分的精华就在于判断边/面拓扑的距离度量:Spacetime Interval。下文详细介绍。

边拓扑 Edge Topology

衡量两个顶点Embedding的距离,最朴素的方法是使用欧氏距离度量,或者使用余弦相似度,如果这样的度量值超过某个阈值,就判断点uuvv之间存在边。

但是本文用的是SpaceMesh提出的Spacetime Distance,为什么呢?作者认为欧氏距离的邻近关系存在传递性(原文言“transitive proximity”),也就是说,如果a和b邻近,而b和c邻近,那么a和c二者必然是邻近的。但是在复杂的拓扑中连接邻近并不存在必然的联系:假设三点在欧式空间的Embedding上相互邻近,但是实际上a与b之间存在连接,b与c存在连接,而a与c之间不存在连接。此时由于欧氏距离的这种“传递式邻近”,三者会被拉到一起,a与c的度量会不可避免地超过判断连接的阈值,从而被认为是“有连接关系”。所以要使用一种能够表达这种情况的度量,Spacetime Intervals就是作者认为可以胜任的度量,并且它在SpaceMesh中被证明在表达这样的复杂关系中比欧氏距离相比收敛快得多。本文中作者也通过贴出采用不同Metrics进行预测的实验结果来证明了Spacetime Intervals在预测准确率上的优越性。

不同距离度量实验对比

所以我们下面重点介绍一下Spacetime Intervals相关的知识。

不定度量 Infinite Metric

不定度量(Indefinite Metric)是指一种不满足非负性公理的内积或度量。而欧式度量显然是一种满足非负性的度量,而且还是一种正定度量:

  • d(x,y)0d(x, y)\geq 0
  • d(x,y)=0,iff  x=yd(x,y)=0,\, \text{iff}\; x=y

下文所说的时空距离,就是一种不定度量。

Spacetime Distance

du,v=susv2tutv2,where zu=[su,tu],zv=[sv,tv].d_{\mathbf{u},\mathbf{v}} = \|\mathbf{s_u}-\mathbf{s_v}\|^2 - \|\mathbf{t_u}-\mathbf{t_v}\|^2, \quad \text{where } \mathbf{z_u}=[\mathbf{s_u},\mathbf{t_u}], \mathbf{z_v}=[\mathbf{s_v},\mathbf{t_v}].

简单地说,我们的每个顶点的embedding维度被分为两部分,一部分是spatial分量,一部分是temporal分量。在算两个顶点之间的“距离”的时候,我们通过这样一种不定度量来划分顶点间是否存在边:如果这个度量小于等于0,二者之间无连接(无边);如果大于0,说明二者间存在一条边。

至于为什么它能解决上文提到的“传递性难题”,我们可以自己设置一个小case来印证,此处不赘述。总之原理就是多了一个轴的自由度,所以求解这样的连接关系也更方便。而这个Spacetime Distance在本文被作者称为1st Order Spacetime Intervals,为了和后面求解面的度量(2st Order Spacetime)统一,下图是对应的图示。我们一会会继续介绍。

时空度量的相关图示