CVPR'24 Oral | 一覽純稀疏點云檢測器SAFDNet的前世今生!
寫在前面&筆者的個人理解
3D點云物體檢測對自動駕駛感知至關重要,如何高效地從稀疏點云數據中學習特征表示是3D點云物體檢測面臨的一個關鍵挑戰(zhàn)。我們在本文中將會介紹團隊發(fā)表在NeurIPS 2023的HEDNet和CVPR 2024的SAFDNet,其中HEDNet聚焦于解決現(xiàn)有稀疏卷積神經網絡難以捕捉遠距離特征間依賴關系的問題,而SAFDNet則是基于HEDNet構建的純稀疏點云檢測器。
前世 - HEDNet
研究背景
主流方法通常將非結構化的點云轉換為規(guī)則的體素,并使用稀疏卷積神經網絡或Transformer來提取特征。大多數現(xiàn)有的稀疏卷積神經網絡主要通過堆疊子流形稀疏殘差(Submanifold Sparse Residual, SSR)模塊構建而來,每個SSR模塊包含兩個采用小卷積核的子流形稀疏 (Submanifold Sparse, SS) 卷積。然而,子流形稀疏卷積要求輸入和輸出特征圖的稀疏度保持不變,這阻礙了遠距離特征間的信息交互,導致模型難以捕捉遠距離特征間的依賴關系。一種可能的解決方案是將SSR模塊中的子流形稀疏卷積替換為普通稀疏 (Regular Sparse, RS) 卷積。然而,隨著網絡深度的增加,這會顯著降低特征圖的稀疏度,導致計算成本大幅增加。一些研究嘗試使用基于大卷積核的稀疏卷積神經網絡或Transformer來捕獲遠距離特征間的依賴關系,但這些方法要么沒能在檢測精度上帶來提升,要么需要更高的計算成本。綜上,我們仍然缺乏一種能夠高效地捕捉遠距離特征間依賴關系的方法。
方法介紹
SSR模塊和RSR模塊
為了提升模型效率,現(xiàn)有的3D點云物體檢測器大多采用稀疏卷積來提取特征。稀疏卷積主要包括RS卷積和SS卷積。RS卷積在計算過程中會將稀疏特征擴散到相鄰區(qū)域,因而會降低特征圖的稀疏度。與之相反,SS卷積則保持輸入和輸出特征圖的稀疏度不變。由于降低特征圖的稀疏度會顯著增加計算成本,在現(xiàn)有方法中RS卷積通常僅用于特征圖下采樣。另一方面,大多數基于體素的方法通過堆疊SSR模塊構來建稀疏卷積神經網絡,以提取點云特征。每個SSR模塊包含兩個SS卷積和一個融合輸入和輸出特征圖的跳躍連接。
圖 1(a) 展示了單個SSR模塊的結構。圖中有效特征 (valid feature) 指非零特征,而空特征 (empty feature) 的值為零,代表該位置原本不包含點云。我們將特征圖的稀疏度定義為空特征占據的區(qū)域面積與特征圖總面積之比。在SSR模塊中,輸入特征圖經過兩個SS卷積轉換后得到輸出特征圖,同時輸入特征圖的信息通過跳躍連接 (Skip conn.) 直接融合到輸出特征圖中。SS卷積只處理有效特征,以保證SSR模塊的輸出特征圖與輸入特征圖具有相同的稀疏度。然而,這樣的設計阻礙了不連通特征之間的信息交互。例如,頂部特征圖中由星號標記的特征點,無法從底部特征圖中位于紅色虛線框外、由紅色三角形標記的三個特征點接收信息,這限制了模型建模遠距離特征間依賴關系的能力。
圖1 SSR、RSR和SED模塊結構比較
對于以上問題,一種可能的解決方案是將SSR模塊中的SS卷積替換為RS卷積來捕捉遠距離特征間的依賴關系。我們將這種修改后的模塊稱為普通稀疏殘差 (Regular Sparse Residual, RSR) 模塊,其結構如圖 1(b) 所示。圖中,待擴散特征 (expanded feature) 是有效特征鄰域內的空特征。RS卷積同時處理有效特征和待擴散特征,其卷積核中心會遍歷這些特征區(qū)域,這種設計導致輸出特征圖較輸入特征圖具有更低的稀疏度。堆疊RS卷積則會更加迅速地降低特征圖的稀疏度,進而導致模型效率大幅降低。這也是現(xiàn)有方法通常僅將RS卷積用于特征圖下采樣的原因。這里把expanded feature翻譯成待擴散特征可能有點奇怪,expanded feature是原始論文中的叫法,我們后來認為改成待擴散特征更為合適。
SED模塊和DED模塊
SED模塊的設計目標是克服SSR模塊的局限性。SED模塊通過特征下采樣縮短遠距離特征之間的空間距離,同時通過多尺度特征融合恢復丟失的細節(jié)信息。圖 1(c)展示了一個具有兩個特征尺度的SED模塊示例。該模塊首先采用步長為3的3x3 RS卷積進行特征下采樣 (Down)。特征下采樣之后,底部特征圖中不連通的有效特征被整合進中間特征圖中相鄰的有效特征內。接著,通過在中間特征圖上使用一個SSR模塊提取特征,來實現(xiàn)有效特征之間的交互。最后,上采樣 (UP) 中間特征圖以匹配輸入特征圖的分辨率。值得注意的是,這里僅上采樣特征到輸入特征圖中有效特征所對應的區(qū)域。因此,SED模塊可以維持特征圖的稀疏度。
圖 2(a) 展示了一個具有三個特征尺度的SED模塊的具體實現(xiàn)方式。括號中的數字表示對應特征圖的分辨率與輸入特征圖的分辨率之比。SED模塊采用了不對稱的編解碼器結構,它利用編碼器提取多尺度特征,并通過解碼器逐步融合提取的多尺度特征。SED模塊采用RS卷積作為特征下采樣層,并采用稀疏反卷積 (Inverse Convolution) 作為特征上采樣層。通過使用編解碼器結構,SED模塊促進了空間中不連通特征之間的信息交互,從而使模型能夠捕獲遠距離特征間的依賴關系。
圖2 SED和DED模塊結構
另一方面,當前主流的3D點云檢測器主要依賴于物體中心特征進行預測,但在稀疏卷積神經網絡提取的特征圖中,物體中心區(qū)域可能存在空洞,尤其是在大物體上。為了解決這一問題,我們提出了DED模塊,其結構如圖 2(b) 所示。DED模塊與SED模塊具有相同的結構,它將SED模塊中的SSR模塊替換為密集殘差 (Dense Residual, DR) 模塊、將用于特征下采樣的RS卷積替換為步長為2的DR模塊以及將用于特征上采樣的稀疏反卷積替換為密集反卷積,其中DR模塊與SSR模塊具有相同的結構,但由兩個密集卷積組成。這些設計使得DED模塊能夠有效地將稀疏特征向物體中心區(qū)域擴散。
HEDNet
基于SED模塊和DED模塊,我們提出了層級編解碼器網絡HEDNet。如圖 3 所示,HEDNet通過一個3D稀疏主干網絡來提取高層稀疏特征,接著通過2D密集主干網絡將稀疏特征擴散至物體中心區(qū)域,最后將2D密集主干網絡輸出的特征送入檢測頭進行任務預測。為了方便展示,圖中省略了特征圖、和之后的特征下采樣層。宏觀上,HEDNet采用了與SECOND類似的層級網絡結構,其特征圖的分辨率逐漸降低;微觀上,HEDNet的核心組件SED模塊和DED模塊均采用了編解碼器結構。這就是HEDNet名字的由來。
圖3 HEDNet整體框架
小彩蛋
我們?yōu)槭裁磿氲绞褂镁幗獯a器結構呢?實際上HEDNet是從我們的前序工作 CEDNet: A Cascade Encoder-Decoder Network for Dense Prediction (改名之前叫CFNet) 中啟發(fā)而來。感興趣可以去看我們的論文。
實驗結果
我們將HEDNet與此前領先的方法在綜合性能上進行了比較,結果如圖4所示。與基于大卷積核CNN的LargeKernel3D和基于Transformer的DSVT-Voxel相比,HEDNet在檢測精度和模型推斷速度上均取得更優(yōu)的結果。值得一提的是,與此前最先進的方法DSVT相比,HEDNet在取得更高檢測準確率的同時,在模型推斷速度上提升了50%。更詳細的結果請參見我們的論文。
圖4 在Waymo Open數據集上的綜合性能比較
今生 - SAFDNet
研究背景
基于體素的方法通常將稀疏體素特征轉換為密集特征圖,接著通過密集卷積神經網絡提取特征進行預測。我們將這類檢測器稱為混合檢測器,其結構如圖 5(a) 所示。這類方法在小范圍 (<75米) 檢測場景上表現(xiàn)優(yōu)異,但隨著感知范圍擴大,使用密集特征圖的計算成本急劇增加,限制了它們在大范圍(>200米)檢測場景中的應用。一個可能的解決方案是通過移除現(xiàn)有混合檢測器中的密集特征圖來構建純稀疏檢測器,但這會導致模型的檢測性能明顯下降,因為目前大多數混合檢測器依賴于物體中心特征進行預測,當使用純稀疏檢測器提取特征時,大物體的中心區(qū)域通常是空的,這就是物體中心特征缺失問題。因此,學習適當的物體表征對于構建純稀疏檢測器至關重要。
圖5 混合檢測器、FSDv1和SAFDNet的結構對比
為了解決物體中心特征缺失問題,F(xiàn)SDv1 (圖 5(b)) 首先將原始點云分割為前景點和背景點,接著通過中心點投票機制對前景點進行聚類,并從每個聚類中提取實例特征用于初始預測,最后再通過Group Correction Head進一步細化。為了減少手工提取實例特征引入的歸納偏差,F(xiàn)SDv2采用虛擬體素化模塊來替換FSDv1中的實例聚類操作。FSD系列方法與CenterPoint等廣泛使用的檢測框架差異較大,并且引入大量超參數,導致在真實場景中部署這些方法面臨挑戰(zhàn)。與FSD系列方法不同,VoxelNeXt直接基于距離物體中心最近的體素特征進行預測,但犧牲了檢測準確率。
那么我們想要的純稀疏點云檢測器是什么樣的呢?首先,結構要簡單,這樣便于直接部署到實際應用中,一個直觀的想法是在目前廣泛使用的混合檢測器架構如CenterPoint的基礎上,做最小的改動來構建純稀疏檢測器;其次,在性能上至少要匹配目前領先的混合檢測器,并且能夠適用于不同范圍的檢測場景。
方法介紹
從上述兩個要求出發(fā),我們基于HEDNet構建了純稀疏3D點云物體檢測器SAFDNet,其宏觀結構如圖 5(c) 所示。SAFDNet首先利用稀疏體素特征提取器來提取稀疏點云特征,接著采用自適應特征擴散 (Adaptive Feature Diffusion, AFD)策略和2D稀疏卷積神經網絡將稀疏特征擴散到物體中心區(qū)域,來解決物體中心特征缺失問題,最后基于稀疏體素特征進行預測。SAFDNet能夠僅使用稀疏特征進行高效計算,并且其大部分結構設計和超參數與基準混合檢測器保持一致,使其可以輕松適配到實際應用場景,來替換現(xiàn)有的混合檢測器。下面介紹SAFDNet的具體結構。
SAFDNet整體框架
圖 6 展示了SAFDNet的整體框架。與現(xiàn)有的混合檢測器類似,SAFDNet主要由三個部分組成:一個3D稀疏主干網絡、一個2D稀疏主干網絡和一個稀疏檢測頭。3D稀疏主干網絡用于提取3D稀疏體素特征,并將這些特征轉換成2D稀疏BEV特征。3D稀疏主干網絡使用了3D-EDB模塊來促進遠距離特征間的信息交互 (3D-EDB模塊就是基于3D稀疏卷積構建的SED模塊,下文的2D-EDB模塊類似)。2D稀疏主干網絡接收3D稀疏主干網絡輸出的稀疏BEV特征作為輸入,它首先對每個體素進行分類,以判斷每個體素的幾何中心是否落在特定類別的物體邊界框內或者是否屬于背景區(qū)域,接著通過AFD操作與2D-EDB模塊,將稀疏特征擴散到物體中心區(qū)域。該部分是SAFDNet的核心組件。稀疏檢測頭基于2D稀疏主干網絡輸出的稀疏BEV特征進行預測。SAFDNet采用CenterPoint提出的檢測頭設計,我們對其進行了一些調整以適配稀疏特征,更多細節(jié)請參見論文。
圖6 SAFDNet整體框架
自適應特征擴散 (AFD)
由于激光雷達產生的點云主要分布在物體表面,使用純稀疏檢測器提取特征進行預測將面臨物體中心特征缺失問題。那么檢測器能否在盡可能保持特征稀疏度的同時,提取更接近或者位于物體中心的特征呢?一個直觀的想法是將稀疏特征擴散到鄰近的體素內。圖 6(a)展示了一個稀疏特征圖的示例,圖中紅點表示物體中心,每一個方格代表一個體素,深橙色方格是幾何中心落在物體邊界框內的非空體素,深藍色方格是幾何中心落在物體邊界框外的非空體素,白色方格是空體素。每個非空體素對應一個非空特征。圖 7(b) 是通過將圖 7(a) 中非空特征均勻擴散到KxK (K取5) 的鄰域后得到。擴散得到的非空體素以淺橙色或淺藍色表示。
圖7 均勻特征擴散和自適應特征擴散示意圖
通過分析3D稀疏主干網絡輸出的稀疏特征圖,我們觀察到:(a) 少于10%的體素落在物體的邊界框內;(b) 小物體通常在其中心體素附近或中心體素上有非空特征。這一觀察表明,將所有非空特征擴散到相同大小的領域內可能是不必要的,特別是對于小物體邊界框內和背景區(qū)域中的體素。因此,我們提出了一種自適應特征擴散策略,該策略根據體素特征的位置動態(tài)調整擴散范圍。如圖 7(c) 所示,該策略通過為大物體邊界框內的體素特征分配更大的擴散范圍來讓這些特征更接近物體中心,同時通過為小物體邊界框內和背景區(qū)域中的體素特征分配較小的擴散范圍來盡可能地維持特征稀疏度。為了實現(xiàn)這一策略,需要進行體素分類(Voxel classification),以判別任意非空體素的幾何中心是否在特定類別物體的邊界框內或者屬于背景區(qū)域。關于體素分類的更多細節(jié)請參考論文。通過使用自適應特征擴散策略,檢測器能夠盡可能地保持特征稀疏度,進而受益于稀疏特征的高效計算。
主要實驗結果
我們將SAFDNet與之前最好的方法在綜合性能上進行了比較,結果如圖8所示。在檢測范圍較小的Waymo Open數據集上,SAFDNet和之前最好的純稀疏檢測器FSDv2以及我們提出的混合檢測器HEDNet取得相當的檢測準確率,但SAFDNet的推斷速度是FSDv2的2倍以及HEDNet的1.2倍。在檢測范圍較大的Argoverse2數據集上,與純稀疏檢測器FSDv2相比,SAFDNet在指標mAP上提升了2.1%,同時推斷速度達到了FSDv2的1.3倍;與混合檢測器HEDNet相比,SAFDNet在指標mAP上提升了2.6%,同時推斷速度達到了HEDNet的2.1倍。此外,當檢測范圍較大時,混合檢測器HEDNet的顯存消耗遠大于純稀疏檢測器。綜上所述,SAFDNet適用于不同范圍的檢測場景,且性能出色。
圖8 主要實驗結果
未來工作
SAFDNet是純稀疏點云檢測器的一種解決方案,那么它是否存在問題呢?實際上,SAFDNet只是我們關于純稀疏檢測器設想的一個中間產物,筆者認為它過于暴力,也不夠簡潔優(yōu)雅。敬請期待我們的后續(xù)工作!
HEDNet和SAFDNet的代碼都已經開源,歡迎大家使用。奉上鏈接: https://github.com/zhanggang001/HEDNet