论文解读与源码复现|GFS-VL:借力 3D 视觉语言模型做广义少样本点云分割(CVPR 2025)

论文首页题目与摘要截图

论文首页题目与摘要截图

一、前言

广义少样本 3D 点云分割(GFS-PCS)的要求很现实:模型先在基础类上训练,注册少量新类样本后,不依赖任何支持样本就能同时分割基础类与新类——这是落地场景(新类层出不穷的室内/机器人感知)真正需要的能力。现有方法(CAPL、GW)全靠原型学习 + 支持/查询特征交互精炼,但信息源只有那几个少样本——新类知识稀疏是天花板。

与此同时,3D 视觉语言模型(RegionPLC、OpenScene 等)靠海量图文对齐获得了开放世界的 3D 语义知识——稠密但带噪。直接拿 VLM 预测当伪标签?噪声会污染少样本模型。哥本哈根大学、ETH、南开与牛津合作的 GFS-VL 给出的答案是"扬长补短"的三件套:伪标签筛选(用精确但稀疏的少样本原型过滤 VLM 的稠密伪标签)→ 自适应填补(对筛掉后无标注的区域,用"当前伪标签上下文 + 少样本原型"构成的自适应原型集补标)→ 新-基混合增广(把支持样本嵌入训练场景并保留上下文)。在自建的 ScanNet200/ScanNet++ 难基准上,HM 指标相对 SOTA 提升 17.9–28.6%。

二、方法解析

2.1 任务与框架骨架

GFS-PCS 设定(论文 3.1 节):基础类集 $\mathcal{C}_b$($N_b$ 类)先训练;新类集 $\mathcal{C}_n$($N_n$ 类)每类只有 K 个支持样本;测试时对 $\mathcal{C}_b \cup \mathcal{C}_n$ 全集分割、不给支持样本。GFS-VL 用最简结构——backbone(PTv3)+ 线性分类头:基础预训练后,为新增类加一个线性头 $H_n$,拼接输出 $P = [H_b(F), H_n(F)]$(式 1–2),再用精炼后的监督微调 20 epochs。

2.2 伪标签筛选:少样本原型当"质检员"

用 3D VLM 的视觉编码器 $\Theta_v$ 从少样本支持集提取每个新类的支持原型(式 3,masked 平均特征):$p_c = \mathcal{F}_{pool}(X_n^c, Y_n^c)$。然后对基础训练场景 $X_b$,用全部类名提示 3D VLM 得到原始预测 $\hat{Y}$,同样提取每类预测原型 $u_c$(式 4)。筛选规则(式 5):

$$\hat{Y}_i = \begin{cases} -1, & \text{若 } \hat{Y}i \text{ 为基础类,或为新类但 } \mathrm{sim}(u{\hat{Y}i}, p{\hat{Y}_i}) < \tau \ \hat{Y}_i, & \text{否则} \end{cases}$$

即:基础类预测全部丢弃(有真标签);新类预测只有在该类的预测原型与少样本支持原型足够相似(余弦相似度 ≥ τ)时才保留。筛选后的可靠新类伪标签合并进背景区域(式 6),得到增强监督 $Y'_b$。

2.3 自适应填补:补全漏检、找回漏类

筛选留下的未标注区域($-1$)可能对应"VLM 漏掉或标错一半"的新类对象。填补策略构造自适应原型集(式 7–8):每个新类若在当前 $Y'_b$ 中有可靠伪标签就用其原型 $v_c$,否则回退到少样本支持原型 $p_c$。然后对每个未标注点,与自适应原型集算余弦相似度,最大值 ≥ δ 时赋予对应新类(式 9):

$$Y''{b,i} = \begin{cases} \arg\max_c S{b,i}^c, & \text{若 } \max_c S_{b,i}^c \ge \delta \ -1, & \text{否则} \end{cases}$$

这套机制同时完成两件事:补全不完整的伪标签 mask(用上下文原型 $v_c$)与发现被整体漏掉的新类(用支持原型 $p_c$)。

Figure 2

图片源自论文 Figure 2:GFS-VL 总览。(a) 新-基混合把支持样本嵌入训练场景;(b) 3D VLM 生成原始预测 → 伪标签筛选 → 自适应填补 → 精炼监督训练 3D 分割器;(c)(d) 筛选与填补的细节。

2.4 新-基混合:上下文保留的增广

与 Mix3D 等"跨场景乱叠"的增广相反,GFS-VL 主张保留上下文——新类往往是难检对象,孤立的物体模式不足以学会(论文引 CAPL 的发现)。做法:从支持样本中按新类 mask 裁剪局部块(式 10);提取训练场景与局部块在 XY 平面的四个角点,随机选一对对角(式 11),计算平移向量把局部块贴合到场景的角落——块与场景自然衔接、不破坏两侧的上下文。

三、数据集与实验设置

两个新基准(论文指出旧基准只有 6 个新类、多样性不足):

基准基础类新类新类出现次数范围平均点数范围
S3DIS(旧)7629–18530,013–59,929
ScanNet(旧)136133–4111,148–4,479
ScanNet200(新)1245102–733279–12,641
ScanNet++(新)121882–143604–84,375

评测在整场景(而非此前的小块)上进行,0.02m 体素化。指标:mIoU-B(基础)/ mIoU-N(新类)/ mIoU-A(全类)/ HM(B 与 N 的调和平均,抑制基础类偏置)。设置:PTv3 backbone(800 epochs 基础预训练)+ RegionPLC 3D VLM;微调 20 epochs(Adam lr 0.001/0.007);5-shot 与 1-shot 各 5 个随机种子平均;全监督上限与 GW/COSeg/attMPTI/PIFS 基线(统一 backbone 重训以保证公平)。

四、关键实验结果

1. ScanNet200 新基准:HM 相对提升 28.6%(Table 2):

方法5-shot: mIoU-B / N / A / HM1-shot: mIoU-B / N / A / HM
全监督上限68.70 / 39.32 / 45.51 / 50.02同左
PIFS28.78 / 3.82 / 9.07 / 6.7117.84 / 2.87 / 6.02 / 4.88
COSeg57.67 / 5.21 / 16.25 / 9.5447.03 / 4.03 / 13.09 / 7.42
GW(前 SOTA)59.28 / 8.30 / 19.03 / 14.5555.23 / 6.47 / 16.74 / 11.56
GFS-VL67.57 / 31.67 / 39.23 / 43.1268.48 / 29.18 / 37.45 / 40.92

5-shot 下 mIoU-N 从 8.30 跃至 31.67(相对 GW +281%)、HM +28.57%,基础类也同时上涨(59.28→67.57)——VLM 知识与少样本精度是互补而非争夺。

2. ScanNet++ 新基准(Table 3):1-shot mIoU-N 19.42 vs GW 6.63(+192%)、HM 29.47 vs 11.59(+17.88% 相对提升口径按论文为 17.88pp 场景下比较)。

3. 旧 ScanNet 基准同样碾压(Table 4):1-shot mIoU-N 49.72 vs GW 14.78(+34.94pp)、HM 60.88 vs 21.55(+39.33pp)——与全监督上限(60.37/68.33)几乎重合。

4. 消融(Table 5a):原始 VLM 伪标签直训 33.28 HM → +筛选 38.35 → +填补 39.39 → +新基混合 43.22——三模块逐级有效、组合最优。填补阈值 δ=0.9 最优、筛选阈值 τ 在 0.5–0.8 区间均稳(鲁棒)。

5. 跨 VLM 与跨 backbone(Table 5b/5f):RegionPLC(HM 31.56→43.22)与 OpenScene(23.58→31.07)都能被框架放大;PTv3 与 SparseConvNet 两个 backbone 上结论一致——方法不绑定特定模型。

6. 混合策略对比(Table 5g):NB-Mix(HM 39.36)> Mix3D(36.42)> Instance Mix(35.44)——保留上下文的直觉得到实证。

五、机制解释与讨论

为什么"筛选+填补"优于直接用伪标签? VLM 伪标签的错误不是均匀噪声:大部分区域是对的、错的是成片的误分类。直训会把错误固化进少样本模型(误差累积)。筛选用少样本原型做逐类质检——某类的整体预测原型与支持原型不像,说明该类预测大概率整体不可靠,直接整类丢弃(mask 索引实现,无需逐点循环);填补则承认"筛掉的坑里可能埋着真新类",用自适应原型做保守的二次标注。一放一收,恰好把"稠密但噪"的信息转成"稠密且基本对"的监督。

具体发现 → 凝练结论:

  • 具体发现一:直用 VLM 伪标签 HM 仅 33.28 —— 结论:开放世界知识必须经少样本校准才能进入少样本模型;
  • 具体发现二:基础类 mIoU 也从 65.50 涨到 67.42 —— 结论:新类伪标签填充了背景区域的语义空洞,对基础类学习同样是正则;
  • 具体发现三:NB-Mix 优于 Instance Mix/Mix3D —— 结论:对难检的新类,"物体长在哪、周围是什么"与"物体长什么样"同样重要。

六、局限与工程启示

局限:

  • 依赖一个预训练好的 3D VLM(RegionPLC/OpenScene),其 2D 蒸馏或 caption 生成过程自身的偏差会传入伪标签(筛选只能挡住"与少样本不符"的错,挡不住"VLM 与少样本一起错");
  • 新基准的类划分(哪些算基础/新类)引入了设计自由度;
  • 推理依赖 VLM 的视觉编码器提取特征做填补,部署链路比纯分割器长。

工程启示:

  • "少样本精标注 + 开放词汇模型的稠密伪标签"是当前标签高效 3D 分割的最优组合:前者当质检员与锚点,后者当知识源——两边的角色不要搞反;
  • 逐类原型相似度筛选(而非逐点置信度)实现简单、可向量化,是伪标签去噪的轻量方案;
  • 增广策略要审题:全监督场景的"上下文破坏式"增广(Mix3D)对少样本泛化可能有害,NB-Mix 的角点贴合可直接复用;
  • 两个新基准(ScanNet200 45 新类 / ScanNet++ 18 新类、整场景评测)应作为后续 GFS-PCS 工作的标准评测,旧基准的 6 新类已饱和(GFS-VL 已逼近全监督上限)。

七、源码复现

⚠️ 复现路径/未运行:以下为源码结构与预期运行路径分析,非实际运行结果。完整训练需多卡 GPU 与 ScanNet 数据(需官方许可下载)。

7.1 仓库目录结构(实际下载内容)

2868-GFS-VL/
├── README.md / LICENSE.md / docs/GFS_VL.png
├── scripts/{train.sh, test.sh}
├── tools/{train.py, test.py}
└── pointcept/                    # Pointcept 框架
    ├── engines/train.py          # ★ 训练引擎:VLM 接入 + 伪标签筛选/填补
    ├── datasets/scannetpp.py     # ScanNet++ GFS 基准数据集
    ├── models/PLA/tools/cfgs/scannet200_models/zs/  # 3D VLM 配置
    └── ...(Pointcept 标准结构)

7.2 关键代码片段(摘自 pointcept/engines/train.py)

伪标签筛选:逐类计算预测原型,与 3D VLM 少样本支持原型 vlm_novel_proto 做余弦相似度,低于 τ 的整类置 −1(对应论文式 5):

# pointcept/engines/train.py(节选)
def pseudo_label_selection(self, all_pred_cloud, all_feat_cloud, offset, ps_thresh=0.6):
    filtered_preds = []
    for start_idx, end_idx in zip([0] + offset[:-1], offset):
        class_prototypes = {}
        pred_cloud = all_pred_cloud[start_idx:end_idx].clone()
        feat_cloud = all_feat_cloud[start_idx:end_idx].clone()
        for class_id in pred_cloud.unique():            # 逐类预测原型 u_c
            class_mask = pred_cloud == class_id
            class_prototypes[class_id.item()] = feat_cloud[class_mask].mean(dim=0)
        for class_id, proto in class_prototypes.items():
            if class_id < self.cfg.data.num_bases:
                pred_cloud[pred_cloud == class_id] = -1  # 基础类预测丢弃
            else:
                novel_proto = self.vlm_novel_proto[class_id - self.cfg.data.num_bases]
                similarity = torch.cosine_similarity(proto, novel_proto, dim=0)
                # 低于 τ 的新类预测同样置 -1(代码续接处)

自适应填补:背景未标注点与"当前伪标签原型 ∪ 少样本支持原型"算相似度,超过 δ 才赋予新类(对应论文式 7–9):

# pointcept/engines/train.py(续)
for class_id in bg_pred_cloud.unique():                 # 当前伪标签原型 v_c
    class_features = bg_feat_cloud[bg_pred_cloud == class_id]
    current_prototypes[class_id.item()] = class_features.mean(dim=0)
for class_id in range(num_bases, num_base_novels):      # 自适应原型集 {m_c}
    updated_prototypes.append(current_prototypes.get(
        class_id, self.vlm_novel_proto[class_id - num_bases].clone()))

mask_neg_one = (pred_cloud == -1) & (cur_label == -1)   # 未标注区域
similarities = torch.cosine_similarity(
    feat_neg_one[:, None, :], updated_prototypes[None, :, :], dim=-1)
max_similarity, max_class_idx = similarities.max(dim=1)
refined_labels[mask_neg_one] = torch.where(
    max_similarity >= self.cfg.ai_thresh,               # δ 阈值(默认 0.9)
    class_ids[max_class_idx], -1)

7.3 复现步骤

  1. 环境与数据:按 Pointcept 环境安装;下载 ScanNet(合规申请)、ScanNet++ 数据并按 datasets/ 预处理(0.02m 体素化);下载 PTv3 与 RegionPLC 权重。
  2. 基础预训练:在 ScanNet200/ScanNet++ 的基础类上按 PTv3 标准配置训练 800 epochs。
  3. 注册与微调:scripts/train.sh 启动——构建零样本 3D VLM(build_zero_shot_model,类名 = 基础 + 新类)→ 从支持样本提取 vlm_novel_proto → 训练循环中在线执行伪标签筛选(ps_thresh=0.6)与自适应填补(ai_thresh=0.9)微调 20 epochs。
  4. 评测:scripts/test.sh 在整场景测试集上报 mIoU-B/N/A 与 HM,5 个种子平均,对照 Table 2–4。
  5. 消融:配置中逐项关闭 PS/AI/NB-Mix(Table 5a);换 OpenScene VLM(Table 5b);扫 δ ∈ {0.8,0.85,0.9,0.95} 与 τ ∈ {0.5–0.8}(Table 5c/d);换 SCN backbone(Table 5f);替换混合策略为 Instance Mix/Mix3D(Table 5g)。

7.4 原型筛选的粒度与数据泄漏检查

GFS-VL 的伪标签筛选并不是简单保留每个点上置信度最高的 VLM 预测,而是先按新类别聚合预测特征,形成场景内的预测原型,再与少样本支持原型比较。这样做利用了类别层面的整体一致性,但也带来一个重要边界:若某场景中某类预测点非常少,聚合原型可能不稳定;若预测区域混入其他类别,原型也可能被污染。复现时应记录每类参与原型计算的点数,并对低支持量类别做敏感性分析,而不是只报告一个固定阈值下的 HM。

数据划分上,支持样本必须与测试场景隔离,且不能把测试场景标签用于伪标签筛选或原型更新。基础类训练标签用于监督基础类,VLM 伪标签提供新类候选,两者来源应清晰标记。若在测试阶段根据真值调整筛选阈值,就会使结果不再代表广义少样本设定。建议固定随机种子、保存每个 seed 的支持集清单,并公开基础类/新类映射,确保对比方法面对相同数据划分。

7.5 结果解读:平衡指标、上下文与部署成本

广义少样本任务不能只看新类 mIoU。模型若通过牺牲基础类预测来提升新类,实际部署可能不可接受;HM 将基础类和新类表现合并,惩罚明显偏科。因此应同时给出 mIoU-B、mIoU-N、mIoU-A 与 HM,并结合类别级结果分析长尾新类的收益是否集中在少数容易类别。论文中基础类表现也提升,是伪标签补充背景语义的证据之一,但不应由此推断所有类别均等受益。

NB-Mix 强调把新类局部块放入训练场景并保留上下文。点云场景的语义常依赖空间关系:同一几何形状在不同邻域中可能属于不同物体部件。混合时若坐标尺度、地面高度或局部密度不匹配,会造成人工边界,模型学到拼接伪影。工程上应可视化混合前后场景,检查局部块与场景的空间衔接,并与 Instance Mix、Mix3D 等基线在相同计算预算下比较。

最后,训练阶段使用 3D VLM 生成伪标签,意味着标签效率提升是以额外模型计算和依赖为代价。部署模型是否仍需携带 VLM、伪标签是否离线缓存、不同场景是否重复计算特征,都会改变实际成本。论文的方法适合离线精炼训练监督;若目标是低延迟在线分割,需确认推理阶段所需模块并测量整条链路,而不仅仅报告 PTv3 分割头的速度。

八、总结

GFS-VL 的贡献是把 GFS-PCS 的知识来源从"几个支持样本"扩展成"少样本锚点 + 开放世界 VLM"的双源结构:筛选让少样本精度约束 VLM 的噪声,填补让 VLM 的稠密性反哺少样本的稀疏,新基混合则在数据层面保住了新类学习最需要的上下文。三个模块叠加后,新类 mIoU 相对前 SOTA 提升近三倍,在自建的 45/18 新类难基准上仍大幅领先——同时这些基准本身(整场景、多新类)也纠正了旧评测"小块 + 6 类"的失真。对做 3D 语义感知的团队,这是"基础模型时代做少样本"的一份方法学模板。

延伸阅读建议:GW 与 CAPL(GFS-PCS 先行工作)、COSeg(FS-PCS 相关性优化)、RegionPLC/OpenScene(3D VLM 知识源)、PTv3(backbone)、Mix3D(增广对照)、ScanNet200/ScanNet++(新基准数据底座)、原型网络(prototype learning 基础)。

九、引用信息

论文引用:

Zhaochong An, Guolei Sun, Yun Liu, Runjia Li, Junlin Han, Ender Konukoglu, Serge Belongie. Generalized Few-shot 3D Point Cloud Segmentation with Vision-Language Model. CVPR, 2025.

论文 PDF:https://openaccess.thecvf.com/content/CVPR2025/papers/An_Generalized_Few-shot_3D_Point_Cloud_Segmentation_with_Vision-Language_Model_CVPR_2025_paper.pdf

官方仓库:https://github.com/ZhaochongAn/GFS-VL

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐