TTB: Test-time Baking for Efficient Rendering of Decoder-only View Synthesis Models
Chin-Yang Lin, Ryo Hachiuma, Jaesung Choe, Min-Hung Chen, Yu-Chiang Frank Wang, Yen-Yu Lin, Wei-Chen Chiu, Yu-Lun Liu, Cheng Sun
NeurIPS 2026 (Spotlight)
cs.CV
2026-11-13
跨视角注意力烤进固定MLP。64视角960p下23FPS,约为DVSM的23倍,PSNR 30.20对31.11。
不做显式三维、直接用 Transformer 回归新视角的模型里,DVSM 把每层跨视角注意力的键值存成 KV-cache。场景只编码一次,画质在前排,查询却随上下文 token 线性变贵。DL3DV 上 960p、64 个输入视角,渲染只有 1 FPS,预填要 60 秒。稠密输入和高分辨率正是这类模型想吃的设置,线性查询把这个优势吃掉了。
LaCT 用测试时训练(TTT,对着当前场景更新一小段权重)换掉跨视角注意力。渲染变成常数复杂度,画质掉一截。从预训练的 decoder-only 权重接着训,缺口仍在。TTT 拟合原始 value,注意力已经做完的跨视角混合没有留下来。
Test-Time Baking(TTB,测试时烘焙)仍用这只 fast-weight MLP,内循环改去拟合跨视角注意力的输出。注意力先把全部上下文视角混在一起,MLP 记下查询位置到混合结果的映射,之后只留权重。新视角每个 token 一次前向,复杂度和 TTT 相同。重建仍要跑注意力,花费从每张新视角都付,变成每个场景付一次。
另一处是模态。预填 token 带图像,新视角 token 只有相机。每个上下文视角拆成一对:带 RGB 和位姿的 token 提供注意力目标,只有位姿的 token 作为 MLP 输入,分布和新视角对齐。学的是射线隐坐标到外观隐特征,接近在隐空间做几步光场拟合。内循环因此用多步均方误差。LaCT 用的是一次点积写入。
网络为 12 个 block、宽 768、patch 8,从 DVSM 检查点初始化。fast-weight 是单头 SwiGLU,隐藏维 3072。Muon 跑 3 步内循环,逐 token 学习率基准 0.01,目标写成残差,比直接拟合绝对值容易收敛。烘好的 MLP 回写带图像的那路 token,三条流在后面的层走同一套算子。视角再多,一份 MLP 会饱和。推理时按相机位姿做 k-means,每组约 16 个视角各烘一份,新视角只查最近的一组,单次查询仍是常数时间。
DL3DV 的 140 个留出场景、960p,TTB 渲染恒定 23 FPS。TTB 为 271M 参数、12 个 block,DVSM 为 163M,LaCT 为 379M、24 个 block。
| 方法 | 16 视角 PSNR / FPS | 64 视角 PSNR / FPS | 64 视角预填 |
| LVSM | 22.18 / 20 | 21.96 / 20 | 59 秒 |
| LaCT | 24.70 / 10 | 28.30 / 10 | 7.3 秒 |
| DVSM | 26.86 / 4 | 31.11 / 1 | 60 秒 |
| TTB | 27.00 / 23 | 30.20 / 23 | 65 秒 |
| TTB 分组 | 未报告 | 31.33 / 23 | 65 秒 |
64 个视角下,TTB 比 DVSM 快 23 倍。PSNR 是 30.20 对 31.11,LPIPS 是 0.131 对 0.104。分组烘焙后 PSNR 31.33、LPIPS 0.108,略高于 DVSM,帧率仍是 23。相对 LaCT 的 28.30 和 10 FPS,大约快 2.3 倍,并高 1.9 dB。16 个视角时 TTB 为 27.00,略高于 DVSM 的 26.86。32 个视角是 28.92 对 29.13。去掉重建阶段二次注意力的 TTB--,64 视角 PSNR 29.29,预填 7.5 秒,和 LaCT 的 7.3 秒接近。逐场景优化的 3DGS 要 600 秒以上,64 视角 PSNR 只有 26.43。
只渲一两张新视角时,更重的预填不划算。大约 5 到 7 张之后,端到端时间反超 DVSM。64 个视角渲 100 张,约 69 秒对 160 秒。
域外同样是 64 个视角、960p。TTB 对 DVSM 的 PSNR:MipNeRF360 为 24.49 对 24.76,Free 为 26.05 对 25.57,Hike 为 23.77 对 23.10。分组烘焙在三套上都更高。长边 512、64 个视角时,相对 1052M 参数的 LagerNVS,帧率是 67 对 7,MipNeRF360 的 PSNR 为 23.62 对 20.98。Re10K 两视角、512 分辨率,TTB 为 31.28,DVSM 为 31.17。视角一稀,速度差就小。
消融用了更小的设定,帧率不能和主表的 23 FPS 横比。32 个视角上,换成 TTT 后 PSNR 从 24.68 掉到 23.12,完整 TTB 回到 24.84,渲染约 50 FPS。残差学习和回写加在一起是 0.52 PSNR。从零训练的 TTB 已有 23.82,高于预训练 TTT 的 23.12。接上 DVSM 的初始权重再加 1.02。720p 的缩放实验里,单份 MLP 在视角数超过 64 后停在 25.8 附近。分组烘焙到 256 个视角为 27.74,对齐 DVSM 的 27.56,帧率约 68 对 12.6。全部 fast weight 在 FP32 下固定 324 MB。64 个视角大约比 KV-cache 小 85 倍,256 个视角大约小 340 倍。
这是渐进改进,价值在部署侧的时间和显存。画质贴住 decoder-only 模型,查询不再跟着视角数变慢。交互着看,或沿一条轨迹渲出去,过了大约 5 到 7 张新视角,时间就回到 TTB 这边。显存差得更直白。按论文的线性外推,DVSM 的 cache 在 256 个视角、544×960 时会超出单卡 80 GB。TTB 的场景状态不随视角数涨。
3DGS 和 LongLRM 走显式几何,强反射和半透明表面本来难办。64 个视角上 LongLRM 的 PSNR 是 24.77,TTB 是 30.20。表里 LongLRM 的渲染 FPS 更高,那是高斯光栅化,和这里的网络前向不是同一种计时。注意力留在只跑一次的预填里,输出交给 MLP 去记。这个用法或能迁到长上下文缓存,以及视频模型里随时间变长的时序注意力。论文只给了类比,没有实验。
MLP 容量固定,视角一多就饱和。分组是推理时的 k-means,每组约 16 个视角,训练没学过这个路由,组与组之间也不混合。720p 的缩放表里,256 个视角的分组重建要 52 秒,单份 MLP 是 20.5 秒。主表把 64 视角的分组预填也写成 65 秒,和单份一样,两处口径并不一致。重建阶段的跨视角注意力仍随视角数二次增长,只出一两张图时不划算,端到端计时对得上这个判断。任务是重建,在已看到的视角之间插值,不外推没观测到的方向。
主结果从 DVSM 检查点微调。从零训练的 LaCT、LVSM 不在同一起跑线。从零的 TTB 仍高于预训练 TTT,初始化解释不了全部增益,但没有从零 DVSM 的对照。23 FPS 对应 960p、不做 batch。720p 消融大约 50 FPS,各表帧率不能横比。域外一共 22 个场景,Hike 只用了 6 个较稳定的。定性上栏杆、窗格和小字比 LaCT 清楚。没有几何误差,也没有用户研究。PSNR 接近,不等于每张新视角都站得住。