ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

GFS-VL:用3D VLM稠密知识破解少样本三维点云分割难题

GFS-VL:用3D VLM稠密知识破解少样本三维点云分割难题 最近两年三维点云分割的关注度明显上涨尤其是自动驾驶、机器人操作、数字孪生这些场景对点云感知的需求已经从“能不能分割”变成了“新类别能不能快速适配”。但真正做项目的人都会遇到同一个问题**标注三维点云数据实在太贵了。**在一帧雷达点云上框一个物体、逐点标一个类别成本比标一张图片高出一个量级。于是“少样本三维点云分割”成了学术界和工业界都在关注的解题方向。CVPR 2025 上出现的 GFS-VL 框架核心思路是把 3D 视觉语言模型3D VLM在训练中积累的稠密知识迁移到少样本点云分割任务里再通过少样本校准解决新类别适配问题。这篇文章不打算只复述论文摘要而是结合我们做点云感知的实际视角拆解 GFS-VL 到底解决了什么问题、方法上做了哪几件关键事、以及如果想复现或借鉴该怎么入手。读完你可以得到三样东西快速理解 3D VLM 和少样本分割结合的技术逻辑一套可以落地的训练/验证框架思路包含可参考的伪代码和数据组织方式实际工程里会遇到哪些坑以及对应的排查路径。1. 这篇文章真正要解决的问题1.1 三维点云分割为什么难先看一个具体场景。假设你在做一个园区巡检机器人识别目标包括“行人、草坪、栏杆、灭火器、垃圾箱”。前五类做了大量标注跑出来的效果不错。但这个月新增了一类“锥桶”——因为项目要在停车场试点需要把交通锥也感知出来。这时候问题来了重新标注一批锥桶点云需要几十甚至上百帧数据标注工具要逐点拉框、分类一帧数据少说也要几分钟标注完还要重新训练如果分割模型是端到端深度网络全量微调的成本也不低。少样本三维点云分割Few-shot 3D Point Cloud Segmentation想解决的问题就是让模型在只见过 1 到 5 个标注样本的情况下能够在新的三维场景里分割出这个新类别。1.2 传统少样本分割的困境传统少样本分割方法通常是在支持集support set中提取新类别的特征然后在查询集query set里做特征匹配。这种方法在类别外观变化不大的室内场景里效果尚可但一到真实场景就会暴露出一个核心问题支持集只有少数几个样本模型很难从这么稀疏的观测里概括出“这个类别到底是什么”。比如一个锥桶白天和晚上的反射特征不同一个灭火器在走廊里和在仓库里的空间上下文不同。仅靠 1-5 个样本模型容易过拟合到支持集的外观细节遇到分布偏移就崩。1.3 GFS-VL 给出的回答GFS-VL 认为与其让模型从少量样本中硬学新类别不如先把大规模预训练的 3D VLM 里已经学到的稠密视觉-语言知识利用起来。VLM 在预训练阶段见过海量的三维场景和对应的文本描述积累了非常丰富的跨模态知识。问题是这些知识是隐式的、分布式的没有显式地服务于分割任务。GFS-VL 的核心思路可以概括成三句话用 3D VLM 作为知识源提取稠密的跨模态特征设计稠密知识迁移机制把 VLM 的知识对齐到分割模型的逐点预测空间在少样本校准阶段让模型用少量新类别标注进行精准调整而不是从头学习。这个设计的直接好处是新类别不再需要大量标注模型本身已经“知道”锥桶大概是什么只需要少量样本做校准。这里一个重要判断是GFS-VL 并不是第一个把 VLM 用于点云任务的框架但它的关注点在“稠密知识”和“广义少样本”这是它区别于之前方案的关键。2. 基础概念与核心原理2.1 少样本分割和广义少样本分割少样本分割Few-shot Segmentation的定义是在训练阶段模型只见过基类base classes的大量标注数据在测试阶段给定新类别novel classes的少量标注样本支持集模型要能分割出该类别。广义少样本分割Generalized Few-shot Segmentation更进一步测试时模型不仅要分割新类别还要同时分割基类。两者的差异很关键对比维度少样本分割广义少样本分割测试类别只测新类别基类 新类别困难点新类别泛化新旧类别平衡、避免灾难性遗忘更接近真实场景否是实际项目里几乎没有“只关心新增类别”的需求。新增一个类别原来分割得好好的类别也不能掉链子。广义少样本的设置更接近真实工程状态。2.2 3D VLM 和稠密知识3D 视觉语言模型3D VLM是最近两年三维视觉领域的研究热点。它的核心是让模型同时理解三维几何结构和自然语言语义能够完成“给我找出来所有红色椅子”这类三维-语言对齐任务。“稠密知识”指的是什么如果你给模型输入“灭火器”这个词传统模型只在全局层面知道这个语义。但 3D VLM 在做三维-语言对齐时内部特征往往会对点云中每一个点或者每一个局部区域都产生响应哪些点更接近“灭火器”哪些点是背景这种逐点级别的语义关联就是稠密知识。可以类比成一个人看一张照片不仅知道“画面里有灭火器”还能指出“灭火器在这个位置轮廓大概在这里”。后者就是稠密理解。GFS-VL 的目标就是把 3D VLM 的稠密理解能力“蒸馏”到分割模型里让分割模型不只是知道类别名还知道每个点应该归属哪个类别。2.3 知识蒸馏在少样本场景的作用知识蒸馏Knowledge Distillation在少样本场景里作用显著原因在于教师模型VLM已经有大规模预训练的知识学生模型分割模型参数量可以更小更容易部署学生模型通过学习教师模型的预测分布而不是学习硬标签能捕获类别间的语义相似性。GFS-VL 中3D VLM 扮演教师角色分割模型扮演学生角色。蒸馏的重点不是某个全局特征而是逐点、逐区域的稠密对齐。3. 方法框架拆解3.1 GFS-VL 的整体架构从工程视角理解GFS-VL 可以拆成三个模块模块一稠密知识提取器使用预训练的 3D VLM 对点云输入进行处理得到逐点的语言-视觉对齐特征这些特征成为蒸馏的“软标签”。模块二稠密知识迁移与对齐设计从 VLM 特征到分割模型特征空间的对齐方式让分割模型在训练时不只看语义标签还看 VLM 输出的稠密特征核心是保证逐点特征的一致性。模块三少样本校准模块训练完成后在测试阶段提供新类别的少量标注样本通过支持集对模型进行校准解决新类别的分布偏移问题校准的目标是让模型在保持基类性能的同时精准分割新类别。3.2 训练阶段和测试阶段的区别GFS-VL 要分清两个阶段训练阶段基类训练 蒸馏在基类标注数据上训练分割模型同时用冻结的 3D VLM 提供稠密特征指导分割模型学习这个阶段不接触新类别的任何标注。测试阶段少样本校准 推理给定新类别的 1-5 个标注样本模型在校准阶段快速调整推理时分割包括基类和新类别在内的所有类别。这种“训练时蒸馏、测试时校准”的范式是整个框架设计的关键。测试时校准也不只是微调骨干网络还包括对支持集特征和查询集特征的对齐。3.3 广义少样本的核心挑战怎么处理广义少样本分割最大的挑战是模型在只见过 1-5 个新类别样本时会对新类别产生偏差把基类误分到新类别里。GFS-VL 的应对思路从方法名中的“精准校准”可以看出它不是让整个模型在新类别上重新训练而是设计了一个轻量的校准模块在少量样本上快速调整同时使用正则化手段防止基类性能下降。这跟很多工业界的做法一致不希望在新增类别时把已经稳定运行的旧能力破坏掉。4. 与其他方案对比GFS-VL 的变化发生在哪一层4.1 与 2D VLM 点云投影方案对比有一类方案是先用 2D VLM 处理多视角图像再把 2D 分割结果投影回三维点云。这种方案的问题在于点云视角和图像视角存在遮挡、标定误差小物体在图像上像素少分割结果投影回点云后噪声大稠密的三维几何信息没有被充分利用。GFS-VL 直接使用 3D VLM 在三维空间内提取稠密知识绕过了 2D-3D 投影带来的信息损失问题。4.2 与传统少样本分割方法对比传统少样本分割方法依赖支持集和查询集之间的特征匹配例如原型网络Prototype Network、掩码平均池化等方法。这类方法的局限在于支持集特征是从分割模型本身提取的而分割模型在基类训练后对新类别特征不敏感当新类别和基类外观差异较大时特征空间没有好的归纳偏置。GFS-VL 引入了 VLM 的稠密知识之后分割模型的特征空间本身就带有丰富的语义先验因此支持集特征的质量更高。4.3 与其他 3D VLM 蒸馏方法对比也有工作尝试用 3D VLM 做开放词汇点云分割即让模型能分割任意文本描述的类别。这种做法思路完整但工程落地时对算力要求高、推理成本大。GFS-VL 的做法是只把 VLM 当作知识源训练时用一次测试时不需要加载 VLM这样推理成本可控更适合实际部署。这里的工程意义在于教师模型的巨型参数量被限制在离线蒸馏阶段线上模型仍然是一个轻量分割网络。这在自动驾驶、机器人等对实时性敏感的场景非常重要。5. 复现与工程落地环境准备、数据组织与训练流程说明论文官方代码以最终发布为准以下给出的是结合少样本点云分割常用工程实践整理的复现思路重点演示整体流程和实现路径。5.1 环境准备复现三维点云分割实验环境配置建议如下实际版本以项目 README 为准# Python 环境 conda create -n gfsvl python3.9 -y conda activate gfsvl # PyTorch具体版本请以 CUDA 版本选择 pip install torch torchvision # 点云处理常用库 pip install open3d pip install pytorch3d pip install pointnet2_utils需要注意不同三维深度学习框架对 PyTorch 版本的要求差异很大建议创建独立虚拟环境避免把实验环境搞乱。5.2 数据集组织少样本分割实验通常使用 S3DIS、ScanNet 等公开数据集。以通用格式为例数据集目录一般这样组织dataset/ ├── scenes/ # 原始场景点云 │ ├── scene_01.ply │ ├── scene_02.ply │ └── ... ├── annotations/ # 逐点标签 │ ├── scene_01.npy │ ├── scene_02.npy │ └── ... └── class_list.txt # 类别列表基类 新类别少样本实验的关键步骤是把类别划分为基类和新类别。# 文件路径prepare_data.py # 功能将类别列表划分为基类和新类别 base_classes [ceiling, floor, wall, column, door, table, chair] novel_classes [bookcase, sofa, board] # 示例分割以论文为准 print(f基类数量: {len(base_classes)}) print(f新类别数量: {len(novel_classes)})需要注意论文的类别划分方式会直接影响实验结果复现时一定要先核对官方数据划分。5.3 训练流程伪代码GFS-VL 的训练流程可以概括为三个阶段这里给出精简版的 PyTorch 风格伪代码帮助理解方法逻辑# 文件路径train_gfsvl.py # 功能GFS-VL 训练主流程概念实现 # 阶段1加载预训练 3D VLM 和分割模型 vlm load_3d_vlm(pretrainedTrue) vlm.eval() # VLM 冻结只做知识源 segmentor load_segmentor(num_classeslen(base_classes)) optimizer torch.optim.Adam(segmentor.parameters(), lr1e-4) # 阶段2基类训练 稠密知识蒸馏 for batch in base_class_dataloader: points, labels batch # points: (B, N, 3), labels: (B, N) # 2.1 用 VLM 提取稠密特征 with torch.no_grad(): dense_feat vlm.get_dense_features(points) # (B, N, D_vlm) # 2.2 分割模型前向 seg_logits, seg_feat segmentor(points) # (B, N, C_base), (B, N, D_seg) # 2.3 语义分割损失 loss_seg cross_entropy(seg_logits, labels) # 2.4 稠密知识蒸馏损失 loss_kd dense_distill_loss(seg_feat, dense_feat) loss loss_seg alpha * loss_kd loss.backward() optimizer.step()关键逻辑解释VLM 必须冻结避免蒸馏过程中教师模型被带偏dense_distill_loss可以是特征空间上的 L2 距离也可以是更复杂的对比损失论文采用的损失形式于最终代码为准alpha是蒸馏损失的权重用于平衡分割损失和知识迁移损失一般需要调参。5.4 少样本校准阶段伪代码校准阶段是 GFS-VL 方法的核心亮点之一其目标是让模型在新类别上快速适配。# 文件路径adapt_fewshot.py # 功能给定支持集对新类别进行校准概念实现 support_points, support_masks load_support_set(novel_classes) # 支持集特征提取 support_feats [] for sp, sm in zip(support_points, support_masks): with torch.no_grad(): feat segmentor.get_features(sp) # (1, N, D) # 只保留属于新类别的点特征 novel_mask (sm ! ignore_index) novel_feat feat[novel_mask] support_feats.append(novel_feat.mean(dim0)) # 校准模块原型对齐 calibrator Calibrator(feat_dim) calibrator.fit(support_feats, novel_classes) # 推理 for query in query_dataloader: q_feat segmentor.get_features(query) # (1, N, D) # 基类 logits 来自分割头新类别 logits 来自校准器 logits segmentor.classify(q_feat) novel_logits calibrator.predict(q_feat) final_logits combine_logits(logits, novel_logits)关键逻辑解释校准不是从零训练而是在已有特征空间上对少样本的原型进行估计和微调为什么要做特征对齐而不是直接微调分类头因为支持集样本太少直接微调分类头很容易过拟合而基于原型的校准更稳定校准后需要特别注意基类和新类别的 logits 分布差异一般会有温度缩放或者偏置校正的步骤。5.5 蒸馏损失设计思路稠密知识蒸馏损失的设计是 GFS-VL 的关键部分以下给出的是常见实现思路# 文件路径losses.py # 功能稠密知识蒸馏损失概念实现 import torch import torch.nn.functional as F def dense_distill_loss(seg_feat, vlm_feat, temperature0.1): seg_feat: 分割模型特征 (B, N, D_seg) vlm_feat: 3D VLM 稠密特征 (B, N, D_vlm) # 将特征归一化到单位长度 seg_feat_norm F.normalize(seg_feat, dim-1) vlm_feat_norm F.normalize(vlm_feat, dim-1) # 投影到同一空间需要可学习的投影层 proj_feat project_to_vlm_space(seg_feat_norm) # L2 蒸馏让分割模型特征逼近 VLM 特征 l2_loss F.mse_loss(proj_feat, vlm_feat_norm) # 可选对比损失让不同类别的点在特征空间拉开距离 contrastive_loss supervised_contrastive_loss(proj_feat, labels) return l2_loss 0.5 * contrastive_loss蒸馏损失在这里的实际作用是让分割模型的特征空间具备 VLM 的语义结构。这意味着即使是基类里没有出现过的新类别其特征也不会完全落在分割模型未覆盖的区域从而让少样本校准更可靠。6. 实验分析与效果验证该关注哪些维度在没有拿到官方完整实验数据的情况下我们更值得关注的是GFS-VL 或类似框架在评估时应该看哪些指标、怎么判断效果好坏以及什么样的结论才算可信。6.1 评价指标广义少样本三维点云分割通常关注以下指标指标含义关注点mIoU基类基类类别的平均交并比模型会不会遗忘旧类别mIoU新类新类别的平均交并比少样本学习效果mIoU总体所有类别平均交并比整体性能不同 shot 数1-shot、2-shot、5-shot 的结果样本量对性能的影响一个重要的判断方式是只看新类别 mIoU 不够必须同时看基类 mIoU。如果新类别涨了 10 个点基类掉了 15 个点那这个方案离落地还有距离。6.2 消融实验该怎么做复现论文后可以做以下几组消融实验来理解框架去掉稠密知识蒸馏只用基类训练 少样本校准观察性能变化去掉少样本校准只用稠密知识蒸馏观察性能变化改变蒸馏损失权重观察对基类/新类别性能的影响改变支持集样本数1/2/5-shot观察性能增长曲线。通过这四组实验基本能看出框架中每个模块的真实贡献。6.3 如何判断方法是否有效结合少样本分割领域的常见做法一个方法真正有效通常要满足以下条件在多个数据集上有一致的性能提升而不是只在某个数据集上有效基类性能下降幅度可控从 1-shot 到 5-shot 时新类别性能稳步上升说明方法确实在利用更多样本可视化结果中新类别分割边界清晰没有大面积误判到背景或基类。没有满足这些条件的方案很可能只是在特定设置下过拟合了少量样本。7. 常见问题与排查思路复现和借鉴 GFS-VL 这类方法时实际会遇到不少工程问题。下面按问题现象整理了一张排查表。问题现象可能原因排查方式解决方案训练时蒸馏损失震荡剧烈蒸馏损失权重过大主任务损失被淹没查看 loss 曲线对比有/无蒸馏损失的训练曲线降低 alpha 值或在训练前几个 epoch 先只做分割训练少样本校准后基类性能大幅下降校准模块过拟合到新类别没有保留基类语义计算基类 mIoU 的变化在基类上做正则化或对校准器引入权重衰减支持集特征和查询集特征分布不一致支持集样本来自不同传感器或不同场景分布检查数据划分是否严格保证支持集和查询集来自不同场景重新划分数据确保少样本设置符合实际场景显存不足3D VLM 参数量大稠密特征占用显存过高观察训练时显存占用减小 batch size提取 VLM 特征时使用半精度推理离线缓存 VLM 特征点云下采样后特征丢失严重训练数据下采样方式不合理可视化预处理后的点云调整体素大小或 FPS 采样点数对齐论文设置新类别识别正确但边缘粗糙稠密知识迁移时逐点特征对齐不足可视化逐点特征热力图增加边缘点的蒸馏损失权重或引入局部特征聚合模块不同类型点云尺度差异大没有做归一化处理检查输入点云坐标范围对点云做以中心为中心的归一化或统一到固定坐标系其中离线缓存 VLM 特征是实际工程里很实用的技巧。3D VLM 在训练时只作为教师模型可以把所有训练场景的稠密特征提前提取并保存到磁盘训练时直接加载省去每轮迭代都跑大模型的时间。# 文件路径cache_vlm_features.py # 功能离线缓存 VLM 稠密特征 for scene_idx, points in enumerate(all_scenes): with torch.no_grad(): dense_feat vlm.get_dense_features(points) # (N, D_vlm) np.save(fcache/scene_{scene_idx:04d}.npy, dense_feat.cpu().numpy()) print(f已缓存 scene {scene_idx})这个做法的好处是训练阶段不再需要加载 VLM显卡显存压力大幅下降训练速度也会更快。8. 最佳实践与工程建议8.1 面向实际项目优先考虑广义少样本设置如果你的项目需要持续增加新的识别类别评估时不要只用新类别 mIoU要认真看基类 mIoU 的掉落情况。广义少样本分割的设置更贴近真实业务采用 GFS-VL 这类设计时也建议直接采用广义少样本的评估协议。8.2 蒸馏特征的选择和缓存策略从 3D VLM 提取稠密特征时选择哪一层特征作为蒸馏目标会影响最终效果。常见经验是早层特征偏几何适合迁移局部结构信息高层特征偏语义适合迁移类别判别信息实际中可以选择多层特征融合但对显存的要求会上升。推荐先用高层特征跑通全流程再尝试多层融合提高上限。8.3 少样本校准要控制微调范围校准阶段最怕的就是全量微调用 1-5 个样本微调整个骨干网络几乎必然过拟合。更稳的做法是只训练校准模块例如原型分类器或者只微调分割头最后两层加上较强的 L2 正则校准后做一次基类验证集回归测试确认基类性能没有明显下降。8.4 数据划分要体现真实场景少样本分割实验的数据划分方式直接影响结果可信度。如果在划分时不小心让支持集和查询集来自同一场景模型相当于提前看到了测试数据性能会虚高。建议检查场景级划分同一房间、同一片区域的数据归为一部分类别级划分新类别在训练阶段完全不出现包括不出现对应文本描述重复测试不同随机种子下多次划分报告均值±方差。8.5 工程部署要轻量化GFS-VL 框架中3D VLM 只用于离线蒸馏。线上推理只需要分割模型和校准模块。部署时建议将分割模型导出为 ONNX 或 TensorRT 格式校准模块运行在模型加载阶段推理时不参与计算固定类别列表的场景下可以把校准后的分类器权重固化到模型文件里避免每次启动都重新计算。这种设计让模型在保留 VLM 语义知识的同时依然保持轻量推理能力对自动驾驶或机器人等实时场景更加友好。8.6 日志和监控少样本实验变量多建议记录如下内容每次实验的类别划分基类/新类列表支持集样本文件路径和数量蒸馏损失权重和损失曲线基类 mIoU 和新类别 mIoU 的变化随机种子。有了这些记录后续分析“为什么这个实验效果好/差”会方便很多。9. 总结与后续学习方向GFS-VL 给少样本三维点云分割提供的解题思路可以概括为少样本学不出知识但可以借用知识。3D VLM 经过大规模预训练后已经在三维空间里积累了稠密的语义知识。把这个知识蒸馏到分割模型中模型就有了一个很好的特征空间底座。在这个底座上再做少样本校准新类别就不需要从零开始学习只需要调整少量参数来适配新语义。从工程视角看GFS-VL 最有价值的三个点3D VLM 只做离线教师推理时不需要部署大模型这让它的工程成本可控广义少样本设计更贴近真实需求新增类别不能以牺牲旧类别为代价稠密知识迁移 少样本校准的组合在思路上跳出了“纯靠少样本特征匹配”的局限。如果你准备实际尝试建议按这个顺序推进先在公开数据集如 ScanNet 或 S3DIS上复现论文的 1-shot / 5-shot 设置跑通后做一组消融实验去掉蒸馏、去掉校准分别看效果差异再迁移到自己的数据集上先验证新类别能否通过校准得到可观的分割效果最后评估推理时的显存、耗时和模型大小决定是否落地到业务线。后续值得深入的方向还有更高效的稠密知识蒸馏损失例如用对比学习替代简单 L2 距离在线校准策略让模型在部署后遇到少量新样本时能持续更新多模态融合的少样本分割例如结合点云和图像的互补信息。少样本三维感知还处在快速演进阶段GFS-VL 证明了“用大模型的稠密知识做少样本分割”是一条值得继续投入的路线。对于正在做点云项目、又苦于标注成本的人来说这个方向非常值得关注。建议收藏本文等论文代码开源后可以直接对照思路上手实验。
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表