1. 为什么非要把三维高斯场塞进世界模型1.1 从我的一个困惑说起机器人到底怎么“想”空间做了几年的具身智能相关研究我越来越觉得现在大多数机器人的“脑子”其实很割裂感知模块是感知模块决策模块是决策模块两边各跑各的。感知那边用三维高斯场3D Gaussian Splatting简称3DGS把场景重建得漂漂亮亮渲染出来帧帧都能当壁纸可一旦到决策这边模型根本不知道这个场景是什么、哪个东西能动、动了以后会怎样。喂给它的往往是一堆投影后的二维图像或者是稀疏的点云文件三维空间里那些真实的几何关系、物体之间的遮挡与支撑关系全都被“压扁”了。GaussianWAM这个工作说白了就是想把这层窗户纸捅破。它的核心命题是能不能把三维高斯场里的几何和语义信息提炼成世界-行动模型World-Action ModelWAM可以直接消费的表示让机器人从“看得到”真正变成“想得明白”。这里我先解释一下世界-行动模型是什么。世界模型这个概念来自强化学习和认知科学它的核心能力是做“心理演练”——给定当前状态和候选动作在内部预测下一状态会变成什么样而不是真的去推一下物体才知道结果。所谓世界-行动模型就是在世界模型的基础上显式加上动作分支模型接收状态序列和动作序列预测后续的状态变化。它既是世界模型也是行动评估器。问题是过去这类模型的输入基本是图像或者视频帧二维的预测天然缺少三维空间的因果约束——一个球从桌子边缘滚下去二维画面只能看到“像素在动”但模型很难理解“这是因为球越过了边缘重力接管了”。所以GaussianWAM的思路非常直接与其在世界模型前面加一堆复杂的视觉编码器去猜三维结构不如直接把三维高斯场当输入。整个系统的定位是感知端重建场景得到三维高斯场提炼端把高斯场转成紧凑的token序列决策端用这些token训练一个世界-行动模型。这个工作适合谁看我觉得是做具身智能、机器人操作、视觉语言动作模型VLA的研究人员和工程师。如果你手头正好有3DGS相关的数据管线想往决策方向延伸这篇文章应该能给你不少可以抄作业的细节。1.2 3DGS对比神经辐射场和点云赢在哪输在哪可能有人会问想做三维世界的世界模型为什么偏偏选高斯场不用神经辐射场NeRF也不用原始点云我一开始也有这个疑问后来动手对比了几种表示方式才理解这个选择背后的逻辑。NeRF的优势是连续隐式表示渲染质量高几何表面可以通过密度场提取。但它的短板恰好卡在世界模型的需求上查询一个点需要沿光线走几十个采样点做一次体积渲染要跑一遍整个网络这种东西没法直接做token化也很难局部编辑。而且NeRF的优化非常依赖视角覆盖常用场景训练要花很长时间。作为离线重建工具它没毛病但作为在线决策的输入表示实时性和局部性都跟不上。点云倒是轻量数据结构也简单但问题在于它没有“场”的概念——你手里只是一堆无序离散点不知道表面朝向不知道空间占有率渲染更不可能。世界模型想让场景动起来起码得知道“这个面是实的还是空的”点云在这个问题上天然吃亏。更重要的是点云没有语义承载的天然单位你想给每个点绑一个语义标签信息密度太低又不稳定微小的噪声就会导致后续的预测崩掉。GaussianWAM选择3DGS看中的就是它的显式性和可微渲染能力。三维高斯场里的每个高斯Gaussian本质上是一个带位置、旋转、尺度、颜色、不透明度的小椭圆体场景就是一堆这样的小椭圆的集合。显式意味着你可以索引、剪枝、融合甚至对局部区域做增量更新可微渲染意味着你能用图像损失直接监督高斯属性——这为后面的语义提炼提供了一个很自然的载体每个高斯都可以绑一个语义特征向量就像给场景里的每一个“物质单元”发了一张身份证。这种表示对世界模型来说几乎完美它既有几何位置、形状、大小、朝向又有外观颜色、不透明度还能扩展语义而且理论上可以局部编辑。当然3DGS也有自己的毛病后面我会专门讲踩坑。这里的结论是三维空间上的预测问题选3DGS做底层表示是目前平衡精度、速度和可编辑性最好的方案之一。GaussianWAM就是在这个基座上把几何和语义提炼出来喂给世界模型。2. 几何和语义是怎么“提炼”出来的2.1 第一步先训出一个干净的高斯场GaussianWAM的输入不可能是随随便便的3DGS模型前提条件是得先有一个重建得足够干净的三维高斯场。这一步我强调“干净”两个字是因为高斯场里的杂质会直接污染后面所有环节。如果你的现场有大量漂浮物floaters、背景噪点或者表面模糊提炼出来的token序列也一定是脏的世界模型学出来的因果就是错的。训练一个合格的3DGS常规流程是先准备多视角图像和对应的相机位姿这个位姿一般用COLMAP做运动恢复结构SfM求出。SfM的输出点云就是高斯场的初始化锚点——每个初始点位放一个高斯后续优化过程中再自适应地分裂、克隆、剪枝。我实际跑下来训练参数里有几个值得注意位置学习率一般设1.6e-4到2e-4球谐系数学习率低一些因为颜色是用球谐函数表示的不透明度opacity一旦出现超过阈值的数值就需要加正则——如果opacity冲到1附近的点太多场景表面会显得特别“燥”渲染出来有密密麻麻的纹理。还有最大高斯数量3DGS原始设定是每轮测试后根据视图空间位置梯度决定是否要clone或者split我建议把整体高斯数量控制在几十万级别别盲目堆到几百万不然后面token化时计算压力非常大。另外GaussianWAM对于场景的纹理丰富度也有要求。纯白墙面、单色地面这种低纹理区域SfM点云稀疏高斯场容易在优化中产生奇怪的形状表面会“鼓包”。我在复现的时候给这些区域单独加过视觉SLAM的深度先验效果有提升但实现复杂度也上去了。如果你只是验证GaussianWAM的整体流程建议先从纹理丰富的室内场景开始比如常见的Replica、ScanNet数据集。等流程跑通再往低纹理、高反光的真实场景迁移。2.2 第二步给每个高斯“上户口”把语义绑上去高斯场训练完之后我们手里有一堆高斯每个高斯有位置、旋转、尺度、颜色、不透明度但这些只描述了场景“长什么样”距离“这是什么”还差一步。语义提炼的第一步就是给每个高斯绑定一个语义描述。我在实验里选过两条路一条是用二维分割模型比如SAM在多视角图像上做分割然后把二维标签投影回三维给每个高斯投票决定归属另一条是用视觉语言模型比如CLIP提特征把每张图的patch级特征反投影到高斯上得到每个高斯的语义嵌入。前者适合需要精确物体边界的情况后者适合需要开放式语义的情况GaussianWAM的完整设计倾向于后者加细粒度分割的融合。实操时有个核心问题要处理一个高斯可能会被多张视图观测到每张视图上的语义标签可能还不一样因为视角变化、遮挡、分割误差。我的做法是加权的多数投票每个高斯的最终语义特征等于所有可见视图特征的加权平均权重由该高斯在当前视图里的投影面积和该视图的置信度共同决定。别小看这个加权如果不做权重处理边界区域的高斯语义会特别糊后面世界模型预测时会出现“把杯子当桌子”这种低级错误。更细一步几何信息的提炼不是只保留高斯的原始坐标就行。世界模型需要的是结构化的空间关系而不是三万多个无序小椭圆的坐标。我会先做一次基于空间距离的高斯聚类把稠密的高斯聚成超体素super-voxel级别的小块然后每个小块统计自己的空间质心、包围盒尺寸、主轴方向、表面高斯密度分布。这些统计量构成了几何token的原始素材。换句话说这一步的关键是从“十万个高斯”压缩成“几百个带语义的小块”每一块都是世界模型能感知的最小空间单元。这个设计也直接影响后面的token序列长度和模型推理速度。2.3 第三步把高斯场变成世界模型能读的Token到了这一步才是“提炼”二字真正落地的地方。一个世界模型本质上是个序列模型它吃的是token序列。你要把三维场景交给它就得设计一个合理的“三维tokenizer”。我在复现时采用的做法和GaussianWAM论文里的思路基本一致对每个超体素块用一个MLP编码器把它的几何特征质心坐标、尺度、朝向、形状统计量和语义特征CLIP嵌入或分割标签嵌入拼在一起映射到一个固定长度的token向量。以室内场景为例一个标准房间里大概会分成200到400个超体素块每个块对应一个token再加上一个全局场景token编码整体房间布局整段token序列也就三四百的长度对Transformer来说非常友好。这个环节有三点值得注意。第一token必须包含显式的空间位置信息因为Transformer本身没有内置空间概念不像CNN天生有局部归纳偏置。你不把位置信息放下进去模型就不知道“桌子和杯子在一起”意味着什么。第二语义和几何的融合不宜太早也不宜太晚。太早了语义噪声会干扰几何聚类太晚了两个分支各自迭代又难以建立关联。我建议先把几何特征和语义特征分别归一化再拼接让MLP自己学融合权重。第三token序列要支持动态长度和场景编辑。一旦场景变了比如杯子被拿走了你只需要删除对应的token其他部分保持不动世界模型不需要重新推理。这一点是Gaussian场显式表示的核心红利NeRF和点云都做不到。在GaussianWAM里这个token化过程被设计成可微的意味着整个提炼模块可以端到端训练。训练时不仅要求世界模型预测准确还要求token编码器保留足够的信息用于重建——也就是反过来要求从token能重建出接近原始的高斯场。这样token就不是一个随便压出来的瓶颈而是真正保留了场景关键信息的最小充分表示。3. 世界-行动模型是怎么“吃”这些Token的3.1 模型结构选型用Transformer做状态转移世界-行动模型的结构我最初看了几篇前人工作有的用LSTM有的用扩散模型。GaussianWAM走的是Transformer路线我想了想这个选择有其必然性。早期世界模型处理的是图像序列图像本身高维冗余CNN-LSTM那套还算能用但在GaussianWAM里输入已经是高度抽象的token序列每个token都代表一个有几何位置和语义含义的超体素块这时候用自注意力机制能天然建模token之间的关系——哪个物体在哪、哪个物体挨着哪个、哪个物体能支撑哪个——这些关系正好是三维场景推理需要的。模型输入分两路一路是当前状态token序列一路是动作token。动作token怎么定义取决于你的机器人平台——如果有机械臂动作就是末端位姿或者关节角速度如果是移动机器人动作就是线速度加角速度甚至可以是高层次的操作指令比如“拿起红色的杯子”。GaussianWAM设计了一个动作编码器把原始动作向量编码成与状态token同维度的向量然后拼到状态token序列后面。整个序列输入到标准Transformer encoder-decoder结构里输出下一时刻的token序列预测。为了配合世界模型做行动评估我在训练时额外加了一个预测头专门输出“这个动作是否可行”的二分类结果。简单说模型不仅要预测“做了这个动作会发生什么”还要判断“这个动作在物理上是否靠谱”。比如机械臂伸手去抓杯子世界模型预测杯中会移动但行动头判断置信度只有0.2那这个动作就会被丢弃再去采样下一个候选动作。这种设计非常适合和规划算法结合你可以先用一个粗粒度policy生成几十个候选动作再用GaussianWAM做批量推断选出“未来效果最好的那个动作”。整个过程不碰真实环境就是模型在内部“脑补”成本比任何仿真器都低。3.2 训练目标重建损失加转移损失加语义一致性GaussianWAM的训练目标不是单一的。我在实验里用了三个损失函数叠加。第一个是token级的重建损失要求模型预测出的下一个时刻的token序列和真实的下一状态token序列尽可能接近用L2距离衡量。注意这里不是像素级别的重建是token级别的——模型不需要生成图片只需要预测每个超体素块下一时刻的位置、朝向和语义分布有没有变化。第二个是语义一致性损失对于那些不应该发生变化的静态物体预测前后语义token的余弦相似度应该保持很高对于被操作的物体语义token可以变但必须符合动作的语义比如“抓取”动作后物体token的变化方向应该和“抓取导致的位置改变”一致。第三个是行动评估头用的交叉熵损失和二分类标签做监督。训练数据从哪里来这是做世界模型最头疼的问题。GaussianWAM的解决方案是用仿真环境生成成对的“状态-动作-状态”三元组。具体来说在仿真环境里摆放任意场景用3DGS重建出初始高斯场执行一个动作再重建执行后的高斯场形成一对训练样本。一个仿真环境可以批量生成几千组数据而真实环境中你可以用机械臂做遥操作或者自动数据采集配合多相机系统实时重建。这个数据管线听起来直接但坑也不少连续两次重建出的高斯场token数量可能不一样token排序也不稳定这会导致训练时“上一时刻的第3个token”和“下一时刻的第3个token”可能对应场景里完全不同的物体。我处理这个问题的办法是训练前先跑一遍token匹配——用几何质心的最近邻匹配加上语义特征的交叉匹配把两帧之间的token对应关系先建立起来再进入训练流程。这一步不能省省了模型会学疯掉。最终训练时我建议先用大规模仿真数据预训练再用小批量真实数据微调因为仿真数据里动作-状态的对应关系是完美已知的不会出现重建误差和真实物理之间的偏差。微调阶段把学习率降低一个数量级让模型慢慢适应真实场景中的噪声和不确定性。整个训练时长在单张A100上大概要跑两到三天如果数据量小一天内也能看到模型有明显的预测能力。4. 复现实操从0到1跑通GaussianWAM4.1 环境准备与依赖整个项目的依赖其实不难装但版本卡得很死尤其是涉及到3DGS和Transformer两个生态的衔接。我建议用Python 3.10加PyTorch 2.x的稳定组合CUDA版本用11.8或者12.x都行前提是能编译三维高斯溅射3DGS的原生CUDA算子。顺便说一句3DGS的训练代码必须用官方源码编译PyPI上虽然有一些封装好的包但性能损失明显我实测下来同一个场景官方代码训出来的渲染质量比封装包高将近两个PSNR点差距很大。世界模型部分可以直接用HuggingFace上的Transformer库做backbone。关键依赖还有两个一个是用于SfM和位姿估计的COLMAP用来从多视角图像里得到相机参数和稀疏点云另一个是Open3D用于后续的点云处理、超体素聚类和可视化。建议把conda环境单独建一个不要和日常开发环境混在一起因为3DGS的编译过程很敏感换个PyTorch小版本可能就要重新编译。4.2 数据准备与预处理GaussianWAM的训练数据包含两个层级的需求重建层级的输入是单个场景的多视角图像序列训练层级的输入是同一场景多次变化后的成对状态数据。先说重建级以Replica数据集为例每个场景有几十个相机位姿图像分辨率大概在640乘480。我会先跑COLMAP自动稀疏重建这一步约耗时10到20分钟取决于图像数量。拿到相机位姿和稀疏点云后直接输入3DGS训练脚本。这里有个小经验COLMAP的匹配阶段用词袋模型vocabulary tree会比暴力匹配快很多尤其是场景有几十张图的情况下能省一半时间。再说训练级先在仿真环境里随机初始化一批物体摆放位置对每个场景做一次3DGS重建作为初始状态然后指定一个动作比如逆运动学求解机械臂末端位姿把物体从A点移动到B点移动后再次做3DGS重建。这样“初始高斯场-动作-后续高斯场”就是一个三元组。为了增加数据量同一场景可以连续做多个动作形成多步轨迹。仿真环境里的材质和光照不要调得太“完美”适当加一些噪声和随机光照这样训练出来的世界模型泛化到真实场景时会可靠很多。4.3 训练流水线高斯场、Token编码器、世界模型三阶段联调我强烈建议分三阶段训练不要一上来就端到端。阶段一冻结GaussianWAM的感知部分只训练3DGS重建模块。用多视角视图的渲染损失和LPIPS感知损失把每个场景的高斯场训好。这个阶段的产物是一批可靠的3DGS模型质量要过关后面所有环节都依赖这些重建结果。阶段二训练token编码器和解码器。输入是3DGS模型导出的高斯属性输出是token序列同时用一个解码器要求能从token还原出高斯场。这一步本质上是训练一个神经压缩器。我在训练时发现如果token长度压得太短比如少于128重建出来的高斯场会丢掉很多几何细节比如物体的小把手、细腿直接消失如果压到512以上世界模型的训练成本又上去了。300上下是一个合理的折中。阶段三冻结token编码器训练世界-行动模型。训练数据是已经token化好的状态序列加上动作序列。这时可以放心地把batch size调大因为输入已经压缩成几百个token不需要再做高维图像编码显存压力小很多。整个阶段跑1到2万步观察转移预测的损失有没有降到合理区间再决定是否解冻token编码器做端到端微调。端到端微调对效果有提升但训练稳定性差一些需要精细控制学习率和梯度裁剪新手不建议一上来就端到端。4.4 评估指标怎么判断这个模型训练合格了GaussianWAM的评估不能只看一个数字至少要从三个维度看。第一重建质量。3DGS阶段用PSNR峰值信噪比、SSIM结构相似度、LPIPS感知相似度对比新视角渲染结果。PSNR在28以上算及格LPIPS在0.05以下算感知质量不错。第二世界模型的预测质量。在测试场景里给模型一段已知状态序列和动作序列让它预测后续状态token然后解码成高斯场渲染出图像和真实执行后重建的高斯场做对比。这里PSNR要求不用太高因为预测本身存在不确定性20到24之间就是可用水平更重要的是语义一致性得分——预测帧里被操作物体的语义类别和真实结果是否一致。第三行动评估准确率。给出一组正样本动作能成功完成任务的动作和负样本动作物理上不可行或者任务无关的动作模型二分类的准确率应该做到85%以上。低于这个线说明世界模型还没有真正理解动作和状态之间的因果关系需要加大训练数据或者检查token里是否丢失了关键几何信息。5. 踩坑实录与排查速查表5.1 我实际遇到过的几个坑第一个坑3DGS重建时出现严重浮游物。这几乎是所有新手都会遇到的。浮游物是场景里那些漂浮在半空中的小高斯渲染时看起来像噪点对后续token化影响极大。原因一般是SfM点云里有离群点或者训练时学习率过高导致高斯分裂失控。解决措施分两步训练前对SfM点云做统计学离群点过滤去掉与邻居距离过大的点训练中降低不透明度的初始化值从0.1开始而不是默认值并在每轮优化结束后做一次小半径的浮游物剪枝。第二个坑语义特征在不同视图之间互相打架。同一把椅子从正前方看是“椅子面”从侧面看可能被SAM分割成“椅子腿”反投影回三维高斯后同一个高层语义标签在相邻视图里从椅子整体变成了零部件级别。这个问题我在聚类阶段差点栽了后来想了两个办法一是统一分割粒度所有视图都用相同尺度的分割prompt不要有的视图用“整椅”有的用“椅腿”二是在加权投票阶段给分割置信度低的视图降权宁愿牺牲一些语义覆盖率也不要引入错误标签。语义标签错了世界模型后续推理会随错就错而且这种错误极其隐蔽排查起来非常费劲。第三个坑Token序列里物体索引在两个状态之间发生了交换。比如场景里有两个相同的球一个在桌子左端一个在右端动作把左边的球推下桌子。下一时刻token化之后模型可能把剩余那个球的特征和掉下桌子的球搞混导致预测结果完全错误。这个问题的根源在于token排序不稳定。我的处理方式是给每个超体素块生成时绑定一个“实例ID”这个ID在场景编辑和后续时间步中保持不变而不是依赖每次聚类的输出顺序。同样在世界模型输入位置编码时把实例ID嵌入加进去能显著减少这类混淆错误。5.2 常见问题速查表问题表现可能原因排查手段与解决建议3DGS渲染出现大量漂浮物SfM点云离群点未清理过滤离群点降低初始不透明度训练后剪枝语义标签视角间不一致分割粒度不统一或置信度低统一分割prompt加权投票时降权低置信度视图Token之间物体索引混淆聚类输出次序不稳定引入实例ID并加入位置编码建立跨时间步匹配世界模型预测语义漂移训练数据序列长度不足增加多步轨迹数据加入语义一致性损失行动评估准确率低负样本设计不到位增加物理不可行和任务无关的负样本比例端到端微调训练发散冻结阶段不充分或学习率过高先跑满前两阶段微调学习率降低10倍并加梯度裁剪5.3 两条拿时间换来的经验最后讲点不太容易写进论文但实际很值钱的经验。第一数据清洗比模型设计更花时间。GaussianWAM的数据管线四步环环相扣任何一步出了脏数据后面模型再强也救不回来。我在前期迭代项目时至少有三分之一的时间花在写数据质量检查工具上渲染重建结果对比图、语义标签覆叠可视化、token序列对应关系热力图。这些工具到现在还在用而且我觉得它们比模型本身更有复用价值。第二这个架构非常适合在仿真环境和真实环境之间做迁移。先用大量仿真数据把世界模型训到能用再小批量采集真实数据微调模型在真实环境里的幻觉明显下降。特别是机械臂抓取这种任务仿真里学到的“物体被抓起来”的token转移规律在真机微调后可以直接泛化到新物体上这种常识的迁移能力是纯端到端策略学不出来的。根据我个人这几轮实验的体会GaussianWAM最大的价值不是某一个模块多精妙而是把三维感知和序列决策这两条原本平行的线真正拧成了一股绳。这套思路背后的趋势是明确的具身智能的下一个阶段模型必须同时具备空间推理和因果预测能力而三维高斯场恰好是这两者最自然的交汇点。如果你手头正好有3DGS和操作相关的数据资产认真把GaussianWAM这套流程跑一遍大概率能提前看到端到端空间智能的雏形。