夏祥騰,王大方,曹 江,趙 剛,張京明
(哈爾濱工業大學(威海)汽車工程學院,威海 264200)
語義分割是無人駕駛汽車中的關鍵算法之一,對車載激光雷達掃描獲取的3D 點云數據進行語義分割,不僅可以保證行車安全,還可以使無人駕駛汽車對周圍環境進行進一步的理解,使其更加智能。
由于卷積神經網絡(convolutional neural network,CNN)的應用,對于2D 圖像中的許多問題有了突破性的進展,例如圖片分類、圖片語義分割和目標檢測等問題。這些突破性的進展使得計算機對2D世界的理解有了質的飛躍。但是,對于3D點云數據的處理不能簡單地將運用在2D 圖像中的算法遷移過來,這不僅僅因為維度的提升帶來了更巨大的計算量和內存消耗,還帶來了點云數據的無序性、密度不一致性、非結構性和信息不完整性等問題。針對這些問題,3D 點云語義分割算法主要可以分為4 類:基于投影的算法、基于體素化的算法、基于點的算法和結合多種方法的算法。
早期學者們借鑒2D 圖像處理的方法,想辦法把3D 點云數據轉化為2D 數據,進而使用2D 圖像處理中較為成熟的CNN、全連接神經網絡(FCN)算法,于是,基于投影方法應運而生。MVCNN獲取三維點云形狀在不同視角下的二維圖像,對每個視圖進行卷積處理再通過池化層和全連接層將每個視角得到的特征進行聚合得到最終的語義分割結果。SqueezeSeg結合激光雷達掃描特點,利用球面投影將3D 點云數據轉換為2D 數據,結合CNN 中的輕量化模型SqueezeNet模型進行語義分割。SqueezeSegV2在SqueezeSeg 的基礎上,利用上下文聚合模塊增強了該模型的魯棒性,提高了語義分割的準確率。SqueezeSegV3提出了空間自適應卷積模塊根據輸入投影圖像位置不同使用大小不同的卷積核。SalsaNext提出了像素混合層(pixel-shuffle layer)用來上采樣,并使用了更適合語義分割的Lovasz-Softmax 損失函數,得到了目前基于投影方法的最好分割效果。無論采用哪種投影方法,投影過程中都會產生信息損失,但因為2D 語義分割技術較為成熟,這類方法也取得了不錯的效果。
為了將無序點云轉化為結構化的數據,學者們將原始點云數據進行體素化,即將點云數據轉化為立體結構,然后使用3D 卷積進行處理。3D U-Net首次利用3D 卷積神經網絡構造了運用于點云語義分割的編碼器結構。使用“1”代表非空的體素網格,“0”代表空白的體素網格。VVNet使用徑向基函數(radial basis functions,RBF)代替這種布爾表示以獲得連續的表示,使用基于內核的內插變分自編碼器(kernel-based interpolated variational autoencoder,VAE)來編碼每個體素內的局部幾何信息,將它們映射到一個隱空間中。基于體素化的方法可以有效結合領域信息,但三維點云相比圖像多出一維,會造成過多的內存消耗和計算開銷。為解決這一問題,子流形稀疏網絡提出了稀疏卷積神經網絡的數據保存形式和具體運算形式。MinkowskiNet利用稀疏卷積神經網絡,構造了加上時空維度的4D 卷積。Cylinder3D根據激光雷達掃描特性,利用柱坐標進行體素化,并使用不對稱的卷積核,有效地解決了點云數據密度不一致的問題。
為了降低體素化或投影過程中的計算復雜度,有些研究者開始從三維數據著手,直接設計網絡提取原始點云數據中的特征信息。PointNet使用多層感知機(multilayer perceptron,MLP)對每個點進行特征提取,并利用最大池化函數直接提取出全局信息,解決了點云的輸入無序性問題。PointNet++對輸入點進行最遠點采樣,再使用KNN 算法尋找周圍點信息,對每個中心點和其鄰近點進行PointNet 操作。KPConv通過尋找點核構造類似于卷積神經網絡的點核卷積Kernel Point Convolution,并且構造了剛性和可變兩種核。RandLA-Net針對在大規模點云中使用基于點的算法在采樣時過于消耗時間這一問題,使用隨機采樣代替廣泛運用的最遠點采樣,并構造LocSE 模塊解決隨機采樣中信息隨機丟失的問題,使點云語義分割時間大大減少。
上述3 種算法各有利弊,因此有學者結合幾種算法對點云進行語義分割。PVCNN結合基于體素化和基于點的算法,使用基于點的算法減少體素化時的信息損失,使得可以取較小的體素化分辨率。KPRNet將球面投影進行語義分割得到的點再利用KPConv進一步分割,得到了比上述兩種算法更好的分割效果。
本文中利用稀疏卷積神經網絡,不僅保留了體素化便于結合領域點特征的優點,還一定程度上解決了3D卷積神經網絡內存時間開銷過大的問題。相對于投影的方法和傳統神經網絡的方法,利用稀疏卷積神經網絡更好地保留了點云的空間特征,并且無需復雜的預處理流程,提高了分割效果且方便高效。
通過對點云進行體素化處理,使無序的點云數據有了類似于圖片規則的結構(圖片的數據結構為×矩陣,體素化點云的數據結構為××的張量)。因此,可以使用三維卷積神經網絡處理點云數據,但盡管3D 數據只比2D 數據多了一維,內存的消耗和運算速度卻是指數級增長。因此受到計算機硬件的限制,將3D 卷積神經網絡應用在大規模點云場景中十分困難。針對大規模點云體素化數據的稀疏性,3D 稀疏卷積神經網絡應運而生。稀疏卷積神經網絡本質上還是卷積神經網絡,但其對輸入輸出數據的保存形式和具體運算過程和普通的卷積神經網絡有很大的不同。
普通卷積神經網絡數據保存形式為××,為小批量,為特征通道數,對于點云來說,為××。由于稀疏性,這些××所對應的特征相當大一部分都為空點,但依然占用內存。在稀疏卷積神經網絡中,點云體素化數據由一個矩陣和一個哈希表組成。的大小為×,為點云體素化數據中不為空的個數。哈希表的鍵為點云體素化數據中不為空的點的坐標,值為這個坐標對應于中的那一行。在大規模點云體素化數據中,?××,因此可以節省大量內存。
在稀疏卷積中,當卷積核的中心對應的點為非空時,才進行卷積運算,這樣便保證了進行步長為1的稀疏卷積運算時不會使非空白點數增加。2D 稀疏卷積如圖1所示,其具體運算過程如下。

圖1 2D稀疏卷積示例
(1)建立輸出哈希表和規則書,規則書為輸出點和輸入點的對應關系。對每個輸出點,檢測其是否為非空點,若其為非空點,在輸出哈希表中建立一個鍵-值對,根據卷積核大小找出其對應的輸入點,并在規則書中寫入對應關系(輸出Hash 表的值,輸入Hash表的值)。若卷積核大小為,則一個輸出點最多對應個輸入點。
(2)建立輸出矩陣。找出輸出點在規則書中的對應關系,根據對應關系中輸入Hash 表的值,在輸入矩陣找出該輸入點的特征向量,設某輸出點共對應個輸入點,輸入特征數量為,輸出特征數量為′,則該輸出點的特征向量為

式中:為輸出點特征向量,大小為1×′;X為第個輸入點的特征向量,大小為1×;為卷積核矩陣(并不是卷積核),大小為×′。
本文中首先將原始點云數據進行體素化,然后利用稀疏卷積神經網絡構造了用于車載激光雷達點云的語義分割模型。針對體素化時多點落入同一網格造成的信息損失問題,結合了多層感知機對原始點云直接處理。并利用通道和空間注意力機制,構造了3D-CA 模塊和3D-SA 模塊,提升語義分割效果。
體素化的主要目的是將無序化的點云結構轉化為有序的數據結構,方便利用稀疏卷積神經網絡對其處理。體素化的具體形式是將原始點云數據{(P,F)}投影到立方網格結構{V}中,其中P代表第個點的原始坐標,P=(x,y,z),F為第個點的特征向量,則有



相對于體素化,還需要解體素化過程。解體素化即為將網格化的(,,,)數據轉化為原始點云數據{(P,F)}。解體素化最簡單實現方式為最近鄰映射,即直接將某網格對應的特征分配給所有落在該網格中的點。但這種方法會使落入同一網格中的點的特征相同,為此,本文中使用三線性插值法實現解體素化。
整體網絡模型如圖2 所示。圖中藍色虛線通道為稀疏卷積部分,也是網絡模型的主干,以編碼器-解碼器結構為框架,-為編碼過程,該網絡結構通過稀疏卷積提取點云特征,通過步長為2 的卷積層代替池化層進行下采樣。-為解碼過程,采用步長為2的反卷積層進行上采樣。

圖2 整體網絡模型
Sparseconv[,]代表3 個網絡基本層串聯,每個網絡基本層代表3 層稀疏卷積神經網絡,前兩個網絡基本層中步長全為1,最后一個基本層中最后一層步長為2 進行下采樣。SparseDeconv[,]也代表3個網絡基本層串聯,每個網絡基本層代表3層稀疏卷積神經網絡,前兩個網絡基本層中步長全為1,不同的是最后一個基本層中最后一層采用步長為2反卷積進行下采樣。
網絡基本層如圖3所示,每個網絡基本層含有3個卷積層、1 個3D-CA 模塊和1 個3D-SA 模塊。每個卷積層后采用ReLU 函數進行激活,并使用BN 層進行批量歸一化。代表第一層輸入特征數量,代表最后一層輸出特征數量。網絡基本層中還使用了MoblieNetV2中提出反轉跳連接結構,即將輸入與該基本層的輸出相連,可以有效地抑制深度學習中梯度消失現象。3D-CA 模塊和3D-SA 模塊將在下文介紹。

圖3 網絡基本層
黑色虛線通道為逐點對點云處理過程,為網絡模型的輔助支路,其中Linear[,]為多層感知機,其輸入特征層數為,輸出特征層數為,每個Linear[,]中含有3 個全連接層,每個全連接層后使用ReLU 函數進行激活。通過直接對原始點云數據直接提取特征,可以彌補因3D稀疏卷積因體素化時網格邊長過大造成的信息損失。這一通路在因計算機資源有限不得不增加體素化立方網格邊長時可以起到更大的作用。
CBAM使用兩種注意力機制在2D 計算機視覺中的圖像分類任務中取得了不錯的準確率增益。本文中將這兩種注意力機制推廣到3D 計算機視覺中,構造了3D-CA(3D-channel attention,三維通道注意力)模塊和3D-SA(3D-spatial attention,三維空間注意力)模塊,可以使網絡將注意力放在發揮更大作用的特征通道和空間中,從而提升點云語義分割效果。3D-CA 模塊如圖4所示,其具體做法為:首先將個特征通道的輸入張量逐通道取全局平均,得到大小為1×的向量;然后將這個向量經過多層感知機(MLP)和Softmax 函數自動提取權重,得到權重向量;最后將輸入張量和權重向量按照廣播機制逐元素相乘得到輸出。3D-SA 模塊如圖5 所示,其具體做法為:將大小為×的稀疏矩陣通過全局平均池化和最大池化得到兩個大小為× 1的向量,將這兩個向量并聯得到大小為× 2的矩陣;將這個矩陣分別經過MLP和Softmax函數自動提取權重,得到權重向量;最后將輸入張量和權重向量按照廣播機制逐元素相乘得到輸出。

圖4 3D-CA模塊

圖5 3D-SA模塊
針對大規模道路點云場景,選取點云數據集SemanticKITTI和SemanticPOSS作為本文的實驗對象。SemanticKITTI 包含了德國卡爾斯魯厄附近的市內交通、居民區、高速公路場景和鄉村道路場景,是現在最大的汽車激光雷達點云數據集。該數據集由22 個點云序列組成,其中00-10 序列作為訓練集,一共包含23 201 幀3D 點云場景;11-21 序列作為測試集,一共包含20 351幀3D 點云場景。其中訓練集中每點都有自己的標簽,人為進行了語義標注。SemanticPOSS 是北京大學最新發布的數據集,包含了北京大學的主要道路場景,含有大量移動的學生和車輛。該數據集由6 個點云序列組成,一共包含2 988 幀點云場景,數據集中行人、車輛的比重比SemanticKITTI數據集高了10倍,更加適合用于無人駕駛技術的語義分割技術研究。
實驗采用深度學習框架為Pytorch1.7,CUDA 版本為11.1,處理器為AMD Ryzen 9 3950X,顯卡為Nvidia GTX 3090。實驗中使用AdamW優化器,AdamW 在Adam 的基礎上帶有權重衰減而不是L2正則化。
點云語義分割算法需要有一定的衡量標準,最簡單的衡量標準便是分割的逐點平均準確率,但該標準在全部語義標注類別中不同的類別點數差距很大,不能夠合理地評價兩種算法的優劣。而在大規模點云場景中,各語義標注類別點數差距很大。本文中使用MIOU(mean intersection over union)來評價分割精度:

式中P代表屬于類但被預測為類的像素數量。由式(4)可以看出,MIOU 可以通俗地理解為一個點云場景中對類物種分割正確的平均準確率而不是逐像素的平均準確率。因為MIOU 容易理解且具有準確的表示形式是現在最常用的度量標準之一。
為驗證稀疏卷積的優勢,對SemanticKITTI 中大小為100 m×100 m×10 m 的點云場景,體素化時使用不同大小的立方網格邊長,記錄體素化后點云場景中的非空點數。數據如表1所示。

表1 不同網格邊長時的參數對比
從表1 可以看出,對大規模點云進行體素化,非空白點數遠小于網格數,當網格邊長為0.05 m 時,網格數是非空點數的8 922倍,驗證了稀疏卷積節省內存的優勢。但隨著網格邊長的減少,MIOU先增加再減少。分析可知,網格邊長越大,體素化后得到的體素化點云越“模糊”,點云場景中物體的特征越不明顯,并且會導致代表不同種物體的點落入一個網格中,造成信息損失,影響分割結果。因此在一定范圍內,MIOU 隨著網格的邊長減小而增加。但是,當網格邊長繼續減小時,盡管非空點數增加,但其所占總網格比例大幅度減少,MIOU便隨之減少。
文中算法網絡模型主干是由稀疏卷積構造的自編碼器。但是由表1可以看出,選取網格邊長為0.05 m,繼續減小網格邊長,非空點數也會繼續增加。說明網格邊長為0.05 m時,依然有大量的點落在了同一個網格中。這必然會導致一部分信息損失,因此通過添加逐點處理分支來彌補這部分的信息損失。為了驗證這一分支的具體效果,在SemanticKITTI數據集上取立方網格邊長為0.05和0.08 m時,分別去除這一分支和僅利用這一分支進行實驗,實驗數據如表2所示。

表2 逐點處理分支效果驗證
由表2 可以看出,如果僅使用逐點處理分支,得到的分割效果非常不理想,但在PointNet中僅使用這種方法在小規模的點云數據集上進行分類任務可以達到不錯的精度,這也說明車載激光雷達點云處理任務中需要充分考慮周圍點的信息。通過表2 還可以看出,加入逐點處理分支可以明顯提高分割效果,說明了其可以稍微彌補因體素化而造成的信息損失。
在圖2 的整體網絡構架中使用圖3 的網絡基本層僅去掉3D-CA 模塊、僅去掉3D-SA 模塊和同時去掉兩模塊進行實驗,得到的結果如表3所示。從表3中可以看出,相對于網絡基本層,3D-CA 模塊能夠將MIOU 提升0.4%,3D-SA 模塊能夠將MIOU 提升0.7%,同時使用3D-CA 模塊和3D-SA 模塊能夠將MIOU提升1.2%。

表3 3D-CA、3D-SA模塊效果驗證
3.5.1 SemanticPOSS數據集
目前在SemanticPOSS數據集上進行實驗的算法較少,文中在總12 類語義標注物體中選取公路上最常見的行人、汽車和騎手3 類,將這3 類的IOU 和MIOU與其他算法對比,得到的結果如表4所示。

表4 不同算法在SemanticPOSS上的分割結果
通過表4 可以看出,文中算法對于行人和汽車都有不錯的分割精度,但對于騎手這一類別,分割效果較差。為了進一步分析,將分割后的結果進行可視化,得到的結果如圖6 和圖7 所示。對比圖6 中第3幀和第4幀結果,同一個體在不同時間序列上會被預測成不同的語義類別,在騎手與行人這種難以分辨的語義類別中更為明顯。而在第4 幀中,文中方法預測結果不僅相當準確,還預測出了數據集作者并未標注的行人,這也表明了算法的相對準確性。由圖7 可以看出,在路口處的復雜路況下文中算法可以很好地分割行人、車輛、騎手和停靠在路邊的自行車。但對距離較遠處較小的行人容易識別錯誤,以及遠處的騎手易和行人造成混淆。圖6 和圖7 表明了文中算法的可靠性,但也顯現出了該算法不能利用前后的時間序列進行分割,以及對遠處個體預測準確性較差的問題。

圖6 SemanticPOSS數據集00序列第3幀和第4幀

圖7 SemanticPOSS數據集02序列第1幀
3.5.2 SemanticKITTI數據集
通過文中的方法,在SemanticKITTI 數據集上將其中19 類語義標注物體的平均交并比達到62.7%,超過了目前最好的基于點的方法(KPConv,58.8%)和基于投影的方法(SalsaNext,59.5%),文中算法和其他算法MIOU 以及各語義標注物體IOU 對比結果如表5所示。通過表5可以看出,算法對于駕駛過程中最常見的汽車、建筑分割精準,但對于相似的摩托車與自行車和摩托車騎手與自行車騎手很難分辨。

表5 不同算法在SemanticKITTI數據集上的語義分割結果
本文中使用稀疏卷積神經網絡構造自編碼器對車載激光雷達掃描得到的點云進行語義分割,在自編碼器的網絡基本層中設計3D-CA 模塊和3D-SA模塊提高語義分割效果;并結合逐點處理分支彌補因體素化時多點落入同一網格造成的信息損失。本文算法在兩個大型點云數據集SemanticKITTI 和SemanticPOSS 上進行了實驗,結果表明,在SemanticPOSS 上得到的分割效果超過了其他幾種目前最優的針對點云的語義分割技術,證明了稀疏卷積在點云處理中的高效性。
稀疏卷積神經網絡可以充分利用空間信息,在特定的時刻可以得到準確的分割效果。但其無法利用時間序列進行分割,即無法結合前后兩幀的信息,即在汽車行駛過程中很難利用先驗的已知信息對周圍環境進行感知。如何利用歷史掃描信息提高語義分割效果是未來的研究方向之一。在大規?,F實場景中,將靜止的交通工具和移動的交通工具進行區分可以進一步保證行駛安全,而目前的算法對靜止和移動的語義類別很難識別,這也是未來點云處理中的研究熱點之一。