VGGT-Omega Aggregator深度解析:交替注意力机制如何串联多帧视觉信息?
【免费下载链接】vggt-omega[CVPR 2026 Oral] VGGT Omega项目地址: https://gitcode.com/gh_mirrors/vg/vggt-omega
VGGT-Omega是 CVPR 2026 Oral 的 3D 视觉模型(约 1B 参数),只需一组普通图片,就能同时输出每帧相机的位姿、内参和逐像素深度,还原出 3D 点云场景。它最核心的设计是 Aggregator(聚合器) 中那套"交替注意力机制"——让"帧内看细节"和"帧间对全局"两种注意力轮流出场,把一整段视频的多帧视觉信息拧成一股绳。本文带你用最少的心智成本读懂这套机制。🌀
一、VGGT-Omega 是什么?能解决什么问题?
传统三维重建(SfM/MVS)需要多阶段优化,慢且容易失败。VGGT-Omega 的思路是:
- 输入:一张、或几十几百张同一场景的图片(比如绕着桌子拍一圈)
- 输出:每帧相机的外参 + 内参、每帧的稠密深度图
- 应用:用 demo_gradio.py 启动的 Gradio 演示里,上传视频后一键重建,可直接旋转、缩放查看 GLB 三维点云
整个模型由一个"共享特征主干"加三个"任务头"组成,入口定义在 vggt_omega.py:
| 组件 | 职责 | 源码位置 |
|---|---|---|
| Aggregator | 把多帧图像编码成"聚合 token",是交替注意力的主战场 | aggregator.py |
| CameraHead | 从相机 token 读出每帧相机参数(平移 + 四元数 + 视场角) | camera_head.py |
| DenseHead | 多尺度特征融合,输出深度图 + 置信度 | dense_head.py |
| TextAlignmentHead | 可选:输出与语言对齐的场景嵌入(需专用 checkpoint) | text_alignment_head.py |
二、Token 配方:每帧的"相机 + 寄存器 + 图像块"
在 aggregator.py 中,每张图被切成 16×16 的小块(patch token),再在序列头部拼接上两种特殊的"语义 token":
每帧序列 = [ 1 个相机 token ][ 16 个寄存器 token ][ N 个 patch token ]- 相机 token:专门"负责"承载该帧相机位姿信息的可学习参数。有趣的是它有两份参数——第一帧用
[:, 0],其余帧共享[:, 1](见 slice_expand_and_flatten),相当于把"第一帧当基准坐标系"写进了结构里。 - 寄存器 token(register token):借鉴自视觉 Transformer 的"杂务工",吸收噪声、缓解注意力坍缩,让 patch token 更专注于图像内容。
- patch token:图像内容本身,由 DINO 风格的 ViT 前缀(DinoVisionTransformer)嵌入得到。
这个"头前缀 + 主体"的划分正是后面两种帧间注意力分工的基础。🧩
三、交替注意力机制:核心原理
Aggregator 默认 24 层深。每一层都固定执行两步(forward 主循环):
- 帧内注意力(frame block):只在单帧内部的 token 之间做自注意力,配 RoPE 二维位置编码(rope_position_encoding.py),负责"看清每一帧自己的空间细节";
- 帧间注意力(inter-frame block):把多帧的 token 拉到一起互看,负责"把不同帧的同一物体对齐、传递跨帧线索"。
关键就在第 2 步的两种模式上(_run_inter_frame_attention_block):
1️⃣ 全局模式(global):所有 token 跨帧互看
把帧数 × 每帧token数拼成一条超长序列,做全量自注意力。信息交换最充分,但 624×416 分辨率下每帧有 2000+ 个 patch token,帧数一多计算量爆炸。
2️⃣ 寄存器模式(register):只有"小头"跨帧互看
在指定的 5 个层(索引[2, 6, 9, 14, 20],见 aggregator.py),帧间注意力只让相机 + 寄存器 token(每帧 17 个)参与跨帧计算,海量 patch token 只走自己的"单帧通道"。
效果一句话:用 1/120 的 token 完成帧间"开会",开完会再由帧内注意力把结论"传达"给每个 patch token。这就是 VGGT-Omega 能处理上百帧视频的关键工程取舍——在 README.md 的 A100 基准里,500 帧输入峰值显存仅 43.15 GB。
两种注意力交替 24 轮下来,跨帧的几何线索(同一堵墙、同一张桌子的不同视角)被反复对齐、强化,最终沉淀在 token 表征里。这就是标题里"串联多帧视觉信息"的具体含义。🔗
细节彩蛋:注意力层开启了 Q/K 归一化(attention.py 中
use_qk_norm=True),配合 LayerScale(初始 1e-5)保证深层训练稳定——这是从 DINOv3 训练体系继承来的配方。
四、Token 如何变成深度图和相机位姿?
Aggregator 不是把所有 24 层都保存(太费显存),只在第4、11、17、23层缓存中间结果(cached_layer_indices),并把"帧内输出"和"帧间输出"沿通道拼接成 2×1024 维特征(aggregator.py)。
- 相机位姿:CameraHead 取最后一层的前 17 个 token(相机 + 寄存器),用 4 个自注意力块再跨帧混一次,最后每个相机 token 投影出 9 个数——平移 3 + 旋转四元数 4 + 视场角 2(camera_head.py),再经 pose_enc.py 的
encoding_to_camera还原为标准外参/内参矩阵。 - 深度图:DenseHead 把 4 个缓存层当作 4 个尺度的特征图,走类 DPT 的自底向上精修 +
pixel_shuffle上采样,指数激活保证深度恒为正,同时输出置信度(dense_head.py)。
五、跑起来:安装与显存预算
git clone https://gitcode.com/gh_mirrors/vg/vggt-omega cd vggt-omega && pip install -r requirements.txt && pip install -e .随后按 README.md 的 Quick Start 加载 checkpoint 即可;想直接体验 3D 重建,安装 requirements_demo.txt 后运行demo_gradio.py(需 CUDA),上传视频就能看到旋转的三维点云和相机轨迹。💻
显存规划参考(A100,624×416 输入,README.md):
| 输入帧数 | 1 | 25 | 100 | 300 | 500 |
|---|---|---|---|---|---|
| 峰值显存 (GB) | 6.02 | 7.80 | 13.37 | 28.26 | 43.15 |
六、一句话总结
VGGT-Omega 的 Aggregator 用"帧内精细看 + 帧间全局对"的交替注意力,让相机/寄存器 token 充当跨帧信使、patch token 专注内容理解,以极低的帧间开销把几十甚至几百帧视觉信息串联成一致的多视图表征,再分流给相机头和深度头,一次前向完成位姿与稠密深度估计——这正是它作为 CVPR 2026 Oral 作品的核心竞争力。🎯
【免费下载链接】vggt-omega[CVPR 2026 Oral] VGGT Omega项目地址: https://gitcode.com/gh_mirrors/vg/vggt-omega
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考