ReSplat: Learning Recurrent Gaussian Splatting¶
会议: ECCV2026
论文: ECCV 原文
PDF: 论文全文
项目: ReSplat
代码: https://github.com/cvg/resplat
领域: 重建与渲染
关键词: 高斯泼溅、稀疏视图合成、学习优化、渲染误差反馈、循环细化
一句话总结¶
ReSplat 先从带位姿图像构造紧凑高斯场,再把该场景对输入图像的解释误差交给共享循环网络修正,而非测试时求梯度;在 DL3DV 八视图实验中,固定约 246K 高斯由初始化的 26.21 dB 提升至四轮后的 27.70 dB,同时保留可反复快速渲染的显式场景。
研究背景与动机¶
前馈高斯重建把稀疏图像一次变成三维表示,避免每个场景重新优化数千步。但一次预测同时承担深度、跨视图融合和外观估计,复杂几何或训练外场景会留下误差;预测结束后,模型通常没有机会检查“这些高斯是否真的解释了给定照片”。逐场景3DGS恰好相反:它通过反复渲染和优化纠错,却依赖显式梯度和大量迭代,稀疏视图下还可能越优化越过拟合。因此问题不是是否允许迭代,而是能否把有用的纠错过程学成少量廉价前向步骤。
测试时输入照片本来就存在,这提供了不需要新视图真值的反馈:将当前场景渲染回已知相机,观察颜色和结构哪里不一致,再修正场景。若只把循环网络接到逐像素高斯场之后,每张高分辨率输入都带来大量高斯,三维邻域交互和每轮渲染会迅速变贵。初始化不仅要给出好起点,还必须决定一个后续反复更新负担得起的表示预算。
ReSplat 将两者联合设计:用三维上下文弥补较少锚点的信息损失,再让同一更新器根据最新渲染误差调整高斯与隐状态。“循环”针对一个静态场景的反复细化,不是动态物体的时间建模。核心 idea:在紧凑显式表示中,把测试时可观测的输入视图残差变成学习更新的输入,使场景能够纠错而不需要测试时更新网络权重或计算优化梯度。
方法详解¶
整体框架¶
输入是多张 RGB 图像及相机内外参,输出是支持新视图合成的显式三维高斯场。紧凑上下文初始化只执行一次;之后循环执行双域渲染误差、全局误差传播和状态化循环更新,每次都用更新后的场景重新渲染。新视图真值只用于训练或离线评测,不进入测试时反馈回路。
%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
A["输入图像与相机"] --> B["紧凑上下文初始化"]
B --> C["当前高斯与隐状态"]
C --> D["双域渲染误差"]
A -->|已知输入作参照| D
D --> E["全局误差传播"]
E --> F["状态化循环更新"]
C -->|当前参数及记忆| F
F -->|重新渲染下一轮| C
F -->|结束细化| G["固定高斯场<br/>新视图渲染"]
H["训练目标视图"] -.->|逐轮渲染监督| F
显式参数控制真正渲染出的内容,隐状态保存几何和外观参数之外的上下文。推理时变化的是这两种场景状态,网络权重保持不变。“无梯度”仅指推理不显式求场景优化梯度,训练更新器仍然需要反向传播;输入图像作反馈也不等于给模型额外提供不可见相机的答案。
关键设计¶
1. 紧凑上下文初始化:先控制表示规模,再用三维交流补偿压缩
初始化借用 DepthSplat 的深度预测架构,将全分辨率深度缩至高、宽各1/4,再通过已知相机反投影到统一三维坐标系。多视图默认配置因此生成 \(M=NHW/16\) 个锚点,而非每个输入像素一个高斯;压缩发生在预测起点,不是先生成密集场再剪枝。每点还带有图像特征,Small为256维、Base为512维。
少量点若独立解码,会丢失纹理和表面细节。回归器因此通过六个交替的kNN与全局注意力块,让点交换局部表面信息和跨区域上下文,再用两层MLP解码透明度、协方差相关参数和球谐外观,点坐标成为初始中心。所有高斯属性拼成59维向量,聚合后的特征作为初始隐状态。这里的压缩收益需要上下文网络支撑,不是降低采样密度天然不会损害质量。
初始化kNN取 \(k=16\)。坐标参考系使用空间上居中的输入相机,对顺序轨迹通常是中间帧,以缩小场景点的空间分布跨度;这依赖给定相机,不是在网络中额外完成位姿估计。全局注意力先把1/4分辨率特征用pixel unshuffle再压缩到高、宽各1/16的网格计算,然后pixel shuffle回去,以避免对所有高分辨率token直接全局交互。临时网格压缩不再次改变高斯数量。
默认16倍高斯压缩不能套到所有实验。双视图低分辨率配置只把点数压缩4倍,并从每点解码4个高斯,最终数量与逐像素方法相同;少视图时冗余更少,作者选择保留更多表示容量。
2. 双域渲染误差:让更新器同时看见颜色偏差与结构偏差
每轮先用当前高斯渲染全部输入相机。像素误差为渲染RGB减输入RGB,保留偏差方向;经空间因子4的pixel unshuffle把局部像素排列进通道,形成1/4分辨率网格。它不同于直接平均池化,不会立刻将同一局部块的正负残差相互平均掉。之后线性层和Layer Normalization将其投到与特征分支相同的通道维度。
特征误差使用ImageNet预训练ResNet-18的前三阶段,取1/2、1/4、1/8分辨率特征,双线性缩放至1/4后拼接,形成256维特征。分别编码渲染图和输入图,再相减;最终把像素误差与特征误差逐元素相加。前者保留直接颜色不一致,后者使结构和邻域上下文也成为反馈。这不是优化梯度,也不是对误差图进行最近邻匹配。
训练损失中的VGG感知距离与这里的ResNet误差编码是不同机制:一个决定怎样监督网络,一个是推理更新器实际可以读取的观测。表6a中只用特征误差已强于只用RGB,而两者相加仍更好,说明增加的并非同一信息的重复表达。
3. 全局误差传播:不要让高斯只读取生成它的那个像素位置
初始高斯与压缩误差条目数量一致,最直接的关联是按原输入网格一一拼接。但高斯在渲染时可覆盖一片像素,并从多个相机被观察;原来的锚点索引不代表它对图像的全部影响区域。只读该索引附近的残差,会遗漏其他视角对相同几何或外观的约束。
ReSplat先对误差特征做全局注意力,让每个条目聚合所有输入视图中的反馈,再与对应高斯参数、隐状态拼接。这样保留网格到锚点的关联,又不将信息来源锁死在该局部格子。全局注意力同样使用临时unshuffle/shuffle降低token数量;恢复后的误差仍与固定高斯集逐条对应。它是学习的信息传播,不应被描述成由可微渲染器计算梯度再精确反投到每个高斯。
4. 状态化循环更新:记住此前的修正,并从新的残差继续推断
更新器以当前高斯、隐状态和传播后的误差为输入,用四个kNN注意力块建模三维局部结构,这里取 \(k=8\)。四层MLP预测高斯参数增量,网络同时预测隐状态增量;图2给出的更新关系可以简写为:
其中高斯参数决定渲染,隐状态保存初始特征和后续更新所需的潜信息。每轮都重新渲染,更新器因此处理“剩余错误”,而不是把同一残差重复输入。不同轮次共享参数,更多迭代不意味着新增一套网络。高斯数量也始终固定,收益不是来自自动增密或剪枝。
训练随机采1–4轮,测试可按预算选择轮数;约四轮后饱和是实验观察,不是数学收敛保证。全局kNN默认CUDA搜索的二次复杂度在大量点时成为瓶颈,论文给出固定大小候选集的局部替代:从同视图空间邻域和邻近相机投影获取候选,再按真实三维距离选最近邻。这保证的是候选集内精确选择,不是整个点云的全局近邻保证。
一个完整示例¶
八张 \(512\times960\) 输入按默认配置产生 \(8\times512\times960/16=245{,}760\) 个高斯,表1取整为246K;逐像素方法对应 \(3{,}932{,}160\),记为3932K。
- 深度和上下文网络给出初始场景与隐状态,此时新视图PSNR为26.21 dB。
- 将当前高斯渲染回八个输入相机,计算RGB及ResNet特征残差,全局传播后预测第一轮增量,PSNR达到27.15 dB。
- 重新渲染已经修正的高斯,继续处理剩余误差;第二轮达到27.51 dB,第四轮达到27.70 dB,数量始终246K。
- 结束重建后,从新相机只需渲染最终高斯场,不必每次重新运行四轮重建。输入图像为反馈依据,新视图真值没有参与测试时更新。
可以把窗框看作直观解释:颜色和结构残差可能提示相关高斯的外观、位置或形状仍需调整。但本文没有给出窗框专门消融,不应把这一例子写成已测出的部件级更新规律。
损失函数 / 训练策略¶
训练先学习初始化,再冻结初始化、仅训练循环网络。初始阶段使用目标视图的L1与VGG感知损失,感知项权重0.5;输入深度使用边缘感知平滑正则,权重0.01。后者在平坦图像区更鼓励深度平滑,在明显图像边缘处减弱约束,不需要真实深度标注。
循环阶段对每一轮更新后的目标视图渲染结果施加渲染损失,较早轮次以 \(\gamma=0.9\) 折扣,后期预测权重更高。缓存中部分公式抽取损坏,此处依据清晰正文描述目标,不猜补全部实现符号。训练需要目标视图监督,不能因为推理反馈仅用输入就称整个训练无监督。
实现使用AdamW以及gsplat中基于Mip-Splatting的渲染器。默认Base为223M参数,其中初始化209M、循环14M;消融Small为77M,分别62M和15M。当前缓存未包含附录学习率、batch size与训练时间,不补造这些参数。
实验关键数据¶
主实验¶
表1在DL3DV的140个测试场景中使用八张 \(512\times960\) 输入图像。PSNR/SSIM越高越好,LPIPS越低越好;时间单位为秒,高斯数沿用原表取整。“重建时间”是得到场景的成本,“渲染时间”是随后单视图输出的成本。
| 方法 / 更新轮数 | PSNR | SSIM | LPIPS | 高斯数 | 重建时间 | 渲染时间 |
|---|---|---|---|---|---|---|
| 3DGS / 4000 | 23.46 | 0.770 | 0.224 | 359K | 70 | 0.0009 |
| MVSplat / 0 | 22.49 | 0.764 | 0.261 | 3932K | 0.129 | 0.0030 |
| DepthSplat / 0 | 24.17 | 0.815 | 0.208 | 3932K | 0.190 | 0.0030 |
| ReSplat / 0 | 26.21 | 0.842 | 0.185 | 246K | 0.311 | 0.0007 |
| ReSplat / 1 | 27.15 | 0.859 | 0.169 | 246K | 0.437 | 0.0007 |
| ReSplat / 2 | 27.51 | 0.865 | 0.163 | 246K | 0.563 | 0.0007 |
| ReSplat / 4 | 27.70 | 0.868 | 0.160 | 246K | 0.816 | 0.0007 |
八视图主实验中,ReSplat以固定246K高斯在四轮更新后达到27.70 dB PSNR,优于DepthSplat的24.17 dB。完整差值3.53 dB中,初始化已贡献2.04 dB,循环自身再增加1.49 dB,不能把全部差值归功于更新器。
渲染约快4倍,但重建0.816秒慢于DepthSplat的0.190秒;这种取舍适合需要较高质量、并反复渲染同一显式场景的场合,不是所有延迟指标都更优。原文以约100倍概括相对3DGS的提速,而表中四轮值 \(70/0.816\) 约为85.8倍,应区分概括与精确比值。
表3另用16张 \(540\times960\) 图像覆盖完整DL3DV场景,协议与表1不同。两轮ReSplat为23.51 dB、0.766 SSIM、0.284 LPIPS、518K高斯、1.7秒重建;Long-LRM为22.66 dB、0.740、0.292、2073K、0.4秒。此时高斯约少4倍而不是16倍,因为Long-LRM也进行剪枝;ReSplat仍重建更慢。
表4双视图RealEstate10K采用前述不同表示预算,ReSplat为29.75 dB、0.912、0.100;LVSM decoder-only为29.67 dB、0.906、0.098,后者LPIPS更好。表5的RealEstate10K到ACID零样本结果为29.87 dB、0.864、0.135,这是另一套双视图模型,不应与八视图训练模型混写。
消融实验¶
表6采用Small、DL3DV八视图、\(256\times448\),不能将29.07 dB与主表高分辨率Base直接排名。下表摘取反馈与隐状态的关键行,并标明来源;表6d的隐状态行不是额外一次反馈类型实验。
| 配置 | 原表 | PSNR | SSIM | LPIPS |
|---|---|---|---|---|
| 仅初始化 | 6a | 26.77 | 0.865 | 0.142 |
| 循环但不输入渲染误差 | 6a | 27.19 | 0.873 | 0.137 |
| 仅RGB误差 | 6a | 27.90 | 0.882 | 0.130 |
| 仅特征误差 | 6a | 28.77 | 0.897 | 0.110 |
| RGB与特征误差拼接 | 6a | 28.93 | 0.900 | 0.106 |
| RGB与特征误差相加 | 6a | 29.07 | 0.902 | 0.105 |
| 完整循环模型 | 6d | 29.07 | 0.902 | 0.105 |
| 循环模型去隐状态 | 6d | 27.79 | 0.878 | 0.125 |
关键发现¶
- 没有反馈的循环为27.19 dB,完整为29.07 dB,差1.88 dB;因此仅重复网络不足以解释全部收益。特征残差比纯RGB更有效,两者相加再获得0.30 dB。
- 去隐状态损失1.28 dB,说明渲染参数本身不能替代丰富潜特征。表6d去kNN与全局注意力分别为28.58和28.96 dB,也各有贡献。
- 表6c中初始化去kNN从26.77降至25.30 dB,去全局注意力为26.33,两者都去为24.50。紧凑表示能保持质量依赖三维上下文,不是仅靠采样公式。
- 表6b中间视图坐标为29.07 dB,COLMAP原坐标为28.14,差0.93 dB;坐标规范化有效并不意味着任意坐标不变性。
- 表2中77M Small四轮29.07 dB,高于559M Large单步27.86 dB;这证明所测架构中循环比单纯扩参数有效,不证明任何等算力单步网络都无法匹敌。
亮点与洞察¶
- 测试时适应可以发生在场景表示上,而非网络权重上。输入视图的可观测残差提供任务专属反馈,不需要新视图标注或测试时反向传播。
- 初始化控制的不仅是起点质量,也控制每轮更新的账单。图6指出逐像素MVSplat初始化虽也可被细化,但高斯更多使更新慢13倍,说明紧凑表示与循环不能分开只看一个模块。
- 误差负责指出当前解释哪里不足,隐状态保留显式参数无法表达的上下文。将这一结构迁移到其他三维表示时,必须同时解决反馈与表示元素的关联,而非只增加迭代次数。
局限与展望¶
- 高斯数量固定,初始化没有充分覆盖的结构无法通过新建基元补上;自适应增密、剪枝是作者提出而未完成的方向。
- 约四轮饱和只是当前实验的经验现象,继续迭代未必持续获益;论文没有给出单调改进或收敛保证。
- 输入是静态视图集合,滑动窗口和连续细化仅为未来流式扩展设想,不是已实现的在线SLAM或动态场景模型。
- 方法依赖给定相机与坐标规范化,姿态噪声、无位姿输入、遮挡变化的鲁棒性不能由跨数据集成绩直接推出。
- 精简高斯不保证最短首帧重建延迟,kNN、反馈渲染与多轮更新均有成本;应按视图数、分辨率、循环轮数和输出相机数量评估总开销。
- 缓存未含附录,部分公式受损;不声称已核验完整训练超参、补充实验或多次运行统计。
相关工作与启发¶
- vs DepthSplat / MVSplat:单步前馈提供基线,本文同时改变初始化与后续纠错。必须用消融分开理解紧凑上下文与循环的贡献。
- vs 3DGS / G3R:前者逐场景求解,后者显式梯度指导更新;ReSplat以残差直接预测增量,不需要覆盖充分的初始三维点,但仍需要带位姿图像。
- vs SplatFormer:前者主要对优化高斯做单次物体级细化;本文使用前馈初始化和共享多步反馈。场景级比较受归一化与网格选择影响,不应扩大成所有任务的普遍排名。
- vs Long-LRM / LVSM:显式高斯及便宜重复渲染是本文的部署特点,不代表重建延迟或每个感知指标都领先。
- 研究启发:让残差同时决定哪里增密、哪里继续更新、哪里提前停止,可以把固定表示预算与循环预算联动;这是基于局限的建议,不是已有模块。
评分¶
- 新颖性: 4/5。紧凑初始化、双域误差反馈和共享状态更新形成了完整方法,但学习优化与循环细化本身已有较多先例。
- 实验充分度: 4/5。覆盖多视图、两视图、跨数据集、尺度与模块消融,但流式输入、姿态误差和长期迭代仍缺少验证。
- 写作质量: 4/5。框架图和消融能支持主要机制,阅读时需要特别区分分辨率、初始化配置及重建与渲染效率。
- 价值: 4/5。为快速显式三维重建提供了可复用的误差反馈路径,实际收益取决于重建预算和后续渲染需求。