跳转至

UniQueR: Unified Query-based Feedforward 3D Reconstruction

会议: ECCV2026
论文: ECCV 2026 / 项目页
领域: 3D视觉
关键词: 前馈式 3D 重建 / 三维查询 / 高斯泼溅 / 无位姿重建 / 新视角合成

一句话总结

UniQueR 把前馈式 3D 重建从「逐像素预测」改写成「一组稀疏 3D 查询的推理」:4096 个带显式 3D 坐标的可学习锚点在共享场景坐标系中与多视图特征交互、各自派生 64 个高斯,一次前向即从无位姿图像同时给出相机位姿、点图与可渲染高斯,在 Mip-NeRF 360 / VR-NeRF 上用约 1/15 的基元数量取得优于前馈基线的渲染质量与深度精度。

研究背景与动机

前馈式重建这条线在过去两年基本定型:DUSt3R、VGGT、Pi3 证明了一次前向就能从 2D 观测回归出 3D 几何,做法是把多视图特征喂给 transformer,输出深度图、点图这类 2.5D 中间表示;MVSplat、NoPoSplat、FLARE、AnySplat 在此基础上把输出换成像素对齐或体素对齐的 3D 高斯,于是几何与外观共用一套可微表示,渲染质量随之提升,还能顺带支持重打光、编辑这类下游操作。问题出在输出的「粒度」上:这些方法的基元是在图像平面(或体素网格)上生成的,一个基元对应一个像素或一个格子,所以它们的输出密度和空间覆盖被输入视角钉死——只能表达观测到的表面。一旦新视角偏离输入相机,遮挡区、未观测区就没有基元可用,渲染结果直接出现空洞和伪影。

这与另一条技术路线形成对照:NeRF 与 3D Gaussian Splatting 的基元并不长在图像平面上,位置是优化出来的,因此能表达可见表面之外的几何,代价是每个场景都要重新做一次优化,几分钟到几小时,无法利用大规模数据学到的先验。换言之,前馈方法买到了速度与泛化,付出的是「表达自由度」——它把「基元放在哪」这个决定权交给了输入视角的采样格点,而不是交给网络。要同时保住前馈的速度和优化式方法的表达自由度,就必须让场景表示与任何特定视角解耦。

本文的切入角度借自检测与场景理解里的 query 范式(DETR、DETR3D、PETR):既然检测器能用一组可学习 query 去 3D 空间里「找」目标,那重建也可以让一组查询直接在 3D 空间里「长」出基元。UniQueR 因此维持一个固定预算的稀疏查询集(4096 个),每个查询带一个显式 3D 坐标和一个隐嵌入,坐标活在所有视角共享的场景坐标系里而不是任何一帧的相机系里;查询与多视图图像特征交互后各自派生一簇高斯,通过可微泼溅渲染成 RGB 与深度接受监督——完全不需要 3D 真值。核心 idea:把场景表示从「像素的函数」换成「一组带显式 3D 坐标的可学习查询」,并让监督视角成为输入视角的超集(3 输入视角额外监督 3 个留出视角),逼着查询把高斯分配到没被观测到的地方。

方法详解

整体框架

输入是同一个场景的 \(N\) 张无位姿 RGB 图像。先由 DINOv2 ViT 抽逐帧 token,经过交替注意力(alternating attention,帧内与帧间注意力交替)聚合跨视图信息,再由任务解码器输出三种逐帧几何标注:相机到世界位姿 \(P_i\in SE(3)\)、局部点图 \(X_i\in\mathbb{R}^{3\times H\times W}\) 与置信度图 \(C_i\)。这些点图有双重身份——既是要报告的几何输出,也是后面初始化查询坐标的几何先验。

真正的场景表示是 \(Q=4096\) 个可学习查询:每个查询有一个显式 3D 坐标 \(p_i\)(活在一个非度量的、所有视角共享的 per-scene gauge 里,注意这个坐标系不是第一台相机的坐标系)和一个高维隐嵌入。查询依次通过 12 层 Query Transformer 与图像 token 交互:每层先做 query→image 的交叉注意力,再做仅 query 之间的自注意力。精炼后的查询各自派生 \(K=64\) 个高斯,得到 \(Q\times K = 262\text{K}\) 个彩色基元;这些基元被可微光栅化成 RGB 与深度,与输入视角及留出的新视角做监督。整个过程一次前向完成,输出位姿、点图与一套可直接渲染的高斯;若允许额外的逐场景优化,这套高斯还能当作测试时优化(TTO)的初始化,把渲染质量再往上推一档。

%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
    A["无位姿多视图图像"] --> B["DINOv2 + 交替注意力<br/>预测位姿 / 点图 / 置信度"]
    B -->|点图作几何先验| C["混合初始化的<br/>稀疏 3D 查询"]
    B -->|Plücker 射线位置编码| D["解耦交叉注意力<br/>查询传播"]
    C --> D
    D --> E["查询派生的<br/>高斯泼溅"]
    E --> F["新视角监督<br/>渲染 RGB 与深度"]
    F --> G["输出:位姿 / 点图 / 高斯"]

关键设计

1. 混合初始化的稀疏 3D 查询:让基元位置由网络而非像素格点决定

查询集是全文的表示核心:稀疏(4096 个)、带显式 3D 坐标、且预算是固定的——它不随输入视角数量和图像分辨率变化,这一点与逐像素方法有本质区别(图像 token 数仍随视角数线性增长,查询数则不变)。要让它工作,初始化是第一个坎。DETR 式的稀疏查询之所以能学出合理位置,是因为检测任务有框级别的监督直接约束坐标;而稠密重建只有 2D 渲染损失,没有 3D 框,纯随机初始化的坐标会不稳定——消融里这一项直接崩溃(PSNR 12.11)。UniQueR 因此采用混合初始化:一半查询坐标从预测出的非度量点图里采样,让它们贴住已观测表面获得几何支撑;另一半在归一化后的 3D 场景范围内均匀撒点。需要强调的是「均匀」只作用于初始化,经过 transformer 精炼与查询形变预测之后,这些锚点可以自由离开初始位置;最终形变后的查询是局部高斯簇的中心,查询中心和高斯都不被约束落在表面上,这正是它能往遮挡区放几何的前提。

2. 解耦交叉注意力查询传播:把拼接自注意力的平方复杂度拆开

让查询吸收多视图证据的最直白做法是把查询 token 和图像 token 拼接起来做 full self-attention,代价是 \(O\big((Q + NT)^2\big)\),其中 \(T=HW/p^2\) 是单张图的 token 数。对 4096 个查询加高分辨率多视图输入,这个开销不可接受,而且拼接后图像 token 还得被丢弃(它们的更新对下游没用)。UniQueR 改为每层拆成两步:先让查询通过交叉注意力从图像 token 取特征,再让查询之间做一次自注意力,复杂度降到 \(O(QNT + Q^2)\)——图像侧与查询侧从「两两全连接」变成「各取所需再互相协商」,显存与时延的收益在实验的端到端对比里直接体现(32 视角下比 AnySplat 少 39% 显存、快 2.35 倍)。配套的位置参数化同样关键:图像 token 用预测位姿转成的 Plücker 射线嵌入做位置编码,查询则天然自带 3D 坐标当位置编码,两边因此是在同一个 3D 语义下交互,而不是在各自视角的 2D 坐标系里对齐。

3. 查询派生的高斯泼溅:稀疏查询长出稠密基元

查询不可能自己就是渲染单元——4096 个点太稀疏,画不出细节。所以每个查询被当作一个高斯簇的「种子」:其更新后的嵌入先预测一个形变 \(\delta q_i\),把簇心从初始锚点挪到网络认为合适的位置;再由一个 MLP 解码 \(K\) 个相对簇心的局部偏移 \(\delta g_{ik}\),同时属性头输出不透明度、尺度、旋转与颜色。整理成集合形式就是

\[ G = \bigcup_{i=1}^{Q}\bigcup_{k=1}^{K}\ \{\, p_i + \delta q_i + \delta g_{ik},\ \Sigma_{ik},\ c_{ik},\ \alpha_{ik} \,\} \]

(⚠️ 原文公式 (8) 在缓存文本中排版错乱,此处按正文叙述整理,符号以原文为准。)这套「稀疏查询 + 局部稠密簇」的表示是全文效率优势的来源:AnySplat 在 32 视角下要 3.85M 个基元,UniQueR 只用 262K,少 14.7 倍,却因为位置是网络自己选的,反而覆盖得更完整。没有 3D 真值也没关系——高斯泼溅承担了 3D 与 2D 之间的可微桥,RGB 与深度这类 2D 信号远比 3D 标注易得,监督因此可以完全在图像域完成。

4. 新视角监督:让「往没看见的地方放高斯」这件事被损失函数逼出来

表示自由度只是必要条件,还得有信号去用它。如果只用输入视角渲染出来的图像做监督,模型完全可以把 4096 个查询全挤在观测表面上,训练损失一样能降得很低。UniQueR 的做法是让监督视角成为输入视角的超集:给三个输入视角时,模型会渲染六个视角——三个输入视角加三个留出的训练视角——并全部与对应真值比对。留出视角上任何缺失的外观或几何都会变成渲染损失里的空洞误差,模型只能通过把高斯分配到输入视角看不到的区域来消除它。这个设计的巧妙之处在于它把「补全遮挡区」转化成了一个无需 3D 标注的渲染目标:不需要人告诉网络哪里缺东西,留出视角的靶图会自动暴露缺失。论文也在消融里验证了这类信号的方向性——去掉深度渲染监督后 PSNR 从 20.23 掉到 19.96,说明几何线索与光度线索共同稳定了查询的定位。

一个完整示例

以三个输入视角、Stage-1 的 \(224^2\) 分辨率走一遍。初始化时,约 2048 个查询的坐标从预测点图中采样(贴住已观测表面),另外约 2048 个在归一化场景范围内均匀撒开;12 层 Query Transformer 中,每个查询先按 Plücker 射线编码的图像 token 取特征,再与其它查询协商一次,随后每个查询的嵌入预测一个形变把簇心挪到合适位置,并解出 64 个局部偏移 → 4096 × 64 = 262K 个高斯;这些高斯被渲染到 6 个视角(3 输入 + 3 留出),留出视角上的空洞直接进入损失。Stage-2 把分辨率提到 \(448^2\) 再微调 20 个 epoch。

损失函数 / 训练策略

总损失由三项组成,渲染光度项、尺度不变的渲染深度项与骨干网络的相机项:

\[ \mathcal{L} = \mathcal{L}_{\text{rgb}} + \lambda_d \mathcal{L}_{\text{depth}} + \lambda_c \mathcal{L}_{\text{cam}}, \qquad \lambda_d = 0.1,\ \lambda_c = 0.2 \]

其中 \(\mathcal{L}_{\text{rgb}}\) 在 Stage 1 是 \(\ell_1\) 重建项加 LPIPS 感知项;到 \(448^2\) 的 Stage 2 微调时只留 \(\ell_1\),因为 LPIPS 会显著拉长训练时间。

训练采用分阶段策略:DINOv2 编码器、交替注意力 transformer 与点图头从 Pi3 初始化后冻结(890.99M 参数),只训练相机头、12 层 Query Transformer 与高斯派生/属性头(502.31M 可训练参数,总计 1.393B)。优化器为 AdamW,学习率 \(10^{-4}\) 余弦衰减,在 \(224^2\) 上训 100 个 epoch(32 张 A100),再在 \(448^2\) 上微调 20 个 epoch;每个样本含 2–64 个输入视角,查询预算恒为 \(Q=4096\)。此外论文还给出一个可选的测试时优化(TTO)协议:以预测高斯为初始化、预测位姿为输入,把高斯渲回输入视角并针对原图计算重建损失反传,用于稠密视角设置下的进一步提升。

实验关键数据

主实验

稀疏视角新视角合成(输入与测试视角不相交,每个场景平均 5 组输入子集,只在留出目标上算指标;推理时间为单次前向、单张 A100 80GB):

数据集 方法 PSNR↑ SSIM↑ LPIPS↓ 时间 (s)↓
Mip-NeRF 360 NoPoSplat 18.21 0.482 0.426 0.416
Mip-NeRF 360 AnySplat 20.08 0.606 0.274 0.279
Mip-NeRF 360 UniQueR 22.70 0.660 0.261 0.213
VR-NeRF NoPoSplat 21.28 0.744 0.381 0.406
VR-NeRF AnySplat 19.67 0.745 0.313 0.290
VR-NeRF UniQueR 21.99 0.708 0.446 0.198

两视角的 RealEstate10K(150 个随机场景,2 输入 + 2 不相交目标视角):FLARE 17.74 / 0.586 / 0.371,AnySplat 18.93 / 0.615 / 0.226,UniQueR 20.50 / 0.672 / 0.196——三项指标全面领先。

相机位姿估计(RRA@30 / RTA@30 / AUC@30,均为 30 度阈值):

方法 RealEstate10K RRA↑ RTA↑ AUC↑ Co3Dv2 RRA↑ RTA↑ AUC↑
Fast3R 99.05 81.86 61.68 97.49 91.11 73.43
CUT3R 99.82 95.10 81.47 96.19 92.69 75.82
VGGT 99.97 93.13 77.62 98.96 97.13 88.59
Pi3 99.99 95.62 85.90 99.05 97.33 88.41
UniQueR 99.99 95.44 83.69 99.05 97.44 88.52

论文自己的解释是位姿与 Pi3 基本持平、略有差距,原因更可能是训练数据更少(Pi3 用了私有数据集)——这条对比需要带保留地看。

稠密视角与逐场景优化(Mip-NeRF 360,64 输入视角;上段为纯前馈,下段为前馈初始化 + 逐场景优化):

方法 PSNR↑ SSIM↑ LPIPS↓
AnySplat(前馈) 21.26 0.607 0.303
UniQueR(前馈) 21.58 0.641 0.335
3DGS + AnySplat 23.71 0.664 0.266
3DGS + UniQueR 26.00 0.784 0.176
MipSplatting + AnySplat 23.84 0.675 0.257
MipSplatting + UniQueR 25.99 0.782 0.178

VR-NeRF 上的这一对比更悬殊:32 视角下 3DGS + 基线在 21.90(AnySplat)/ 21.74(VGGT),3DGS + UniQueR 达 27.03,64 视角下 28.56。

消融实验

Stage-1(\(224^2\)、3 输入视角、Mip-NeRF 360)的组件消融:

配置 PSNR↑ SSIM↑ LPIPS↓ 说明
完整模型(混合初始化) 20.23 0.713 0.182
(a) 去掉深度渲染监督 19.96 0.718 0.234 深度线索对稳定几何很关键
(b) 只用点图初始化查询 18.58 0.627 0.313 几何有支撑但覆盖受限
(c) 只用随机初始化查询 12.11 0.259 0.574 无 3D 监督时随机坐标直接崩溃

效率与渲染深度对比(32 输入视角、\(448^2\)、单张 A100):

方法 高斯数量 GPU 显存 时间 (s) 深度 Abs Rel↓
AnySplat 3.85M 18.42 GB 4.63 0.062
UniQueR 262K 11.19 GB 1.97 0.038

关键发现

  • 混合初始化是稳定性来源,不是锦上添花:随机初始化会彻底失败(12.11 PSNR),而只用点图初始化虽稳却明显弱于混合(18.58 vs 20.23)。这说明两类锚点分工不同——点图给的表面接地保证可优化性,均匀撒点提供的空间覆盖让网络有机会往遮挡区外推。
  • 渲染质量与感知质量并不总是同向:稀疏视角下 UniQueR 的 PSNR 在 Mip-NeRF 360 与 VR-NeRF 上都最好,但 VR-NeRF 的 SSIM / LPIPS 输给 NoPoSplat(0.708 / 0.446 对 0.744 / 0.381)。这与作者承认的「为紧凑性牺牲部分高频感知细节」一致,也提示固定查询预算是这段的短板。
  • 纯前馈在稠密设置下会被逐像素方法反超,但作为初始化价值巨大:32 / 64 视角时 UniQueR 前馈 PSNR 略低于 AnySplat(21.51 / 21.58 对 22.32 / 21.26),差距被作者归因于基元数差了近两个数量级;然而把预测高斯当作逐场景优化的起点后,3DGS + UniQueR 全面领先(Mip-NeRF 360 64 视角 26.00 / 0.784 / 0.176)。
  • 位姿精度会级联影响逐场景优化:VR-NeRF 上 3DGS + AnySplat 甚至不如纯前馈的 AnySplat,作者归因于 AnySplat 的位姿误差与它自身预测的高斯是绑定的,误差会拖垮优化;UniQueR 同时给出更准的位姿和更好的高斯初始化,因此这一环没有出现退化。
  • 清晰的缩放律:查询数量、每个查询的高斯数(16 / 32 / 64)与模型容量三条曲线都是单调正收益,说明这套表示还没有触到容量上限。
  • 几何质量:渲染深度 Abs Rel 从 AnySplat 的 0.062 降到 0.038,与定性图中 AnySplat 在遮挡区出现深度空洞、UniQueR 边界更干净的现象一致。

亮点与洞察

  • 把「输出粒度」和「输入采样格点」解耦,是这篇论文最核心的一步:前馈重建此前的隐含假设是「一个像素对应一个基元」,UniQueR 换成「一个学习到的 3D 锚点对应一簇基元」,密度和覆盖因此不再由输入视角决定。这个视角转换可以搬到任何「生成基元受限于输入网格」的任务上,比如稀疏点云补全、SLAM 的地图表示、动态场景重建。
  • 新视角监督把补全遮挡区变成了纯 2D 的监督问题:不需要任何 3D 标注,只要让监督视角严格包含输入视角以外的靶图,缺失就会自动变成可见误差。这是一个几乎零成本、可复用到任何前馈重建/生成管线的技巧。
  • 纯随机初始化的稀疏查询在只有 2D 渲染损失时不稳定,这个观察本身很有价值:它说明了 DETR 式查询的可学习性在多大程度上依赖框级监督,也解释了为什么混合初始化是必须的而不是可选的。
  • 让查询自带 3D 坐标做位置编码、图像侧用 Plücker 射线,是个低调但关键的设计——它保证了「查询与图像 token 的注意力」是在同一个 3D 语义空间里发生的,而不是两套 2D 坐标硬凑。

局限与展望

  • 论文自陈:只处理静态场景,不建模时序动态;固定查询预算在高度复杂的场景会欠表达;方法依赖一个大型冻结的几何骨干;并且为紧凑性牺牲了部分高频感知细节。作者给出的后续方向是自适应查询分配、更轻的骨干、可控的组件消融与带时序持久性的查询。
  • 冻结骨干带来的是实打实的推理成本:890.99M 冻结参数、总计 1.393B,单次前向在 A100 上仍需 1.97s(32 视角),谈不上实时;而以 AnySplat 为代表的逐像素方法虽然基元多,前向时间也只是同一量级(4.63s)。
  • 场景坐标系是非度量的(相似变换不确定,且不是第一相机系),因此模型输出的几何没有绝对尺度,直接给机器人、自动驾驶用需要一个额外的尺度恢复步骤;论文也明确说全局相似变换不改变渲染监督,这既是训练上的便利,也是部署上的限制。
  • 消融偏浅:只在 Stage-1(\(224^2\)、3 输入视角)上做,缺少对固定查询数、监督视角超集构造方式(留出几个视角最合适)、Plücker 位置编码等关键设计的组件级对照;Fig. 5 的缩放律只报 PSNR,没有 SSIM / LPIPS,无法判断容量变大时感知质量是否同步改善。
  • 位姿对比只覆盖 RealEstate10K 与 Co3Dv2,且与 Pi3 使用不同训练数据,结论「基本持平」实际上不可直接比大小;论文对这一点比较诚实,但读者仍不应把它当成位姿精度的定论。
  • 改进思路:把固定查询预算换成按场景复杂度自适应的分配(例如由点图置信度或图像覆盖度决定每个区域分多少查询);把查询持久化到时序上做动态场景;用蒸馏方式去掉对大型冻结骨干的依赖。

相关工作与启发

  • vs DUSt3R / VGGT / Pi3: 它们一次前向回归逐像素点图(2.5D,密度绑定输入像素),UniQueR 输出带显式 3D 坐标的稀疏查询派生的高斯。UniQueR 借用了这条线的几何先验(点图头直接从 Pi3 初始化并冻结)却不继承其 2.5D 输出,属于直接继承 + 局部替换的关系;代价是保留了一个大骨干。
  • vs AnySplat / NoPoSplat / FLARE / MVSplat: 它们预测像素或体素对齐的高斯,覆盖范围与输入视角一致,因此在新视角下会出现空洞(论文的定性图显示 AnySplat 有明显的空白 RGB 区域与深度空洞)。UniQueR 用查询解耦覆盖,代价是在纯前馈的稠密设置下基元数太少、指标略逊,但作为逐场景优化的初始化大幅领先。
  • vs 逐场景优化的 NeRF / 3DGS / Scaffold-GS: 它们能表达可见表面之外的几何,但要为每个场景重新优化;Scaffold-GS 的锚点思路最接近本文的查询,但锚点是被优化的、且仍属逐场景重建,不是前馈预测。UniQueR 相当于把「锚点式表示」前馈化。
  • vs LRM / LVSM / SceneTok / TokenGS: 它们也用学习到的 token 表示场景,但 token 是隐式的、没有显式 3D 坐标,主要解码到目标视角或生成式表示;UniQueR 的每个 token 带一个明确的 3D 位置并派生局部高斯簇,配合 Plücker 射线编码的注意力来收集多视图证据,这是它区别于「latent token」类工作的关键。
  • 启发:把「表示的选择」当成前馈重建的一等设计变量(而不是只改骨干或损失),这条思路在 4D 动态重建、可编辑场景表示、以及需要位姿与几何联合输出的机器人体感任务上都有直接的延展空间。

评分

  • 新颖性: ⭐⭐⭐⭐ 把 DETR 式稀疏查询引入稠密前馈重建并配合新视角监督,视角转换清晰;但锚点/查询式 3D 表示在 Scaffold-GS、TokenGS 等工作中已有先声,论文也承认存在同期工作。
  • 实验充分度: ⭐⭐⭐⭐ 三个数据集覆盖渲染、深度、位姿与效率四个维度,缩放律也做了;但消融只在 Stage-1 小分辨率上做,缺少关键设计的组件级对照与感知指标的缩放曲线。
  • 写作质量: ⭐⭐⭐⭐ 方法与动机的因果链交代得干净,对照表(Tab. 1)把与逐像素方法的表示差异讲得很清楚;个别指标的胜负(VR-NeRF 的 SSIM / LPIPS)在正文里点到但未深挖原因。
  • 价值: ⭐⭐⭐⭐ 26.2 万级高斯基元就能取得这一档渲染与几何精度,作为逐场景优化的初始化尤其有价值;非度量坐标系与大型冻结骨干是落地前需要解决的实际障碍。