IncVGGT: Incremental VGGT for Memory-Bounded Long-Range 3D Reconstruction¶
会议: ICLR 2026
OpenReview: https://openreview.net/forum?id=CezA1eLa1Y
代码: 待确认
领域: 3D 视觉 / 前馈三维重建 / 长序列流式推理
关键词: VGGT, 流式 3D 重建, KV Cache 剪枝, 图像配准与拼接, 显存受限, 边缘部署
一句话总结¶
IncVGGT 在完全免训练的前提下,用「输入端配准合成 + 历史端 Top-k 缓存剪枝」两个正交模块改造 VGGT/StreamVGGT,把注意力的二次增长压成近乎常数级,从而在 80GB GPU 上处理 1 万帧仍不爆显存,相比 StreamVGGT 在 500 帧上算子数减少 58.5×、显存降 9×、能耗降 25.7×、推理快 4.9×,且精度基本持平。
研究背景与动机¶
- 领域现状:以 VGGT 为代表的前馈 Transformer 三维重建可以一次前向同时预测深度、位姿、点图和轨迹,无需逐场景优化,在多视角基准上达到 SOTA;StreamVGGT 进一步引入因果注意力 + KV cache,把 VGGT 改造成可在线流式处理的版本,是当前长序列 4D 重建的 SOTA。
- 现有痛点:VGGT 的全局自注意力随 token 总数 二次增长,24GB GPU 只能跑几十帧、80GB 也撑不过 300 帧;StreamVGGT 虽然流式,但缓存「所有历史 key/value」,cache 与延迟随帧数线性膨胀,7–800 帧后显存就突破 80GB,长视频上效率急剧退化。
- 核心矛盾:真实长视频(VR/AR、机器人、自动驾驶)天然存在大量冗余,但现有方法在每一步都付出全 token 代价、并无差别保留全部历史,把冗余原封不动地搬进了算力和显存预算。
- 本文目标:在不重新训练、不破坏前馈特性的前提下,让 Transformer 三维重建能在严格显存/算力约束下稳定跑「任意长」序列。
- 核心 idea:【冗余感知双轴压缩】——把视频流的冗余拆成两个正交方向:输入端冗余(相邻帧反复覆盖同一区域)用配准合成在 tokenize 前折叠掉重叠像素;历史端冗余(多数缓存 KV 对下一步贡献甚微)用按相关性而非序列长度的 Top-k 剪枝把缓存压成定长。最终把稠密的「所有 token × 所有历史」换成稀疏的「少量 token × 少量槽位」。
方法详解¶
整体框架¶
IncVGGT 是对 StreamVGGT 推理路径的免训练改造(直接用官方权重):输入侧先把一个短窗口的 \(K\) 帧通过特征配准对齐到参考域、按 span gate 决定整合或递归二分,融合成紧凑的「合成视图」再 tokenize,使进入注意力的 token 数 \(\tilde{T}\) 与「合成后的支撑面积」而非原始帧数成正比;历史侧把全局注意力的 KV cache 限制为「Top-k 高分槽位 + 最近一帧」共 \(S=k{+}1\) 个定长槽位。两者合起来把每层每步的稠密代价 \(O(B H L^2 d_h)\) 降到 \(O(B H \tilde{T} S d_h)\),其中 \(\tilde{T}\cdot S \ll L^2\)。
flowchart LR
A[短窗口 K 帧] --> B[特征检测+单应配准<br/>对齐到参考帧]
B --> C{span gate<br/>归一化跨度≤λ?}
C -- 是 --> D[单次合成<br/>羽化融合+空洞修补]
C -- 否 --> E[递归二分<br/>共享重叠帧] --> C
D --> F[合成视图 token 数 T̃]
F --> G[全局-局部注意力]
H[历史 KV cache] --> I[Top-k 高分槽位<br/>+最近一帧 = 定长 S]
I --> G
G --> J[相机/点图/深度头<br/>联合预测]
关键设计¶
1. 输入端配准合成(Registration-based Redundancy Reduction):在 tokenize 前折叠重叠像素。 相邻帧的像素级重叠会让 Transformer 把同一区域反复 tokenize,因此本文在注意力之前先把窗口内 \(K\) 帧拼成一张合成视图。具体先选 \(I_0\) 为参考帧,用 ORB/SIFT 提局部特征、kNN 匹配并经 ratio test + 交叉校验保留高置信对应,再以 DLT+RANSAC 估计相邻帧单应 \(H_{i\to i-1}\);通过累乘 \(H_{i\to0}=H_{1\to0}H_{2\to1}\cdots H_{i\to i-1}\) 把所有帧增量地映射到参考域。单应虽无法完全建模强 3D 视差,但对短时间窗口足够,且天然支持流式增量对齐而无需回头重算早期帧。
2. 带限 warping + 归一化跨度的递归二分(span gate):自适应决定「合一张还是拆两半」。 直接把所有 warp 帧投到全局画布会让画布无界膨胀、外推过度。本文把合成限制在以参考支撑为中心的窄竖直带内(加全局平移保证坐标非负),从而界定画布尺寸、抑制无支撑边缘。是否一次合成由归一化跨度判定:令 \(S_i=H_{i\to0}(\Omega_i)\) 为帧 \(i\) 的 warp 支撑、\(W_0\) 为参考帧宽度,跨度为各支撑并集在 x 轴投影宽度除以单帧宽 \(\mathrm{span}=B_x\!\big(\bigcup_i S_i\big)/W_0\)。若 \(\mathrm{span}\le\lambda\) 则视点连贯、单次合成;否则把窗口二分成两个共享中间帧的子窗递归处理,重叠帧充当对齐锚点保证可拼接性。
3. 融合与空洞修补:让合成视图的 token 网格稳定可批处理。 通过 span gate 后,用 mask 感知的距离变换羽化把多帧融合:对每个 warp 计算有效性掩码并赋予向内部平滑增大的权重,归一化累加 \(\hat{I}(x)=\big(\sum_i W_i(x)\tilde{I}_i(x)\big)/\big(\sum_i W_i(x)+\delta\big)\) 抑制接缝且不引入光晕;后到帧覆盖先到帧以模拟流式输入、填补小残缺。残余空洞用轻量清理:裁剪持续无支撑的水平边缘、用小半径 inpaint 填补全零严格空洞,并可裁到参考帧高度以规整 token 网格、提升批处理效率。
4. 全局-局部 KV cache 剪枝(Global-Local Cache Pruning):把增长缓存压成定长。 朴素流式把所有历史 KV 都存下来,单步代价 \(O(B H p L_{hist} d_h)\) 随缓存线性膨胀,800 帧就在 A100 上爆 80GB。由于真实 3D 视频帧间强连续,第 \(t\) 步高分槽位很可能在 \(t{+}1\) 仍被复用——本文据此先算注意力 \(A_t=\mathrm{softmax}(Q_t K_{1:L_{hist}}^\top/\sqrt{d_h})\),沿 query/head 归约得到每个 key 的相关性向量 \(s^{(t)}\),在处理下一帧前预选 \(S_{t+1}=\mathrm{TopK}(s^{(t)},k)\cup\{\text{最近一帧}\}\),把注意力限制在这 \(k{+}1\) 个槽位上 \(O_{t+1}=\mathrm{softmax}(Q_{t+1}K_{S_{t+1}}^\top/\sqrt{d_h})V_{S_{t+1}}\)。这样每步打分代价 \(O(B H (k{+}1) d_h)\)、KV 占用 \(O((k{+}1)d_h)\) 都与序列长度无关;保留「最近一帧」是为了捕捉突变场景,避免只看高分历史而漏掉新内容。
实验关键数据¶
实验环境:单张 A100 (80GB),图像高固定 518px,10 帧滑窗、Top-\(k=5\) 历史帧、多视角选 Top-20 相机 token,直接用 StreamVGGT 官方权重。
主实验表格¶
推理总时间(秒,OOM 为爆显存):
| 帧数 | 5 | 50 | 100 | 300 | 500 | 1k | 10k |
|---|---|---|---|---|---|---|---|
| Ours (Inc) | 0.57 | 4.17 | 8.20 | 25.50 | 38.12 | 82.00 | 797.31 |
| StreamVGGT | 0.50 | 7.23 | 20.09 | 136.72 | 185.11 | OOM | OOM |
| VGGT | 0.51 | 2.37 | 5.78 | 36.32 | OOM | OOM | OOM |
视频深度精度(Sintel / Bonn / KITTI,Abs Rel↓ 与 δ<1.25↑):
| 方法 | 类型 | Sintel AbsRel | Bonn AbsRel | KITTI AbsRel |
|---|---|---|---|---|
| VGGT | Dense-view | 0.298 | 0.057 | 0.061 |
| StreamVGGT | Streaming | 0.328 | 0.059 | 0.173 |
| Ours (Inc) | Streaming | 0.341 | 0.064 | 0.176 |
| CUT3R | Streaming | 0.421 | 0.078 | 0.118 |
多视角重建(7Scenes / NRGBD,中位 Acc↓):Ours 0.0266 / 0.0516,StreamVGGT 0.0241 / 0.0520,差距均在 0.3% 内。
消融实验表格¶
注意力算子数(KITTI,单位 k):
| 帧数 | VGGT | StreamVGGT | Ours (Inc) |
|---|---|---|---|
| 100 | 951.58 | 548.13 | 27.39 |
| 300 | 7956.14 | 4299.78 | 126.33 |
| 500 | OOM | 11591.97 | 198.88 |
能耗(焦耳,300 帧):Ours 811 J vs VGGT 8079 J vs StreamVGGT 23516 J,约一个数量级差距,且随帧数继续拉大;平均功率 135.7W 也低于 153.8W/178.3W。
关键发现¶
- 延迟近乎常数化:从 10→300 帧,Ours 每帧延迟反而从 ~104ms 微降到 ~85ms,而 StreamVGGT 从 106ms 飙到 455ms——增量设计成功阻断了「每帧延迟随序列增长」。
- 显存近乎水平线:Ours 在 1k 帧仍 <9GB、每步增量稳定在 2–3GB;VGGT 300 帧破 60GB、StreamVGGT 1k 帧破 78GB 后崩溃。
- 精度几乎无损:相对 StreamVGGT 各项差距通常在 1–3% 内,换来一两个数量级的效率收益。
亮点与洞察¶
- 免训练、架构无关:纯推理路径改造,直接复用 StreamVGGT 权重,意味着随 VGGT 系基座升级即插即用,工程落地成本极低。
- 冗余的「双轴」拆解干净利落:把输入冗余(像素重叠)和历史冗余(无用 KV)正交分离,分别用经典 CV(配准拼接)和 LLM 推理常用技巧(KV 剪枝)解决,思路简洁且可解释。
- 复杂度推导清晰:\(\tilde{T}\cdot S \ll L^2\) 一句话点明为何能把二次压成近常数,且每个模块都给出了与序列长度无关的复杂度界。
局限与展望¶
- 依赖帧间高重叠假设:当重叠率很低或骤降(大视角变化、弱纹理)时,单应配准的稳定性会下降,是方法的天然 trade-off。
- 单应近似无法建模强 3D 视差:短窗口够用,但长基线/强视差场景下合成视图可能引入几何误差。
- 精度略逊于稠密 VGGT:在能跑得动的短序列上,非流式 VGGT 仍是精度上限;本文换的是「可扩展性」而非「更高精度」。
- 作者讨论了 finetuning 模式但选择不做,认为已接近精度上限、且免训练更通用——后续若针对剪枝/合成做轻量微调,或可进一步缩小与稠密基线的差距。
相关工作与启发¶
- VGGT / StreamVGGT:本文直接的基座与最强对手,分别代表「稠密但不可扩展」与「流式但缓存膨胀」两端。
- VGGT-Long:用分块 + 块间对齐做公里级离线重建,但需后处理对齐、面向离线;IncVGGT 主打在线、定长缓存。
- DUSt3R/MASt3R/CUT3R/Spann3R/Point3R:前馈点图/流式重建路线,缺乏对时序冗余的系统利用。
- 启发:把大模型推理里的 KV cache 剪枝(StreamingLLM/Top-k 注意力) 迁移到三维重建的历史压缩,以及用经典图像拼接做 token 级去冗余,是「免训练提效」的一条很有性价比的范式,值得推广到视频理解、4D 重建等其他长序列前馈任务。
评分¶
- 新颖性: ⭐⭐⭐⭐ — 模块本身(配准拼接、Top-k KV 剪枝)都不算全新,但把二者正交组合、免训练地解决 VGGT 长序列显存瓶颈,工程切入点很巧。
- 实验充分度: ⭐⭐⭐⭐ — 覆盖延迟/显存/算子数/能耗/功率多维效率指标,且在多个深度与重建基准上验证精度无损,10k 帧极端规模很有说服力;偏弱在缺少对 \(k\)、\(\lambda\) 等超参的系统消融。
- 写作质量: ⭐⭐⭐⭐ — 双轴冗余的 motivation 清晰,复杂度推导与图示(Fig.1/2/4)到位,易读。
- 价值: ⭐⭐⭐⭐ — 直击边缘/资源受限部署的真实痛点,免训练 + 即插即用,对长视频 3D/4D 感知落地有直接实用价值。