Think Locally, Refine Globally for Memory-Efficient 3D Reconstruction
Jingke Zhou, Chenhang Ma, Zhizhou Zhong, Mingkai Liu, Zhuang Zhou, Yicheng ji, Binghua Su, Bo Cai, Xianliang Huang
cs.CV, cs.AI
2026-09-18
浙大与复旦把 VGGT 改成重叠四帧滑窗,只在四个几何层做跨窗口注意力,再用 register token 修全局相机。7-Scenes 一千帧 Acc 到 0.060,InfiniteVGGT 是 0.065。
VGGT 把所有帧的 token 丢进全局注意力,深度、位姿、点云一次前向出齐。短序列好用,序列一长,O(N²) 显存就把卡打满。
后来的补丁分两头。StreamVGGT 把历史 KV 全缓存,长了直接 OOM。WinT3R 用滑窗把内存钉死,窗口之间靠一份持久 hidden state 传信息,局部误差会顺着这份状态滚下去,长轨迹位姿漂得很厉害。InfiniteVGGT 用滚动记忆加 token 驱逐卡住缓存上限,驱逐是按层、按头各自做的启发式,没有显式跨窗口几何约束,漂移还在。
局部几何要够用,全局位姿不能漂,内存还不能随长度涨。这三件事卡在一起。
LoG-VGGT 的做法可以收成一句:窗内想局部,序列末尾再修全局。
骨干是重叠滑窗,窗口大小 K=4、stride=2。窗内仍是 VGGT 那套帧注意力和窗口级全局注意力,复杂度钉在 O(K²),跟总帧数无关。窗与窗之间不存全部历史,只在 VGGT 用来喂 DPTHead 的 4 个几何层(block 4/11/17/23)做 Cross-Window Attention:当前窗的 Q 去看「当前 token + 上一窗缓存的 key 层 token」。重叠帧被显式对齐,几何连续性从窗口缝渗过去。只缓存这 4 层,内存保持常数。选这四层是因为 VGGT 的深度和位姿头本来就从它们取特征,不必另开一套跨窗通路。
深度主要靠局部连续性,滑窗推完就出。相机位姿会漂。于是加了一个轻量的 Global Camera Consistency Refinement(GCCR):把所有窗口的 register token 收成一份紧凑全局集合,每个相机 token 对这批 register 做一次 cross-attention。全序列位姿被一起修,算力只打在少量 token 上,不是再开一遍序列级全局注意力。
训练两阶段:先 12 帧训 100 epoch 把局部几何稳住,再 64 帧微调 10 epoch。数据是 11 个室内外、合成/真实混合集,16 张 H20。视觉编码沿用冻结的 DINO。损失是相机 L1 加带不确定度的深度监督,没有显式点图损失,三维点由深度和相机决定。
7-Scenes 上 Acc(mean) 随长度几乎不崩:
| 方法 | 200 帧 | 500 帧 | 1000 帧 |
| TTT3R | 0.040 | 0.062 | 0.101 |
| InfiniteVGGT | 0.038 | 0.043 | 0.065 |
| LoG-VGGT | 0.036 | 0.037 | 0.060 |
NRGBD 200 帧 Acc 0.034,低于 WinT3R 的 0.037 和 InfiniteVGGT 的 0.049;1000 帧 0.091,略优于 InfiniteVGGT 的 0.097。
视频深度评测集都没进训练集。Sintel 50 帧 Abs Rel 0.321(InfiniteVGGT 0.323);Bonn 110 帧 0.054(WinT3R 0.058);KITTI 110 帧 0.109(TTT3R 0.113, InfiniteVGGT 0.173)。KITTI 上 InfiniteVGGT 掉得最明显。
相机位姿每场景抽 500 帧,AUC@30:ScanNet 78.56(InfiniteVGGT 78.46, TTT3R 71.36);TUM-D 91.17(90.03 / 86.75);CO3Dv2 88.24(88.02 / 83.31)。领先幅度不大,稳定压过同一代 streaming 方法。ScanNet 和 CO3Dv2 在训练集里,TUM-D 更干净。
消融把两个模块拆开。200 帧去掉 CWA 直接 OOM;去掉 GCCR,7-Scenes Chamfer 从 0.032 升到 0.045,CO3Dv2 AUC@30 从 88.24 掉到 44.27。只靠滑窗传几何,长序列位姿撑不住。
GCCR 可以改成周期性、只用过去帧:每 50 帧做一次,CO3Dv2 AUC@30 到 63.85;每 100 帧 74.91;全序列终修才到 88.24。精度和延迟是明确的交换。
1000 帧一次推理,CWA 骨干 83.9 秒占 99.84%,全序列 GCCR 只要 134 ms。FPS 在 100/200/500/1000 帧上是 12.4/12.3/12.3/11.9,InfiniteVGGT 从 7.0 掉到 5.4。
做 streaming 重建的人,这是一条比「把 KV cache 剪瘦」更干净的路:架构上把注意力锁在窗口里,全局只修相机。全序列 GCCR 几乎白送;想上线可以换成每 50/100 帧刷一次,或者在线逐步更新,1000 帧 FPS 会从 11.9 掉到 8.2,仍快过 InfiniteVGGT。
它不是新的几何表示,是 VGGT 的工程缩放方案。短序列上相对 InfiniteVGGT 的增益很小,真正拉开的是 500 帧以上还不漂、还不降速。
深度没有全局 refinement。作者自己说大视角变化、长程遮挡、深度全局歧义时可能吃亏,表格上也不是处处第一:Bonn 110 帧 δ<1.25 是 0.968,InfiniteVGGT 是 0.972;500 帧 Bonn 的 δ 是 0.952 对 0.960。
全序列 GCCR 要用到未来帧,严格在线得用周期或在线变体,精度会掉一截。register token 随窗口堆积,FPS 仍有轻微下滑。窗口 4、stride 2 直接沿用 WinT3R,论文没做窗口大小扫描。低光、无纹理、反光、快运动、高动态场景,作者列了可能失效,没有对应定量。