3D 語義占用預測(3D Semantic Occupancy Prediction)旨在將真實世界環境劃分為規則的三維體素(voxel)網格,并對每個體素同時預測:
- 占用狀態(Occupancy):該體素是否被物體占據
- 語義類別(Semantic):若被占據,屬于哪一種對象類別(如行人、車輛、建筑等)
此任務不僅重建空間幾何,更補充了語義信息,使得每個體素都攜帶完整的環境感知信號
- 全場景高精度感知:相比傳統的鳥瞰圖(BEV)或 3D 邊界框檢測,語義占用預測可在體素級別恢復垂直結構和微小物體,實現更細粒度的場景重建
- 自主導航與規劃:機器人或自動駕駛系統可基于完整的占用-語義圖進行路徑規劃與避障決策,提高安全性與魯棒性
- 下游任務融合:融合占用預測結果,可增強 3D 目標檢測、路徑預測、地圖構建等任務的表現,形成統一感知框架
- 增強環境理解:比僅有 BEV(鳥瞰平面)或 3D 邊界框更細致,垂直結構也被明確建模
技術架構流程
- 傳感器輸入:常見源包括單目/多目相機、LiDAR 點云,或兩者的多模態融合。
- 特征提取:對圖像采用卷積網絡(CNN)或 Transformer,點云則利用稀疏卷積(SparseConv)等方法提取特征。
- 3D 表示構建:將 2D 特征“提升”(lifting)至 3D 體素空間,或直接在 3D 點云上構建體素化表示。
- 體素預測網絡:基于 3D CNN、Transformer 或注意力機制,對每個體素進行占用與語義標簽預測。
- 后處理與融合:可融合多幀、多傳感器結果,或應用體渲染技術進一步細化預測。
典型方法分類
-
LiDAR 驅動方法 :直接在點云體素上應用稀疏卷積網絡進行分類與分割,具有高精度但計算和存儲開銷較大。
-
Vision-Only 方法
- TPVFormer:提出三視圖(Tri?Perspective View, TPV)表示,將 BEV 平面擴展為三個正交平面,并使用 Transformer 進行特征聚合,實現僅用相機輸入即可預測稠密語義占用
- OccFormer:Dual?path Transformer 架構,將 3D 處理拆分為水平局部與全局兩條路徑,針對稀疏體素及類別不平衡問題提出專門的解碼策略
-
多模態融合方法
- GaussianFormer3D:以 3D 高斯分布替代稠密體素,利用可變形注意力在點云與圖像特征間進行跨模態融合,兼顧精度與內存效率
-
生成式與不確定性建模
- OccGen:基于擴散模型,通過逐步“去噪”生成更細致的 3D 占用圖;
- α?OCC:從不確定性量化角度出發,傳播深度與語義不確定性以增強魯棒性和可解釋性
數據集
- SemanticKITTI:基于 KITTI,提供 360° LiDAR 序列的體素級語義標注,支持時序信息利用
- nuScenes:涵蓋相機與 LiDAR 的多傳感器數據集,可用于驗證跨傳感器方法的泛化性能
- Occ3D Benchmark:專門針對 3D 占用預測任務構建的大規模評測基準,提供標準化評價協議
評價指標
- IoU (Intersection over Union):針對二元占用預測
- mIoU (mean IoU):針對多類別語義預測的平均 IoU
- Frame Rate (FPS):衡量模型在嵌入式或實時場景下的推理速度
挑戰與未來方向
- 稀疏標注與類不平衡:體素級標注成本高,常造成少數類欠擬合,需要半/弱監督或偽標簽策略。
- 計算與存儲成本:高分辨率體素網格帶來指數級開銷,需設計更高效的表示(如高斯、平面投影)與剪枝機制。
- 時間和歷史先驗利用:動態場景下融合短期與長期記憶可提升連續幀一致性,如 LMPOcc 等方法探索歷史路徑先驗 ([ResearchGate][1])。
- 不確定性量化:增強系統對“預測可信度”的評估,可用于安全決策與多傳感器動態加權。
- 生成式技術引入:擴散模型等新范式有望在細節重建與稠密預測上超越傳統網絡。
3D 語義占用預測通過體素化的占用+語義標簽,實現對環境的細粒度重建與理解。隨著 TPV、Gaussian、生成式模型與長期記憶先驗的出現,該領域正朝著更高精度、更低開銷和更強魯棒性的方向發展,并在自動駕駛、機器人導航等場景中展現出廣闊的應用前景。
《SDG-OCC: Semantic and Depth-Guided Bird’s-Eye View Transformation for 3D Multimodal Occupancy Prediction》
這張圖展示了 SDG-OCC 模型的整體架構,其核心目標是融合多視角的圖像(Multi-View Image)和激光雷達點云(LiDAR Sweeps)數據,來精確地預測三維空間的占據情況(Occupancy Prediction)。整個框架可以分為三個主要部分:LiDAR 分支、圖像分支以及多模態融合與預測頭。
1. LiDAR 分支 (LiDAR Branch)
LiDAR 分支位于圖的上方,負責處理和提取激光雷達點云的特征。
- 輸入 (Input):
LiDAR Sweeps
- 連續多個時刻(T-frame)的激光雷達掃描點云數據。 - 處理流程:
- Voxelization (體素化): 將稀疏、不規則的激光雷達點云轉換成規則的三維網格(體素)。這是一種標準操作,便于后續使用 3D 卷積網絡進行處理。
- 3D Encoder (3D 編碼器): 使用 3D 卷積神經網絡(如 Sparse Convolution)來處理體素化的點云,提取出豐富的幾何和空間特征。輸出的是一個三維的特征體(3D feature volume)。
- Flatten (扁平化): 將 3D 特征體沿著垂直方向(z-axis)進行壓縮或展平,生成一個鳥瞰圖(Bird’s-Eye View, BEV)視角的特征圖。這個 BEV 特征圖
LiDAR Feature
包含了場景的高度和空間布局信息。 - FOAD (Fusion+Distillation): 這是一個關鍵模塊,全稱可能是 Feature-Oriented Alignment and Distillation。這個模塊一方面用于后續的特征融合,另一方面,在訓練過程中,它利用強大的 LiDAR 特征作為“教師”信號,通過知識蒸餾(Distillation)的方式來指導圖像分支的學習。圖中虛線箭頭表示其在訓練時的指導作用。
2. 圖像分支 (Image Branch)
圖像分支位于圖的左下方,是該框架的核心創新所在,負責從 2D 圖像中提取特征并轉換到 3D BEV 空間。
- 輸入 (Input):
Multi-View Image
- 來自車輛周圍多個攝像頭的 T-frame 圖像。 - 處理流程:
- 2D Encoder (2D 編碼器): 使用一個標準的 2D 卷積網絡(如 ResNet)作為主干網絡(backbone),對每一張輸入的多視角圖像進行編碼,提取出各自的 2D 特征圖。
- Multi-Task Head (多任務頭): 這是該論文的一個關鍵設計。從 2D 編碼器輸出的特征被送入一個多任務頭,該任務頭同時執行兩個子任務:
- Semantic Mask (語義分割): 預測圖像中每個像素的語義類別(如車輛、道路、行人等)。這為后續的特征轉換提供了豐富的語義先驗信息。
- Depth Distribution (深度分布): 預測每個像素的深度值。不同于直接預測一個單一的深度值,這里預測的是一個深度值的概率分布,這能更好地處理深度估計中的不確定性。
- SDG View Transformation (語義和深度引導的視圖轉換): 這是整個框架的核心創新模塊。它的目標是將 2D 圖像特征高效且準確地"提升"(lift)到 3D BEV 空間。該過程包含以下幾個關鍵步驟:
- Co-point Depth & Context Feature: 結合多任務頭輸出的語義信息和深度分布信息,生成更可靠的特征。
- SDG-BEV Pooling: 這是實現視圖轉換的關鍵操作。它利用預測出的深度分布 (Depth Distribution) 和語義信息 (Semantic Mask) 作為引導,將 2D 圖像上的特征點(pixels)“投射”(pool)到 3D 空間中的對應位置,最終形成一個 BEV 視角的特征圖
Camera Feature
。語義信息在這里起到了關鍵的指導作用,例如,模型可以根據語義判斷某個像素(比如屬于“天空”)是否應該被投影到 3D 空間中,從而避免了無效或錯誤的投影。
3. 多模態融合與預測 (Fusion and Prediction)
2.5D地圖(BEV,鳥瞰圖)的含義
BEV(Bird’s Eye View,鳥瞰圖)是什么?
BEV 是一種從垂直上方俯視的視角生成的地圖或圖像,類似于鳥類觀察地面的視角。它通常包含地面上物體的平面位置信息(X、Y坐標),并可能疊加其他維度的數據(如高度、深度、語義信息等)。BEV 在自動駕駛、無人機導航、機器人定位等領域廣泛應用,因為它能直觀展示周圍環境的全局空間關系。
為什么稱為“2.5D”?
“2.5D”(二維半)的命名源于其介于2D平面與3D空間之間的特性,具體體現在以下方面:
(1)基礎是二維平面
- BEV 本質上是一個二維投影平面(X-Y 平面),類似于傳統地圖的俯視圖,僅描述物體在水平方向上的位置和分布。
(2)疊加部分三維信息
- 高度/深度信息:通過傳感器(如激光雷達、攝像頭)或算法估計,BEV 中每個點可能包含高度(Z軸)或距離地面的垂直高度差(例如,車輛、行人的高度)。
- 語義與屬性:標注物體類別(如車道線、障礙物)、運動方向、速度等動態信息。
- 局部三維結構:對關鍵物體(如車輛、行人)使用邊界框(Bounding Box)表示其三維尺寸(長、寬、高),但整體環境仍以二維布局為主。
(3)非完整的三維建模
- 與全3D點云或三維網格不同,2.5D 地圖僅保留部分與垂直視角相關的三維特征,避免了全3D建模的高計算成本和復雜性。
2.5D BEV 的應用場景與優勢
(1)自動駕駛中的核心作用
- 環境感知:通過多傳感器融合(攝像頭、雷達、激光雷達),BEV 提供車輛周圍360°的環境模型,便于目標檢測、路徑規劃。
- 決策與控制:BEV 的俯視視角直接對應車輛運動平面(如車道線、障礙物位置),簡化了路徑規劃算法。
(2)計算效率與實用性
- 降低復雜度:相比全3D建模,2.5D 僅需處理二維平面+部分屬性,計算資源消耗更低,適合實時系統。
- 數據融合友好:多視角攝像頭或傳感器數據可高效投影到統一BEV平面,減少視角畸變問題。
(3)游戲與虛擬仿真
- 在游戲中,2.5D BEV 可實現偽3D視覺效果(如斜視角地圖),兼顧性能與沉浸感。
2.5D 與 3D 的核心區別
維度 | 2.5D BEV | 全3D |
---|---|---|
數據結構 | 2D平面 + 局部高度/屬性 | 完整的3D空間(X、Y、Z全維度) |
應用場景 | 自動駕駛、機器人導航、游戲俯視圖 | 三維建模、VR/AR、高精度仿真 |
計算成本 | 低(適合實時處理) | 高(需強大算力支持) |
- 2.5D BEV 的本質:通過二維平面承載部分三維信息,平衡了信息豐富度與計算效率。
- 命名邏輯:“2”代表基礎的二維俯視平面,“0.5”表示疊加的有限三維屬性,“D”(維度)體現其超越純2D的能力。
- 核心價值:在自動駕駛等場景中,2.5D BEV 成為連接感知、決策與控制的“中間表示層”,是復雜環境感知的高效解決方案。
這部分位于圖的右側,負責融合來自兩個分支的 BEV 特征,并最終生成占據柵格地圖。
- 處理流程:
- 特征融合:
LiDAR Feature
和Camera Feature
都是 BEV 視角的特征圖,因此可以很方便地進行融合。- 融合過程受到來自 LiDAR 分支的
FOAD
模塊的引導。具體來說,FOAD
模塊會識別出 LiDAR 認為重要的區域,然后指導模型更有選擇性地將圖像特征融合進來,增強這些區域的特征表達。圖中從FOAD
指向Camera Feature
的箭頭就代表了這個引導過程。
- BEV Encoder (BEV 編碼器): 將融合后的多模態 BEV 特征送入一個 BEV 編碼器(通常是 2D 卷積網絡),進一步處理和提煉這些特征,捕捉更復雜的空間關系。
- Occupancy Head (占據頭): 這是網絡的最后一個部分。它接收 BEV 編碼器輸出的增強特征,并將其上采樣(upsample)或解碼回一個三維的體素空間,最終預測出每個體素被占據的概率。
- Occupancy Prediction (占據預測結果): 最終輸出一個三維的占據柵格地圖(Occupancy Map)。圖中用一個立體的網格表示,不同的顏色代表不同的占據狀態或語義類別。
- Loss (損失函數): 在訓練過程中,將模型的預測結果
Occupancy Prediction
與真實的標簽(Ground Truth)進行比較,計算損失函數,并通過反向傳播來優化整個模型的參數。
- 特征融合:
SDG-OCC 框架通過一個精心設計的雙分支結構來解決 3D 占據預測問題。
- LiDAR 分支提供精確但稀疏的 3D 幾何信息。
- 圖像分支是創新的核心,它不依賴于精確的外部相機參數進行 LSS (Lift-Splat-Shoot) 形式的轉換,而是通過一個多任務頭(預測語義和深度分布)來內部學習如何將 2D 圖像特征轉換到 3D BEV 空間。這種語義和深度引導 (SDG) 的方式使得視圖轉換更準確、更魯棒,能夠有效過濾掉無關信息(如天空),并更好地處理深度估計的不確定性。
- 最后,通過一個由 LiDAR 特征引導的智能融合機制 (FOAD),將兩種模態的優勢結合起來,并通過后續的 BEV 編碼器和占據頭生成高精度的三維占據地圖。
SDG-OCC 的設計巧妙地利用了語義和深度信息來克服多模態 3D 感知中的核心挑戰——即如何有效、準確地進行跨模態和跨視圖的特征轉換與融合
SDG 視圖轉換(SDG view transformation)核心在于解答一個問題:如何聰明地、高效地將 2D 圖像信息“搬”到 3D 鳥瞰圖(BEV)空間中去?
我們先理解傳統方法(如 LSS)的痛點,再來看 SDG 是如何巧妙解決的
傳統方法 (LSS) 的困境
你想把一張 2D 照片“立”起來,變成 3D 場景。LSS (Lift-Splat-Shoot) 的方法很直接:
- Lift (提升): 對圖像中的每個像素點,暴力地在攝像頭前方的一條射線上,猜測一系列可能的深度值(比如從 1 米到 80 米,每隔 1 米猜一次)。這樣,一個像素點就變成了空間中的一長串“候選點”(虛擬點)。
- Splat (濺射): 把這些海量的候選點連同它們的圖像特征,像潑墨一樣“濺射”到一個統一的 3D BEV 網格里。
- Shoot (拍攝): 用一個網絡來處理這個包含了巨量冗余信息的 BEV 網格,最終生成結果。
我們有一輛自動駕駛汽車,它通過車上的一個前置攝像頭拍攝到了一張照片。我們的目標是利用這張 2D 照片,生成一個上帝視角的 2.5D 地圖(BEV,鳥瞰圖),并在這個地圖上標出前方障礙物的位置。LSS 就是實現這個目標的一種非常經典的方法。
第一步:Lift (提升) - 將 2D 像素“提升”為 3D 射線上的“候選點云”
目標: 為圖像中的每個像素點,在 3D 空間中創造出一系列可能的“候選點”,并為每個候選點賦予來自圖像的特征。
具體操作:
-
輸入:
- 一張 2D 圖像 (例如,分辨率為
224 x 400
像素)。 - 這張圖像對應的相機內外參數 (Intrinsics and Extrinsics)。內參告訴我們相機的焦距、成像中心等信息;外參告訴我們相機在車身坐標系中的精確位置和朝向。這些是進行 3D 幾何轉換所必需的。
- 一張 2D 圖像 (例如,分辨率為
-
主干網絡提特征: 首先,將這張 2D 圖像輸入到一個卷積神經網絡 (CNN,例如 ResNet 或 EfficientNet) 中。這個網絡會提取圖像的深層特征。輸出的結果是一個特征圖 (Feature Map),它的分辨率可能比原圖小 (例如,
14 x 25
),但通道數更多 (例如,256
個通道)。現在,特征圖上的每一個“像素”都包含了一個豐富的上下文特征向量 (Context Vector)。這個向量“理解”了原始圖像對應區域的內容(比如,“這里看起來像一輛車的車尾”)。 -
生成深度分布 (關鍵步驟): 這是 LSS 的核心思想。對于特征圖上的每一個像素,模型不會只預測一個單一的深度值,而是預測一個概率分布。
- 預設深度“桶”: 我們會預先設定一系列離散的深度值,可以稱之為“深度桶 (Depth Bins)”。例如,我們規定深度范圍是
[4.0米, 45.0米]
,總共分為82
個桶,每個桶的間隔是0.5
米。所以我們的深度桶就是4.0, 4.5, 5.0, ..., 45.0
。 - 預測概率: 對于特征圖上的某個像素,網絡會輸出
82
個概率值,每個概率值對應一個深度桶。這些概率值加起來等于 1。這就像在進行一個 82 分類的任務,判斷這個像素的真實深度最有可能落在哪個桶里。
- 預設深度“桶”: 我們會預先設定一系列離散的深度值,可以稱之為“深度桶 (Depth Bins)”。例如,我們規定深度范圍是
-
創建帶特征的 3D 候選點: 現在,我們將上述信息組合起來。
- 對于特征圖上的一個像素
(u, v)
:- 我們知道它的上下文特征向量
C
(一個256
維的向量)。 - 我們知道它在
82
個深度桶d_i
上的概率p_i
。 - 利用相機內外參數,我們可以從像素
(u, v)
和每個深度桶d_i
計算出其在車身坐標系下的 3D 坐標(x, y, z)_i
。
- 我們知道它的上下文特征向量
- “提升”操作: 我們將特征向量
C
與其對應的深度概率p_i
相乘 (C' = p_i * C
),然后將這個加權后的特征C'
與其 3D 坐標(x, y, z)_i
關聯起來。 - 我們對所有
82
個深度桶都執行這個操作。這樣,圖像上的一個像素,就被“提升”成了一條位于 3D 空間中的、由 82 個帶特征的“候選點”組成的射線。
- 對于特征圖上的一個像素
假設圖像左前方有一個像素點,網絡判斷它很可能是一輛車的尾部,真實距離是 10 米。那么在 LSS 的 Lift 步驟后,這個像素點會生成一條由 82 個候選點組成的 3D 射線。其中,深度在 10.0
米附近的那個候選點,其被賦予的特征向量權重會非常高(因為深度概率 p
在這里最大),而距離很遠或很近的點的特征權重則會非常低。
Lift 步驟:從相機出發,每個像素都生成了一條射線,射線上布滿了離散的深度點
第二步:Splat (濺射 / 拍扁) - 將 3D 點云“拍扁”到 BEV 網格中
目標: 將來自所有攝像頭、所有像素的海量 3D 候選點,高效地組織到一個統一的、鳥瞰圖視角的 2D 網格中。
具體操作:
-
定義 BEV 網格: 首先,我們在車輛的
x-y
平面上定義一個網格。例如,一個200 x 200
的網格,每個格子代表真實世界中0.5m x 0.5m
的區域。這個網格的每個單元格都初始化為一個零向量(維度與特征向量C'
相同,即256
維)。 -
“濺射” / 累加: 現在,我們遍歷在 Lift 步驟中生成的所有 3D 候選點(來自所有像素、所有深度桶)。
- 對于每一個 3D 候選點,我們查看它的
(x, y)
坐標,確定它落在了 BEV 網格的哪個單元格里。 - 然后,我們將這個候選點的加權特征向量
C'
,累加到對應 BEV 單元格的向量上。
- 對于每一個 3D 候選點,我們查看它的
這個過程就像是制作一張“數字沙畫”:
- 你的手(相機)里握著不同顏色的沙子(特征)。
- Lift 步驟告訴你每種顏色的沙子(特征)應該撒向哪個 3D 位置,以及應該撒多少(深度概率)。
- Splat 步驟就是你把這些沙子按照指示撒到下方的一張畫布(BEV 網格)上。同一個位置可能會被撒上好幾次沙子(來自不同像素點、不同攝像頭的貢獻),它們的顏色會混合在一起(特征向量累加)。
關鍵點: 由于 Lift 步驟中,只有那些深度概率高的候選點才擁有權重顯著的特征向量,所以只有它們才能對最終的 BEV 網格產生有意義的貢獻。那些“猜錯”了深度的點,因為其特征向量權重幾乎為零,所以在累加時幾乎沒有影響。這就巧妙地過濾掉了大量無用信息。
例子小結: 之前那個 10 米遠的車輛像素,它生成的 82 個候選點中,只有深度在 10 米附近的那個點(假設其 (x, y)
坐標落入 BEV 網格的第 (i, j)
個單元格),會把一個很強的特征向量累加到 BEV_Grid[i, j]
中。而其他 81 個深度猜錯的點,貢獻幾乎為零。
Splat 步驟:將不同相機(圖中為前后兩個相機)生成的 3D 點云(Frustum Points)全部“拍扁”到一個統一的 BEV 網格上
第三步:Shoot (拍攝 / 處理) - 在 BEV 圖上進行感知任務
目標: 對已經包含了豐富特征的 BEV 網格圖進行分析,完成最終任務(如物體檢測)。
具體操作:
- 輸入: 第二步生成的
200 x 200 x 256
的 BEV 特征圖。 - BEV 編碼器: 這個 BEV 特征圖本質上就是一張多通道的“偽圖像”。我們可以直接把它喂給一個標準的 2D 卷積神經網絡(也叫 BEV Encoder)。
- 任務頭 (Task Head): 在這個 2D CNN 的最后,接上不同的任務頭。
- 如果是物體檢測任務: 接一個檢測頭 (如 CenterPoint 或 YOLO 的檢測頭),它會在這張 BEV 圖上輸出物體的 2D 邊界框、朝向和類別。
- 如果是語義分割任務: 接一個分割頭 (如 U-Net),它會為 BEV 圖上的每個像素點分配一個語義標簽(如道路、人行道、障礙物區域等)。
例子小結: 經過 Splat 后,我們得到了一張 BEV 特征圖。在車輛前方 10 米左右對應的 (i, j)
格子附近,會有一個由強特征向量構成的“亮斑”。第三步的 2D CNN 看到這個“亮斑”后,就會識別出:“根據這個特征,這里應該是一輛車”,然后輸出一個包圍該區域的邊界框。
- Lift: (2D 圖像特征 + 深度分布) → 3D 候選點云 (帶特征)。這是從 2D 到 3D 的過程,核心是學習性的深度分布。
- Splat: 3D 候選點云 → 2.5D BEV 特征圖。這是一個“拍扁”和信息聚合的過程,將不同視角的信息統一到 BEV 視圖。
- Shoot: 2.5D BEV 特征圖 → 最終任務結果。這是一個標準的 2D 感知過程,在 BEV 空間完成檢測或分割。
LSS 的革命性在于,它將過去需要多步、依賴復雜幾何計算的流程,變成了一個端到端可訓練的神經網絡。整個過程(尤其是深度分布的預測)都是通過梯度下降來學習的,使得模型可以自己學會如何最好地將 2D 圖像信息轉換到 3D 空間,而不需要過多的人工規則
痛點很明顯:
- 計算量巨大: 為每個像素猜測幾十上百個深度點,會產生天文數字般的虛擬點,計算開銷非常大。
- 深度不準: 憑空猜測的深度大部分是錯的,導致大量的計算資源被浪費在處理無效的“鬼影”特征上,影響最終精度。BEV 特征也因此變得很稀疏,因為大部分空間位置其實沒有有效的特征落入。
SDG 視圖轉換的智慧解決方案
SDG (Semantic and Depth-Guided) 的思路是:“我不需要暴力猜測,我可以用線索來做出更聰明的判斷。” 它利用了兩個核心線索:LiDAR 提供的稀疏但精確的深度 和 圖像本身提供的豐富語義信息。
下面我們結合圖中的流程,一步步看它是如何實現的。
圖例解析
P
(Projection): 投影,指將 LiDAR 點云投影到圖像上。G
(Gated-attention): 門控注意力機制,一種信息篩選和融合的方式。F
(Diffusion): 擴散,指將稀疏的深度信息進行擴展。L
(Bi-Linear Discretization): 雙線性離散化,一種生成虛擬點的技術。?
(Outer Product): 外積,一種特征融合的方式。
詳細步驟解析
第一步:準備“線索”——初始深度圖和圖像特征
- 左上輸入 (
LiDAR Sweeps
): 首先,獲取稀疏但準確的 LiDAR 點云。通過P
(投影) 操作,將這些 3D 點投影到 2D 圖像平面上,形成一個稀疏的深度圖 (Depth Map)。這個深度圖上只有被 LiDAR 點打到的地方才有準確的深度值,其他地方都是空的。 - 左側輸入 (
1/4 Scale Image Feature
): 同時,一個標準的 2D 圖像經過主干網絡(如 ResNet)提取特征,得到一個1/4
分辨率的特征圖。這個特征圖被送入Depthnet
進行初步處理。
第二步:語義與深度特征的智能交互
這是 SDG 的一個精妙設計。它認為“語義”和“深度”是相輔相成的。比如,識別出這是“天空”,那它的深度就是無窮遠;識別出這是“車輛”,那它的深度就應該在一個合理的范圍內。
Depthnet
&Head
分離:Depthnet
的輸出被送入兩個并行的頭:Semantic Head
(語義頭) 和Depth Head
(深度頭)。Gated-attention
(門控注意力):- 語義頭先生成初步的語義特征,這些特征會通過一個門控機制去指導深度頭。這好比告訴深度頭:“注意,這塊區域是車輛,你應該更關注車輛可能的深度范圍。”
- 反過來,深度頭生成的初步深度特征也會通過門控機制去反哺語義頭。這好比告訴語義頭:“我在這里檢測到了一個很近的深度突變,這很可能是一個物體的邊緣,請你更仔細地判斷它的語義類別。”
- 通過這種雙向的“商議” (
Gated-attention
),Semantic Head
和Depth Head
能夠生成彼此增強、更加準確的語義和深度預測。
第三步:創造精確且高效的“虛擬點”
這是解決 LSS 痛點的核心步驟。我們不再盲目猜測深度,而是基于線索生成少量但高質量的虛擬點。
Semantic Mask
(語義掩碼): 語義頭最終輸出一張語義分割圖,準確地告訴我們圖像中每個像素是什么(車、人、路、天空等)。Diffusion
(擴散F
): 將第一步得到的稀疏 LiDAR 深度圖,與Semantic Mask
結合。在相同語義的區域內,將稀疏的深度值進行“擴散”或插值。例如,在一個被識別為“車輛側面”的區域,即使 LiDAR 只打到了幾個點,我們也可以合理地推斷整個側面的深度是相似的,從而填充這片區域的深度。這就得到了一個半稠密的深度圖。Bi-Linear Discretization
(雙線性離散化L
): 這是生成虛擬點的關鍵一步。它不再像 LSS 那樣在整條射線(幾十上百個點)上生成虛擬點。而是根據上一步得到的 半稠密深度圖 ,在每個像素對應的 精確深度值附近 ,通過雙線性插值的方式,只生成 極少數(例如 2-4 個) 高質量的虛擬點。因為我們的深度估計已經相當準了,所以只需要在真實深度附近小范圍采樣即可。同時,語義掩碼會告訴我們哪些區域(如天空)根本不需要生成虛擬點。- 結果: 我們得到了一批數量可控、位置精準的“虛擬點云”。
第四步:特征融合與 BEV 特征生成
現在我們有了精確的虛擬點,需要給它們賦予對應的圖像特征,然后匯集到 BEV 空間。
Context Feature
&Depth Head
Feature:Depthnet
中提取的上下文特征(Context Feature
)和Depth Head
輸出的深度相關特征,共同構成了每個虛擬點要攜帶的豐富信息。?
(Outer Product): 通過外積操作,將虛擬點的位置信息和其對應的圖像特征(Context Feature
+Depth Head
Feature)進行高效融合。BEV Pooling
: 最后,將所有攜帶了豐富特征的、精確的虛擬點,匯集(Pool)到一個統一的 BEV 網格中。由于我們的虛擬點數量少且位置準,這個過程就像是精準地“點描”,而不是 LSS 的“潑墨”。最終生成高質量、信息密集的圖像 BEV 特征 (image BEV features
)。
SDG 如何解決 BEV 稀疏問題
- 告別盲猜: SDG 不再盲目猜測深度,而是利用 LiDAR 提供的“絕對真理”(稀疏深度)作為錨點。
- 語義引導: 它利用圖像的語義信息(哪里是車、哪里是路)來指導深度的“擴散”和虛擬點的生成,避免了在天空、遠景等無關區域浪費計算。
- 智能交互: 通過門控注意力機制,讓語義和深度的預測互相幫助,提升彼此的精度。
- 精準打擊: 最終只在最可能存在物體的位置生成少量、高質量的虛擬點,大大減少了計算量。
- 密集 BEV 特征: 因為虛擬點的位置和特征都更可靠,最終匯集成的 BEV 特征圖自然就更密集、更有效,為下游的 3D 檢測或分割任務提供了更高質量的輸入,從而提升了最終的精度和速度。
LSS 是“廣撒網,撈不上魚”,而 SDG 則是“用聲吶(LiDAR+語義)定位魚群,再精準下網”,效率和效果自然不可同日而語
這張圖展示的是 SDG-OCC 中最核心的兩個“殺手锏”:如何優雅地融合特征以及如何聰明地進行知識蒸餾。
我們先抓住核心矛盾:
- 圖像特征(Image Features)色彩紋理豐富,但不知道物體的精確遠近和形狀。
- LiDAR 特征(LiDAR Features)有精確的 3D 幾何結構,但稀疏且沒有顏色。
- 直接相加/拼接(Naive Fusion) 會出問題,因為由于微小的標定誤差或物體運動,兩種特征在 BEV 空間上可能無法完美對齊,就像兩張沒對齊的透明膠片,疊起來圖像會模糊。
SDG-OCC 的融合與蒸餾模塊就是為了解決這個“對不齊”和“讓圖像分支變聰明”的問題。
Part 1: 動態鄰域特征融合 (解決“對不齊”的問題)
這部分對應圖 (c)
的上半部分流程,最終目的是生成高質量的融合特征 F_bev^fuse
。它本質上是一個升級版的、更智能的“復制-粘貼”。
讓我們跟著圖 (c)
的上半部分走一遍:
-
輸入 (Inputs):
Source Feature
(源特征): 來自圖像分支的 BEV 特征圖。我們把它想象成一張內容豐富但缺少 3D 信息的“底圖”。Cross Feature
(交叉特征): 來自 LiDAR 分支的 BEV 特征圖。我們把它想象成一張有精確輪廓但內容單一的“輪廓圖”。
-
定義“查找范圍” (Query, Key, Value):
- Query (查詢): 從
Source Feature
(圖像底圖) 中取出一個像素點的特征。這個Query
就好像在問:“我這個像素點,對應到 LiDAR 輪廓圖上,應該是什么樣子?” - Key (鍵) & Value (值):
Cross Feature
(LiDAR 輪廓圖) 同時充當Key
和Value
。Key
用于和Query
進行匹配,Value
則是匹配成功后要被“復制”過來的內容。這里,作者做了一個巧妙的設計,不是點對點匹配,而是讓Query
與Cross Feature
中的一個鄰域小方塊 (patch) 進行匹配。這就解決了輕微的錯位問題,因為即使中心點沒對準,在周圍的小范圍內總能找到正確的對應關系。
- Query (查詢): 從
-
計算相似度并加權 (Weight Calculation):
- 將
Query
(圖像特征) 與Cross Feature
鄰域小方塊中的所有Key
(LiDAR 特征) 進行比較,計算相似度。 - 同時,加入一個
Positional Bias
(位置偏置)。這是一個很關鍵的修正項,它根據相對位置信息進行補償,相當于告訴模型:“即使特征本身不太像,但如果它就在你應該在的位置,也請多給點關注”。 - 將計算出的相似度和位置偏置相加,得到一個權重圖 (Weight)。這張權重圖表明,LiDAR 鄰域小方塊中的哪些像素點與當前圖像像素點最相關。
- 將
-
門控注意力機制 (Gated-attention, representada por
G
):- 這是一個“審核”環節。上一步得到的
Weight
會經過一個 Sigmoid 函數(σ
),生成一個 0 到 1 之間的“門控信號”。 - 這個信號就像一個閥門,它會去動態地調整(element-wise multiply)從
Cross Feature
中提取出的Value
。如果門控信號接近 1,說明 LiDAR 的信息非常可信、非常重要,就讓它順利通過;如果接近 0,說明 LiDAR 的信息可能沒用甚至是干擾,就把它抑制掉。
- 這是一個“審核”環節。上一步得到的
-
生成融合特征 (Fusion Feature):
- 經過“審核”后的
Value
,再與原始的Source Feature
(圖像特征) 進行相加(element-wise add)。 - 最終得到融合后的特征
F_bev^fuse
。這個特征既保留了圖像豐富的紋理信息,又通過智能查找和動態審核,精確地融入了 LiDAR 的幾何結構信息,而且還克服了錯位問題。
- 經過“審核”后的
小結 (Part 1): 這個過程不是簡單地把 LiDAR 特征 +
到圖像特征上,而是圖像特征作為“向導” (Query
),主動地去 LiDAR 特征的鄰域中“搜尋” (Key
) 并“復制” (Value
) 最相關、最可信的幾何信息,最后再補充到自己身上。
Part 2: 占用驅動的主動蒸餾 (讓圖像分支變聰明)
這部分對應圖 (c)
的下半部分流程。它的核心思想是:融合特征 F_bev^fuse
雖然效果好,但它依賴 LiDAR,計算成本高。我們能不能在訓練時用它來“教會”純圖像分支,讓圖像分支在推理時(沒有 LiDAR 的情況下或為了追求極致速度)也能達到接近融合的效果?這就是知識蒸餾。
-
什么是“占用驅動 (Occupancy-driven)”?
- BEV 空間中,大部分區域是空地(非占用),只有少數區域有車、人等物體(占用)。在空地上,LiDAR 和圖像的信息差別不大,沒必要花大力氣去學習。
- “占用驅動” 指的是,我們只在那些被物體占據的“活躍”區域,才進行知識的重點轉移。這就像老師輔導學生,不會把整本書都劃重點,只會把最重要的章節和最難的考點(被占用的區域)圈出來,讓學生重點學習。
-
什么是“主動蒸餾 (Active Distillation)”?
- 這里的“主動”體現在方向性上。知識是單向地從“老師”(
F_bev^fuse
,融合特征)流向“學生”(F_bev^img
,純圖像特征)。 - 如圖
(c)
所示,從F_bev^fuse
出發,經過一個名為Occupancy-driven active distillation
的模塊,去指導F_bev^img
的更新。
- 這里的“主動”體現在方向性上。知識是單向地從“老師”(
-
如何實現 (結合圖 (b) 理解)?
- 圖
(b)
展示了SDG-KL
,這里的 KL 指的是 KL 散度 (Kullback-Leibler divergence),這是一種衡量兩個概率分布差異的數學工具,在知識蒸餾中常被用作損失函數。 - 在訓練時,模型會計算“老師”輸出的特征分布 (
Fusion Feature
) 和“學生”輸出的特征分布 (Image Feature
) 之間的 KL 散度。 - “占用驅動” 在這里體現為:這個 KL 散度損失只在被占用的“活躍”區域進行計算和反向傳播。在非占用區域,這個損失的權重會很低甚至是零。
- 通過最小化這個“有重點的”KL 散度損失,模型被強迫去優化純圖像分支的網絡參數,使其生成的
F_bev^img
在關鍵區域無限接近于融合后的F_bev^fuse
。
- 圖
小結 (Part 2): 這是一個“教學”過程。“老師”(融合模塊)把自己最精華的知識(在占用區域的、融合了 LiDAR 信息的特征),通過“劃重點”(占用驅動)的方式,“傳授”(主動蒸餾)給“學生”(圖像分支)。經過反復訓練,學生最終學到了老師的精髓,即便以后老師不在(推理時不使用 LiDAR),學生也能獨立解決難題。 這極大地提升了模型的魯棒性和實時性。
整體邏輯總結
- SDG-Fusion (圖 a): 首先,通過圖
(c)
上半部分的動態鄰域融合機制,將圖像和 LiDAR 特征智能地融合成一個高質量的F_bev^fuse
。 - SDG-KL (圖 b): 然后,在訓練階段,利用圖
(c)
下半部分的占用驅動主動蒸餾機制,將F_bev^fuse
的知識單向地、有重點地蒸餾給純圖像特征F_bev^img
。 - 最終結果: 我們得到了一個雙重優勢:
- 在部署時,如果計算資源充足且需要最高精度,我們可以使用完整的融合模型(SDG-Fusion)。
- 如果需要極致的實時性或在 LiDAR 失效的情況下,我們可以只使用被“教會”了的、性能強大的純圖像分支,因為它已經通過蒸餾學到了 LiDAR 的幾何先驗知識。
看懂MoCa:如何將“單向生成”的AI模型,調教成“雙向理解”的檢索大師
現在的AI模型,給它一張圖,它能寫出一段描述;你給它一段話,它能生成一幅畫作。這些模型是出色的**“生成者”或“描述者”**。
但這里有個問題:當你讓它們去做一些需要深度 “理解” 的任務時,比如“請在我的相冊里,找出那張‘傍晚在海邊,一只金毛犬追逐紅色飛盤’的照片”,它們往往表現不佳。
為什么會這樣?MoCa框架正是為了解決這個核心矛盾而生。
核心問題:為什么AI“看得懂”卻“找不準”
目前的視覺-語言模型(VLM)存在三大“先天缺陷”,導致它們在圖文檢索這類理解任務上力不從心。
-
缺陷一:思維是“單行道”(單向注意力)
- 問題:這些模型處理信息的方式就像我們閱讀一本書,從左到右,一路讀下去,無法方便地回頭看上下文。這種“因果注意力”機制,讓它在生成文本時很流暢,但在需要反復比對圖像和文本細節時,就顯得笨拙。
- 比喻:它就像一個只能順著路標開車的司機,無法隨時掉頭或查看地圖全局,因此很容易錯過最佳路線(最佳匹配)。在圖文檢索中,它要么偏重于看圖,要么偏重于讀文字,很難將兩者完美地結合起來雙向思考。
-
缺陷二:飲食太“單一”(訓練數據單一)
- 問題:傳統模型主要靠“一張圖 + 一句短描述”這種簡單的“圖文對”進行訓練。這就像一個學生只做選擇題,雖然基礎扎實,但一遇到需要長篇論述的復雜問題就束手無策。
- 比喻:這好比一個只吃“米飯+青菜”的人,雖然能活,但營養不均衡,不夠強壯。單一的數據讓模型無法學會處理真實世界中復雜的圖文關系(如一篇帶有多張插圖的新聞報道)。
-
缺陷三:食材太“昂貴”(數據獲取困難)
- 問題:制作高質量的“圖文對”需要大量人工標注,成本極高。與此同時,互聯網上存在海量的、沒有配對的圖片和文本(比如,一個圖片庫和一部小說),這些寶貴的數據資源都被浪費了。
MoCa的目標:就是要把這些“單行道”思維的生成模型,通過一種輕量級、低成本的方式,改造成一個能夠“雙向思考”、精于理解和檢索的“全能選手”。
MoCa的“兩步改造法”:從單向到雙向,從理論到實戰
MoCa的設計分為兩個核心階段,就像一個完整的“培訓課程”。
階段一:學會“雙向思考” —— 聯合重建預訓練
這是最關鍵的一步,目的是打破模型的“單行道”思維模式。
- 核心思想:玩一個“填空拼圖”游戲。
- 具體做法:研究者從海量無標注數據中,隨意拿來一張圖和一段文字。然后,隨機“遮住”(Mask)圖片的一部分區域和文字中的幾個詞。模型的任務就是,看著沒被遮住的部分,同時“猜出”被遮住的圖片和文字是什么。
- 猜文字(MLM):輸入“一只[遮住]在草地上奔跑”,模型需要根據圖片和上下文猜出“狗”。
- 猜圖片(MAE):遮住圖片中狗的頭部,模型需要根據文字描述“一只金毛犬”和圖片中身體的部分,把頭部“畫”回來。
- 具體做法:研究者從海量無標注數據中,隨意拿來一張圖和一段文字。然后,隨機“遮住”(Mask)圖片的一部分區域和文字中的幾個詞。模型的任務就是,看著沒被遮住的部分,同時“猜出”被遮住的圖片和文字是什么。
- 為什么有效?
- 這個“猜謎”任務強迫模型必須同時利用圖像和文本的線索。想猜對詞,必須看懂圖;想補全圖,必須讀懂文字。一來二去,模型內部就自然而然地建立起了圖像與文本之間的“雙向立交橋”,學會了同時從兩個方向進行理解和推理。
- 巨大優勢:這一步幾乎零成本,因為它使用的是海量、免費的無標注數據,解決了數據昂貴的問題。
解釋:就像教一個孩子認字,你不僅給他看“蘋果”這兩個字,還指著真實的蘋果。然后你遮住“果”字讓他猜,再遮住蘋果的一部分讓他想象。通過這種互動,他才能真正建立“蘋果”這個詞和實體蘋果之間的雙向聯系。
階段二:適應“真實戰場” —— 異構對比微調
模型學會了“雙向思考”的基本功,但還需要針對“考試”(實際任務)進行強化訓練。
- 核心思想:用多樣化的“模擬題”進行實戰演練。
- 傳統方法的局限:只用“短圖文對”進行微調,好比考生只刷一種題型,容易死記硬背,缺乏泛化能力。
- MoCa的創新:它把各種不同類型的數據混合在一起,進行“對比學習”。對比學習的目標是讓模型拉近“正確配對”的距離,推遠“錯誤配對”的距離。
- 長文檔配圖:訓練模型處理復雜的邏輯和長篇內容,好比做“閱讀理解大題”。
- 傳統短圖文對:鞏固基礎,好比做“看圖說話選擇題”。
- 純文本對:增強模型對語言的理解能力,即使沒有圖片也能舉一反三。
- 為什么有效?
- 這種“大雜燴”式的訓練,模擬了真實世界中信息的多樣性。模型見多識廣,就不會在某個特定任務上“偏科”,其生成的向量表示(Embedding)既能捕捉宏觀語義,又能識別微觀細節,泛化能力和魯棒性大大增強。
MoCa在各項測試中都取得了優異的成績。
- “越級挑戰”成功:一個經過MoCa改造的30億參數(3B)的小模型,其性能竟然可以媲美甚至超越一個未經改造的70億參數(7B)的大模型。這證明了MoCa框架的高效性和輕量化優勢。
- 全面領先:在包含36個任務的MMEB和7個任務的ViDoRe-v2等多個權威基準測試中,MoCa都名列前茅,尤其是在需要深度理解和細節推理的復雜文檔檢索任務上,表現尤為突出。
- 每個環節都不可或缺:實驗證明,如果去掉第一階段的“填空拼圖”游戲,或者在第二階段只用單一數據訓練,模型性能都會大幅下降。這驗證了MoCa設計的科學性和完整性。
MoCa框架的成功之處在于:
- 技術創新:它首創性地通過“聯合重建任務”(填空+拼圖),巧妙地將VLM的“單行道”思維改造成了“雙向立交橋”,解決了模型理解能力不足的根本問題。
- 方法高效:它充分利用了海量、廉價的無標注數據進行預訓練,再通過多樣化的數據進行精調,實現了低成本、高性能的完美結合。
- 現實意義:MoCa為如何利用現有的強大生成模型,并將它們的能力拓展到更深層次的“理解”領域,提供了一條清晰可行的道路。