
最近兩年三維點云分割的關注度明顯上漲尤其是自動駕駛、機器人操作、數字孿生這些場景對點云感知的需求已經從“能不能分割”變成了“新類別能不能快速適配”。但真正做項目的人都會遇到同一個問題**標注三維點云數據實在太貴了。**在一幀雷達點云上框一個物體、逐點標一個類別成本比標一張圖片高出一個量級。于是“少樣本三維點云分割”成了學術界和工業界都在關注的解題方向。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是最近兩年三維視覺領域的研究熱點。它的核心是讓模型同時理解三維幾何結構和自然語言語義能夠完成“給我找出來所有紅色椅子”這類三維-語言對齊任務?!俺砻苤R”指的是什么如果你給模型輸入“滅火器”這個詞傳統模型只在全局層面知道這個語義。但 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 證明了“用大模型的稠密知識做少樣本分割”是一條值得繼續投入的路線。對于正在做點云項目、又苦于標注成本的人來說這個方向非常值得關注。建議收藏本文等論文代碼開源后可以直接對照思路上手實驗。