新浪科技 股票

SILSA:用三轴切片给3D生成模型装上"结构感知"

市场资讯 10.28 14:12

(来源:科技行者)

你有没有想过,为什么现在最先进的AI生成3D模型,经常把一把椅子的四条腿生成出来却粘在了一起,或者让自行车轮子上的辐条莫名其妙消失一半?

这不是模型偷懒,而是一个更深层的问题。2025年前后,3D生成领域已经进化出好几代强大的框架,像Trellis、SparseFlex这些系统,都能从一张图片生成相当逼真的三维物体。但如果你仔细看细节,会发现一个共同的毛病:模型知道这东西"长什么样",却经常搞不清楚这东西"是怎么连起来的"。镂空的灯笼会被填平,细长的支架会断裂,重复的螺旋楼梯台阶会糊成一团。

这篇来自伊利诺伊大学厄巴纳-香槛分校的论文,就是冲着这个毛病来的。它提出的方法叫SILSA,核心思路听起来有点反常识:不去生成更精细的三维像素块,而是把整个物体切成一片一片的"切片",让AI学着一片一片地理解和生成这个物体。

三维生成卡在哪了

先说说现在主流的3D生成方法长什么样。

最直接的办法是用稠密体素网格,也就是把三维空间切成一个个小方块,记录每个方块里有没有东西。

体素网格*:三维版本的像素格子,每个格子记录该位置是否被物体占据,分辨率越高格子越多。

这个办法的问题很直白:分辨率翻倍,计算量和内存要涨八倍,因为三个维度同时在涨。想做高分辨率生成,这个方法基本跑不动。

于是研究者们想出了"只关心有东西的地方"的稀疏方法,比如稀疏体素、八叉树、分层细化这些技术,XCube和Trellis用的结构化3D潜在表示(SLAT)都是这条路子。这类方法确实省了不少计算,但代价是生成过程变成了两阶段:先猜哪些位置是"活跃"的(也就是有物体存在的),再给这些活跃位置生成具体的几何细节。

这就好比你要给一间空房子里摆家具,但你得先画出一张"哪里该放东西"的草图,再根据草图一件件往里填。如果草图画错了(活跃位置预测错了),后面再怎么精细摆放都没用,而且这个"先画图再填充"的流程天然就比"直接摆"要慢、要复杂。

更麻烦的是,这种基于局部体素块的生成方式,天生就会把一个连续的曲面切碎成成千上万个互不知情的小方块。打个比方,如果你要临摹一整幅山水画的轮廓线,正常做法是盯着这条线从头画到尾;而稀疏体素的做法相当于把画面切成几千个格子,每个格子里单独画一小段线条,谁也不知道隔壁格子画的是什么。拼起来的时候,线条容易断、容易错位,这就是论文说的"拓扑一致性"难题的根源。

拓扑一致性*:指物体的连通关系、孔洞数量这些结构性质在重建或生成后保持不变,比如一个有把手的杯子生成后把手应该还连着杯身,不能断开也不能多长出一个洞。

另一条路线是用更紧凑的表示方法,比如三平面、集合式形状潜码这些方案,像Shap-E、3DShape2VecSet走的就是这个方向。它们把整个三维形状压缩成少量的token,生成起来飞快,但问题在于每个token和局部几何的对应关系被打散了,模型可能整体形状对了,细节结构却是错的,表面误差指标看起来很低,物体却已经面目全非。

这就是整个领域面临的两难:想要局部结构准确,就得用很多token,生成慢;想要生成快,就得压缩表示,结构容易丢。SILSA想做的事,就是同时拿到这两头的好处。

切片:既紧凑又保结构的中间道路

SILSA的核心洞察其实挺朴素:一个有一定厚度的切片,能把某个平面区域的拓扑结构完整地装进一个token里,而稀疏体素要把同样的信息拆成好多个格子才能表达。

具体来说,SILSA沿着x、y、z三个坐标轴方向,分别在物体的包围盒里切出128个片,每个轴128片,三个轴总共384片。生成模型要做的事情,就是生成这384个切片对应的潜在向量,不多不少,和这个物体到底有多复杂、占了多少体素完全无关。

这里有个关键的工程细节:单独一个薄片里包含的点可能少得可怜,光靠这么一点信息很难学出靠谱的几何。SILSA的解法是用"滑动窗口",每个切片token实际上是综合了它前后共8个相邻薄片内的所有点云信息聚合而成的。

这就像你要给一本书的每一页写摘要,如果只看这一页本身,内容可能太零碎看不出上下文;但如果你允许自己参考前后几页一起总结,摘要就会更连贯。如果不加这个滑动窗口,论文的消融实验里给出了明确的代价:窗口宽度设成1(也就是不重叠)时,拓扑误差(Betti-Err)从默认设置的1.58飙升到3.24,几何IoU从93.01掉到86.95,整整差了六个百分点。这说明没有重叠窗口提供的上下文,单个切片的信息量根本撐不起准确重建。

每个点云样本在被塞进这个切片编码器之前,会被标注上一个"深度相对偏移量",记录它离这个切片中心有多远。然后一个共享的多层感知机对窗口内所有点独立处理,再用最大池化操作提取出这个窗口的整体特征,最后映射成高斯分布的均值和方差,构成这个切片对应的潜在变量。

高斯潜在变量*:变分自编码器(VAE)里用均值和方差描述的概率分布,训练时从这个分布里采样,推理时直接用均值作为确定性的表示。

多层感知机(MLP)*:一种最基础的神经网络结构,由多层全连接层堆叠而成,常用来对每个输入点单独做特征变换。

把这384个切片潜在变量编出来之后,怎么还原成三维形状?这里用的是一个"散射融合"的解码过程:三个轴向的切片序列会被投影回一个共享的粗糙三维特征网格(16×16×16的分辨率),因为切片的分辨率可能比网格分辨率更细,多个相邻切片会合并映射到同一个网格平面上,用归一化求和的方式融合。

拿到这个粗网格之后,一个稀疏Transformer解码器负责精细化这些特征,接着经过两轮"自我剪枝式上采样",把分辨率从16的三次方一路提升到256的三次方,逐步细分活跃区域同时剔除空白区域。最后用一个线性层预测每个格子的SDF值、顶点偏移和插值权重,再用可微分的双重行进立方体算法把网格抽取成真实的三角网格表面。

SDF(有符号距离函数)*:记录空间中每一点到物体表面的最近距离,正负号表示点在物体内部还是外部,是三维重建里常用的隐式表示方式。

双重行进立方体算法*:一种从体素网格或SDF场里提取出三角网格表面的算法,是经典Marching Cubes方法的改进版本,支持可微分优化。

这套"切成薄片再拼起来"的思路,直接带来了效率上的巨大收益。论文的效率对比表里显示,SILSA只用384个token,比Trellis平均的近2万个token少了98%以上,比SparseFlex的8万多个token更是差了两个数量级。训练内存从Dora用的14.6GB降到8.7GB,训练时间从每轮迭代0.38秒降到0.21秒,推理时间从每个形状0.82秒压到0.34秒。换句话说,同样一张A100显卡,SILSA能跑得明显更快,还更省内存。

让拓扑结构变得"可监督":持续同调和贝蒂数

光有紧凑的切片表示还不够,因为普通的渲染损失函数(比如比较深度图、法线图、轮廓图的L1误差)根本不在乎物体的孔洞有没有被填平,支架有没有断开。

为了解决这个问题,SILSA引入了一套基于拓扑数学的监督信号,核心工具叫持续同调。

持续同调*:一种从拓扑学里借来的数学工具,通过逐步改变阈值来观察一个形状的连通组件和孔洞是如何"出生"和"死亡"的,由此生成一张记录这些事件的"持久性图"。

贝蒂数*:描述形状拓扑特征的数字,β0记录连通组件的数量,β1记录孔洞(环)的数量,β2记录封闭空腔的数量。

具体怎么用呢?解码器在生成最终的SDF网格之后,SILSA会沿着三个坐标轴,各均匀采样128个横截面,把每个截面转换成软性的占据图(用sigmoid函数平滑化0.5这个阈值附近的区域),然后在这些二维截面上计算持久性图,跟真实网格对应位置算出来的持久性图做比较。

这里设计了两个互补的损失函数。第一个叫"逐片拓扑匹配损失",它比较预测和真实的持久性图里每个拓扑特征(出生点和死亡点构成的一对数值),通过最优匹配的方式惩罚不该出现的虚假短命特征,同时保留真正持久存在的结构。第二个叫"切片间转移匹配损失",它关注的是相邻切片之间贝蒂数的变化量,也就是拓扑事件到底发生在哪个深度位置。

为什么需要两个损失而不是一个?论文的消融实验给出了很直观的答案:只用逐片匹配损失(只有LPH)时,拓扑误差是2.91;只用转移匹配损失(只有Ltrans)时,拓扑误差是2.87;两者都不用时,误差飙升到4.43;两个一起用,误差降到1.58。这说明单靠一个损失,模型能学到"这片截面该有几个洞",但学不到"这个洞该在哪个深度消失",反之亦然。两者合力才能把时间轴(这里是空间深度轴)上的拓扑演变完整地管住。

这让我想起检查一栋楼的消防通道图纸。如果你只检查每一层楼单独的平面图是不是合理(每层该有几个出口),却不去检查楼层之间的楼梯间位置是否对得上,很可能图纸拼起来后楼梯在三楼突然消失了。逐片损失管的是"每层平面图对不对",转移损失管的是"楼层之间接得上吗",缺一个都不行。

跨轴协调:体素锚点网格

三个轴向的切片序列各自被独立地去噪生成,这就带来一个新问题:怎么保证x轴切出来的结果、y轴切出来的结果、z轴切出来的结果,描述的是同一个物体?

如果三条轴的去噪过程完全独立进行,会发生什么?消融实验给出的数字相当触目惊心:Chamfer距离从默认的0.59暴涨到5.87,IoU从93.01跌到49.26,拓扑误差从1.58飙升到17.91。这几乎相当于生成结果完全失控。

SILSA给出的解法叫体素锚点网格(Volumetric Anchor Lattice,简称VAL),本质上是一个在Transformer内部持续存在的三维特征网格,充当三条轴向切片流之间沟通的"公共留言板"。

体素锚点网格(VAL)*:一个在生成模型每个Transformer模块内部共享的三维特征网格,不同轴向的切片token可以往这个网格里读取信息、写入信息,用来协调彼此,确保生成的x轴、y轴、z轴切片描述的是同一个连贯的三维物体。

每个切片token在这个网格里有一个明确对应的位置:x轴上深度为k的切片,对应网格里的一整个平面G[k′,:,:];y轴和z轴切片类似地对应另外两个方向的平面。这个对应关系是纯几何计算出来的,不需要额外学习参数。

每个Transformer模块里,切片token先在自己所在的轴内部做自注意力,然后去读取对应深度平面上锚点网格里已经积累的信息,再用一个带门控机制的方式把自己的新信息写回这个平面,门控系数由网络自己学习决定保留多少旧信息、写入多少新信息。

打个比方,这就像一个公司的三个部门各自在做同一个项目的不同模块,如果各部门完全闭门造车,互不通气,最后拼起来的产品大概率牛头不对马嘴。VAL相当于给三个部门设了一块共享白板,谁有了新进展就往白板对应区域更新一下,谁想了解别人的进度也去白板上看,而不是每次开会才交流一次。如果没有这块白板(也就是"无协调"的情形),实验数字已经说明了后果有多严重。

消融实验还比较了"直接跨轴交叉注意力"这个替代方案,它的表现其实也不差(CD 0.60,IoU 93.18,Betti-Err 1.64),但依然略逊于VAL(CD 0.59,IoU 93.01,Betti-Err 1.58)。这说明有一个持久的、空间锚定的共享记忆,比起让token之间随意两两互相看一眼的无约束注意力机制,协调效果更稳定可靠。

网格分辨率D设成16时效果最好,设成8时信息太粗(CD涨到0.65),设成32时反而CD和Betti-Err都略微变差(0.60和1.62),说明过细的锚点反而增加了沟通成本却没换来更好的结构准确性。

实验结果:数字说话

论文在Trellis-500K数据集上训练,用了来自ObjaverseXL、ABO、3D-FUTURE、HSSD这几个来源的三维资产,评测用了200个Toys4K物体和50张真实世界拍摄的图片。

在图像生成3D这个任务上,SILSA和多个代表性方法(Shap-E、LN3Diff、Direct3D、3DTopia-XL、InstantMesh、GaussianAnything、XCube、Dora、SAR3D、Trellis、SparseFlex)做了对比。结果显示SILSA拿到了最好的FD、PSNR、覆盖率(COV)和MMD指标,PSNR从SparseFlex的30.12提升到32.74,相对提升8.7%;覆盖率从73.12%提升到79.08%,绝对提升了近6个百分点。

PSNR(峰值信噪比)*:衡量重建图像与真实图像之间差异的指标,数值越高说明重建越接近原图。

覆盖率(COV)和最小匹配距离(MMD)*:两个衡量生成分布多样性和真实性的指标,覆盖率越高说明生成结果覆盖了真实数据分布的更多样貌,MMD越低说明生成样本和真实样本的平均距离更小。

在VAE重建质量这项单独评测里,SILSA相比最强基线SparseFlex,Chamfer距离从0.61降到0.59,F-Score@0.01从96.18提升到96.79,IoU从92.54提升到93.01,拓扑误差从1.743降到1.582,相对下降9.2%。这个拓扑误差的下降尤其值得留意,因为它直接说明了,SILSA不只是表面重建更准,连接组件和孔洞这类结构性细节也被更好地保留下来了。

在效率这个维度,SILSA用384个固定token对比Trellis平均约2万个token、SparseFlex平均约8.7万个token,训练内存和推理时间都有数量级的下降,同时还达到了最好的重建质量,这种"又快又准"的组合在之前的方法里很少见到。

这篇论文的思路,很自然让人想到2023年的OReX工作,那篇论文展示了稀疏的平面横截面本身就包含了丰富的几何信息,可以用来做神经场重建。SILSA的区别在于,它不是把切片当作外部观测数据去重建一个已知形状,而是把切片直接变成一个可学习的生成式潜在表示,用来从零生成全新的三维物体。这个思路上的转变,让切片表示第一次真正进入了生成式建模的核心环节,而不只是停留在重建辅助工具的位置上。

另一个值得对照的方向是拓扑感知的分割学习,比如2019年Hu等人提出的拓扑保持分割方法,以及后续像clDice这种针对管状结构的拓扑损失。这些工作证明了持续同调在2D图像分割里管用,但一直苦于全三维体积的持续同调计算代价太高,很难直接搬进高分辨率生成训练里。SILSA找到的折中方案,是把拓扑监督限制在切片横截面这个更小的计算单元上,用逐片匹配加切片间转移匹配这套组合,把本来不可行的全体积拓扑监督,变成了可以在训练循环里反复计算的轻量操作。

写在后面

读这篇论文时,最让我意外的一点,是它把一个看起来很"数学"的概念,也就是持续同调和贝蒂数,直接塞进了日常的三维生成训练流程里,而且做得相当克制:没有去算整个三维体积的拓扑特征(那样计算量会爆炸),而是巧妙地把问题降维到二维横截面上,用128个采样切面去近似整个物体的拓扑演变。这种"用低维度采样去逼近高维度结构"的思路,其实在很多工程领域都能看到影子,比如医学CT成像本身就是靠一层一层的横截面堆叠出三维器官的影像。

另一个让我反复琢磨的细节是消融实验里那组"单轴切片"的数据。即使把单轴的切片数量提高到384片(跟三轴总数相同),拓扑误差依然高达5.92到6.18,远超三轴联合的1.58。这说明问题不在于"切片够不够细",而在于缺失的那两个正交方向的信息,根本没办法靠单一方向的更高密度采样补回来。这给了我一个挺朴素的启发:有些信息缺口,不是靠堆数量能填上的,必须从根本上换个观察角度。

这篇论文目前还没有解决的一个问题,是它对训练数据分布之外的奇异结构(比如某些罕见的建筑拓扑、极端细密的编织结构)到底能适应到什么程度,论文自己也在局限性部分提到了这一点。切片表示能不能应对拓扑复杂度远超训练集的全新形状,这大概是接下来值得继续追问的方向。

Q&A

Q1:SILSA是什么?

A:SILSA是一种三维生成框架,它把三维形状沿x、y、z三个坐标轴各切成128片重叠的薄片,用这384个切片潜在向量代替传统的稀疏体素token,既保持了局部结构的清晰对应关系,又大幅降低了生成所需的token数量和计算成本。

Q2:SILSA和Trellis、SparseFlex这些方法比起来优势在哪?

A:SILSA只用384个固定token,比Trellis的近2万个和SparseFlex的8万多个token少了98%以上,同时在PSNR、覆盖率、拓扑误差等多项指标上都优于这两者,训练内存降低40.4%,推理时间缩短58.5%。

Q3:SILSA怎么保证生成的三维物体不会出现孔洞被填平、支架断裂这类结构错误?

A:SILSA引入了基于持续同调的拓扑监督损失,分别比较每个横截面的持久性图是否匹配真实结构,以及相邻切片之间贝蒂数的变化位置是否对齐,这套组合让拓扑误差比最强基线降低了9.2%。

加载中...