OnlinePG: Online Open-Vocabulary Panoptic Mapping with 3D Gaussian Splatting¶
会议: CVPR 2026
arXiv: 2603.18510
机构: 浙江大学 CAD&CG 国家重点实验室, VIVO BlueImage Lab, HKUST
领域: 3D视觉
关键词: 全景建图, 开放词汇, 3D高斯溅射, 在线重建, 实例分割
一句话总结¶
提出 OnlinePG,首个基于 3DGS 的在线开放词汇全景建图系统,通过 local-to-global 范式——在滑窗内用多线索聚类图(几何重叠+语义相似+视图共识)构建局部一致 3D 实例,再通过双向二部匹配增量融合到全局地图——实现了在线方法中最优的语义和全景分割性能,ScanNet 上 mIoU 48.48 超越 OnlineAnySeg +17.2,且达到 10-18 FPS 实时效率。
研究背景与动机¶
领域现状:开放词汇 3D 场景理解是具身智能的基础。近年通过将 2D VLM(CLIP、LSeg、SAM)特征提升到 3D 空间(NeRF/3DGS),在离线设置下取得了优秀成果(LangSplat、OpenGaussian、PanoGS 等)。
现有痛点: - (a) 离线限制:大多数方法(PanoGS、LangSplat、OpenGaussian)需要预采集完整数据和全局优化,无法用于实时机器人任务 - (b) 缺乏实例级理解:在线方法 O2V-Mapping 只有语义分割但无法区分同类不同实例 - (c) 2D 分割噪声:VLM 产生的 2D 分割在多视图间不一致(过分割、欠分割),直接提升到 3D 导致噪声累积 - (d) 对比学习收敛慢:离线方法(InstanceGaussian、PanoGS)依赖收敛慢的对比特征学习来聚类实例,不适合在线系统
核心矛盾:2D VLM 的分割结果跨视图不一致(过分割、欠分割),直接提升到 3D 导致噪声实例。如何在在线流式输入下获得 3D 一致的全景实例和语义?
本文要解决:(1) 在线的全景(实例+语义)建图;(2) 从噪声 2D 分割获得一致 3D 实例;(3) 开放词汇查询。
切入角度:先在局部(滑窗)内通过多线索聚类解决 2D 不一致问题,再增量融合到全局地图。
核心 idea:local-to-global 范式——滑窗内多线索段聚类 → 局部一致实例 → 双向二部匹配 → 全局一致的全景地图。
方法详解¶
整体框架¶
OnlinePG 要解决的是:在 RGB-D 流式输入下实时建一张地图,它既要有几何、又能区分出每个物体实例、还能用任意文本去查询。真正卡脖子的地方在于,2D VLM(如 LSeg、EntitySeg)给出的分割掩码跨视图天生不一致——同一把椅子在不同帧里可能被切成两块、又或和旁边的桌子粘成一团,直接把这些噪声掩码抬到 3D,错误只会越积越多。
OnlinePG 的破局思路是 local-to-global:先在一个小滑窗里把噪声压下去,再把已经干净的局部结果增量地缝进全局地图。具体地,系统每 20 帧取一个关键帧、维护大小为 12 的滑窗;每个关键帧过 VLM 拿到语言特征和实例掩码,按掩码把投影出来的 3D 高斯分成若干「段」;每攒够 7 个关键帧,就在滑窗内用一张多线索聚类图把这些段合并成局部一致的 3D 实例,再通过双向二部匹配把局部实例融进全局地图。贯穿全程的是一套双表示:几何交给连续高斯、语义和实例标签交给离散体素网格。最终产出一张 3D 高斯全景地图,配合体素网格里存的语言特征即可支持开放词汇查询。
%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400, 'subGraphTitleMargin': {'top': 8, 'bottom': 16}}}}%%
flowchart TD
A["RGB-D 流 + 已知位姿"] --> B["关键帧选取(每 20 帧)<br/>维护大小 12 的滑窗"]
B --> C["2D VLM 特征提取<br/>LSeg 语言特征 + EntitySeg 实例掩码"]
C --> D["3D 高斯段初始化<br/>按掩码把投影高斯分成段"]
D --> E["多线索段聚类<br/>几何重叠 + 语义相似 + 视图共识"]
E -->|每攒 7 个关键帧,连通分量合并| F["局部一致 3D 实例"]
F --> G["双向二部匹配<br/>正反匈牙利算法取交集"]
G --> H["全局地图增量融合<br/>按置信度权重更新"]
H --> I["全局全景地图 + 开放词汇查询"]
subgraph REP["场景表示(连续高斯 + 离散体素网格)"]
direction TB
R1["高斯原语<br/>管几何 / 可微渲染"]
R2["体素网格<br/>语言特征 / 实例标签 / 置信度 / 权重"]
end
D -.写入几何.-> REP
REP -.属性供给.-> H
关键设计¶
1. 场景表示:用连续高斯管几何、用离散体素网格管语义和实例
一个绕不开的矛盾是,3D 高斯是连续表示,适合做几何优化和可微渲染,但并不适合稳定地存储「这块属于第几号实例」这种离散标签——一旦标签也跟着梯度漂移,实例边界就糊了。OnlinePG 干脆把两件事分开:几何交给高斯,语义和实例交给一套独立的体素网格,二者各取所长。
几何侧,每个高斯原语 \(\mathcal{G}_i := \{\boldsymbol{\mu}_i, \boldsymbol{\Sigma}_i, \sigma_i, \boldsymbol{c}_i\}\) 由位置 \(\boldsymbol{\mu}_i \in \mathbb{R}^3\)、协方差 \(\boldsymbol{\Sigma}_i \in \mathbb{R}^{3 \times 3}\)、不透明度 \(\sigma_i\)、颜色 \(\boldsymbol{c}_i \in \mathbb{R}^3\) 构成,负责重建和渲染。语义侧,则对重建区域做 3cm 体素化,每个占据体素挂四个属性——它们不进入梯度优化,而是随着新观测以离散方式增量更新,这样实例标签既能稳定累积、又能被后续融合机制改写:
| 属性 | 符号 | 维度 | 用途 |
|---|---|---|---|
| 语言特征 | \(\mathcal{F}\) | \(\mathbb{R}^{512}\) | 存储 VLM 语言特征,支持开放词汇查询 |
| 特征置信度 | \(\mathcal{C}\) | \(\mathbb{R}\) | 多视图特征加权融合的权重 |
| 实例标签 | \(\mathcal{T}\) | \(\mathbb{R}\) | 全景实例 ID |
| 实例权重 | \(\mathcal{K}\) | \(\mathbb{R}\) | 实例标签的置信度,用于全局融合决策 |
2. 多线索段聚类:把跨视图不一致的 2D 段拧成一致的 3D 实例
这一步正面回应整体框架里说的核心痛点:滑窗里堆着十几个关键帧投影出来的 3D 段,同一个物体被切成好几份、不同物体又可能被错并到一起。OnlinePG 不靠收敛缓慢的对比学习,而是把所有段当作图的顶点,用三种互补线索决定两段之间该不该连边、进而合并。
先把每个关键帧深度图投影出的高斯按 2D 掩码 ID 分组成段 \(\mathcal{S}_i := \{\mathcal{G}_j\}_{j=1}\),滑窗内所有段记为 \(\mathcal{S} := \{\mathcal{S}_1, \cdots, \mathcal{S}_n\}\)(\(n = \sum_{i \in \mathcal{W}} |m_i|\))。两段之间的边由三种线索共同决定。几何重叠 \(\mathcal{O}\) 把段体素化后算双向可见体素重叠比的对称平均,其中 \(\text{Cont.}(\mathcal{S}_i, \mathcal{S}_j)\) 是把 \(\mathcal{S}_j\) 投回 \(\mathcal{S}_i\) 视点时可见体素被包含的比率,取双向平均是为了避免大小悬殊的段被偏向:
语义相似 \(\mathcal{X}\) 按 2D 掩码对 LSeg 特征图做平均池化得到段级语言特征 \(z_i = \Phi(\{f(u,v): m(u,v) = i\})\),再算余弦相似度;视图共识 \(\mathcal{V}\) 则看两段在共同可见的关键帧里被标成同一实例的比例:
之所以非要三条线索,是因为任何单一线索都有盲区:几何重叠分不清同一位置堆叠的不同语义物体,语义相似分不清同类的多个实例(如并排的两个枕头),视图共识在观测稀疏时又不可靠。最终的合并判据用「或」把它们接起来——几何加语义足够高、或视图共识足够高,就连边——这样不同难度的场景都能命中至少一条可靠线索:
其中 \(\lambda_1 = 1.5\)、\(\lambda_2 = 0.8\),最后跑一遍连通分量算法 \(\mathcal{I} = \text{Cluster}(\{\mathcal{S}_i\}, \{\mathcal{E}_{ij}\})\) 即得到局部一致实例。这套图聚类处理一个 12 帧窗口只需约 350ms,比单线索方案高出 8–18 个 PRQ 点,额外延迟却只有约 40ms。
3. 双向二部匹配:把局部实例鲁棒地缝进全局地图
局部干净了还不够——滑窗每滑动一次,都要把这批局部实例并进已经积累的全局地图,且不能把同一物体记成两个、也不能把两个物体错并成一个。难点在于局部地图大多是新探索区域、全局地图是历史区域,二者的几何包含关系天然不对称,单向匹配很容易被这种不对称带偏。
OnlinePG 的做法是同时算两个方向的匹配矩阵。正向矩阵 \(\mathcal{M}_{l \to g} \in \mathbb{R}^{n_l \times n_g}\) 把语义余弦相似和几何包含比相加,反向矩阵 \(\mathcal{M}_{g \to l} \in \mathbb{R}^{n_g \times n_l}\) 则把几何包含的方向翻过来:
两个方向各跑一次匈牙利算法,只保留两边都认可的匹配——一对实例必须正反方向都被指派到一起才算确认,从而过滤掉单向看着像、实则不对称的伪匹配:
确认匹配后再更新全局地图,关键是一套基于置信度权重的博弈规则,让高置信度的分割逐步顶替低置信度的:语言特征按置信度加权平均 \(\mathcal{F}_g^t(v) = \frac{\mathcal{C}_l^t \cdot \mathcal{F}_l^t + \mathcal{C}_g^{t-1} \cdot \mathcal{F}_g^{t-1}}{\mathcal{C}_g^t}\);已匹配实例保留全局标签并累加权重 \(\mathcal{K}_g^t = \mathcal{K}_g^{t-1} + \mathcal{K}_l^t\);未匹配但局部权重不超过全局的,保留全局标签、扣减权重 \(\mathcal{K}_g^t = \mathcal{K}_g^{t-1} - \mathcal{K}_l^t\);未匹配且局部权重反超全局的,则直接换成局部标签 \(\mathcal{T}_g^t = \mathcal{T}_l^t\)、以差额作为新权重。
损失函数¶
3DGS 优化采用外观和几何 L1 损失的加权组合:
每次新增关键帧,随机选 5 个历史帧做 20 次优化迭代。语义/实例信息不参与梯度优化,通过体素网格的离散更新机制维护。
实验关键数据¶
主实验(3D 语义和全景分割)¶
| 方法 | 在线 | 全景 | ScanNet mIoU↑ | ScanNet mAcc↑ | ScanNet PRQ(T)↑ | ScanNet PRQ(S)↑ | Replica mIoU↑ | Replica PRQ(T)↑ | Replica PRQ(S)↑ |
|---|---|---|---|---|---|---|---|---|---|
| LangSplat* | ✗ | ✗ | 29.47 | 45.29 | 22.57 | 28.44 | 4.82 | 8.29 | 1.28 |
| OpenGaussian* | ✗ | ✗ | 24.89 | 37.35 | 22.87 | 19.71 | – | – | – |
| OpenScene* | ✗ | ✗ | 47.63 | 69.74 | 43.53 | 40.43 | 49.03 | 33.04 | 11.84 |
| InstanceGaussian | ✗ | ✓ | 34.14 | 54.95 | 39.04 | 27.41 | – | – | – |
| PanoGS | ✗ | ✓ | 50.72 | 70.20 | 33.84 | 36.22 | 54.98 | 43.04 | 30.60 |
| O2V-Mapping | ✓ | ✗ | 33.74 | 55.52 | – | – | 24.35 | – | – |
| OnlineAnySeg | ✓ | ✓ | 31.28 | 52.20 | 35.98 | 26.27 | 37.48 | 34.19 | 9.13 |
| OnlinePG (Ours) | ✓ | ✓ | 48.48 | 66.01 | 37.97 | 41.81 | 47.93 | 41.02 | 12.83 |
* 标灰方法使用监督式 3D 实例分割辅助计算 PRQ
消融实验一:匹配策略(ScanNet)¶
| 匹配策略 | PRQ(T) | PRQ(S) |
|---|---|---|
| #1 最近邻匹配 | 24.67 | 22.98 |
| #2 仅正向匹配 \(\mathcal{M}_{l \to g}\) | 35.83 | 38.40 |
| #3 仅反向匹配 \(\mathcal{M}_{g \to l}\) | 33.71 | 42.72 |
| #4 双向二部匹配(完整) | 37.97 | 41.81 |
消融实验二:系统组件(ScanNet)¶
| 设置 | mIoU | PRQ(T) | PRQ(S) |
|---|---|---|---|
| #1 无段聚类(直接融合关键帧段) | 48.48 | 32.25 | 30.68 |
| #2 无特征网格(仅实例级粗特征) | 30.40 | 26.71 | 24.92 |
| #3 完整系统 | 48.48 | 37.97 | 41.81 |
关键发现¶
- 在线方法全面最优:mIoU 比 OnlineAnySeg 高 +17.2(ScanNet)、+10.5(Replica)
- 全景分割大幅领先:PRQ(S) 比 OnlineAnySeg 高 +15.5(ScanNet),Stuff 分割提升显著
- 接近甚至超越离线 SOTA:与 PanoGS mIoU 差距仅 2.24,PRQ(S) 上超越(41.81 vs 36.22)
- 段聚类关键:去掉后 PRQ(S) 下降 11.13,对大面积 Stuff 区域一致性至关重要
- 特征网格关键:去掉后 mIoU 暴跌 18.08,实例级粗特征导致严重语义漂移
- 双向匹配 vs 最近邻:PRQ 提升 +13.3/+18.8,反向验证对 Stuff 尤其重要(+4.3)
- 多线索聚类:比单线索提升 8-18 PRQ,额外延迟仅 ~40ms
- 实时性能:简单场景 18 FPS,复杂场景 10 FPS(不含 VLM 前端)
- 开放词汇优势:对长尾概念("bag")和同语义多实例("pillow"×N)查询准确率远超 OnlineAnySeg
亮点与创新¶
- 首个在线全景+开放词汇的 3DGS 系统:统一了几何重建、实例分割、开放词汇理解三个能力
- Local-to-Global 范式:先在滑窗内解决 2D 不一致(小规模、可控),再只做匹配增量融合(轻量、鲁棒),将困难的全局问题分解为可控的两步
- 多线索聚类图:几何+语义+视图共识三线索互补,仅 350ms 处理 12 帧窗口
- 双向二部匹配:正反两方向匈牙利算法取交集,比单向更鲁棒,优雅处理局部/全局地图的非对称性
- 体素空间属性与高斯互补:高斯做连续渲染优化,体素做离散语义/实例更新——各取所长
- 在线方法中大幅领先:mIoU 和 PRQ 均显著超越 OnlineAnySeg 和 O2V-Mapping,部分指标超越离线 PanoGS
局限性¶
- 不支持动态物体:仅处理静态场景,动态目标会导致错误重建
- 依赖深度和位姿输入:需要 RGB-D 和已知相机位姿,限制了纯 RGB 场景的应用
- VLM 前端速度未计入:10-18 FPS 不含 LSeg 和 EntitySeg 的推理时间,完整系统实时性受前端瓶颈限制
- 室内场景为主:仅在 ScanNetV2 和 Replica 室内数据集验证,缺少室外大场景评估
- 超参数固定:\(\lambda_1\)、\(\lambda_2\)、体素大小、聚类频率等为手动设定,自适应调整可更高效
评分¶
| 维度 | 分数 |
|---|---|
| 新颖性 | ⭐⭐⭐⭐ |
| 技术深度 | ⭐⭐⭐⭐ |
| 实验充分性 | ⭐⭐⭐⭐⭐ |
| 写作质量 | ⭐⭐⭐⭐ |
| 实用价值 | ⭐⭐⭐⭐⭐ |