楊軍,黨吉圣
(蘭州交通大學電子與信息工程學院,甘肅 蘭州 730070)
點云是三維模型最重要的數(shù)據(jù)表示形式之一,其能夠準確、直觀地描述三維模型。隨著三維成像技術的飛速發(fā)展,三維點云數(shù)據(jù)呈海量增長趨勢,對其進行分析和處理顯得尤其重要。語義分割作為三維點云數(shù)據(jù)分析處理的前提與基礎,已廣泛應用于醫(yī)學成像、自動駕駛、機器人導航、虛擬現(xiàn)實、遙感測繪等領域,成為計算機視覺和計算機圖形學領域的一個重要研究課題。由于卷積神經(jīng)網(wǎng)絡[1]的飛速發(fā)展以及GPU(graphics processing unit)計算能力的顯著提高,傳統(tǒng)的手工設計描述符[2-4]的方法已漸漸被基于深度學習的方法所取代,一些研究者開始設計針對大規(guī)模、多種類的復雜三維點云模型語義分割的深度學習框架。目前,基于深度學習的三維點云模型語義分割方法主要有:基于投影的方法、基于多模態(tài)的方法、基于體素化的方法和基于點云表示的方法。
基于投影的方法。受二維圖像語義分割方法的啟發(fā),Ku 等[5]將三維點云投影為二維鳥瞰圖,然后使用經(jīng)典的二維深度學習網(wǎng)絡提取特征用于三維點云語義分割。Yang 等[6]設計了一個單級檢測器,從像素級神經(jīng)網(wǎng)絡輸出點云分割結果。Kalogerakis等[7]提出了投影卷積神經(jīng)網(wǎng)絡,首先對三維模型進行多方位拍照,然后將二維視圖輸入VGG(visual geometry group)[8]中提取特征,最后將特征反投影到三維點云表面預測每個點的語義類別。Huang 等[9]提出多視圖卷積神經(jīng)網(wǎng)絡,從對應關系中學習局部描述符,增強了網(wǎng)絡的泛化能力。然而,基于投影的方法的關鍵問題是在生成2D 投影圖時,丟失了具有鑒別力的幾何結構信息。
基于多模態(tài)的方法。Chen 等[10]提出MV3D(multi-view 3D)目標檢測網(wǎng)絡,把鳥瞰圖和點云同時作為輸入獲得多模態(tài)特征,進一步融合用于點云語義分割任務。Qi 等[11]利用一個二維檢測網(wǎng)絡構建截錐體點云。然而,基于多模態(tài)的方法通常計算效率較低。
基于體素化的方法。Wu 等[12]將不規(guī)則的三維點云模型轉(zhuǎn)化為規(guī)則的體素網(wǎng)格,這樣便可以使用三維卷積神經(jīng)網(wǎng)絡處理體素模型提取特征,但是體素方塊大小的選擇會影響網(wǎng)絡性能,太大會丟失細節(jié),太小會增加計算負擔。改進算法提出了空間劃分方法,如Kd 樹[13]或者八叉樹[14],解決了一些分辨率低的問題,但仍然依賴于邊界體的細分,沒有考慮局部幾何結構。
基于點云表示的方法。為了避免多方位投影、體素化等方法的煩瑣操作,Qi 等[15]提出了可以直接作用于無序點云數(shù)據(jù)的PointNet 模型,利用多層感知機(MLP,multi-layer perceptron)學習每個獨立點的高維表征,然后采用一個最大池化層對所有點的高維特征進行聚合得到全局特征描述符。PointNet是深度學習框架可以直接作用于不規(guī)則三維點云數(shù)據(jù)的先驅(qū)性工作,然而,PointNet 只關注每個點的全局特征,缺乏捕捉局部特征的能力。Qi 等[16]提出了PointNet++,通過劃分局部點云分層提取多尺度特征。該網(wǎng)絡雖然考慮了點云局部特征,但是沒有考慮點對之間的關聯(lián)信息,缺乏捕捉幾何特征的能力。Wang 等[17]通過建立和更新動態(tài)圖,在保證置換不變性的同時捕獲局部幾何特征,取得了較先進的分割結果。Chen 等[18]建立局部區(qū)域加強對相鄰點的關注,以充分提取點云的局部幾何特征。Liu 等[19]提出一種點云序列學習模型,采用注意力機制來突出不同尺度區(qū)域的重要性。Wang 等[20]提出了相似分組提議網(wǎng)絡(SGPN,similarity group proposal network)模型,引入相似矩陣作為輸出,表征嵌入特征空間中每對點之間的相似度,從而預測每個點的語義標簽。Jiang 等[21]設計了PointSIFT模塊,該模塊可以對不同方向的信息進行編碼,并且通過堆疊幾個方向編碼單元來實現(xiàn)多尺度表示,最后將解碼器的輸出連接到全連接層,用于預測每個點的語義類別。Ye 等[22]提出利用超點圖來有效捕捉點云的組織結構,然后通過圖卷積神經(jīng)網(wǎng)絡從超點圖中提取特征來完成語義分割任務。Landrieu 等[23]提出了一種新的端到端語義分割方法,首先研究了利用多尺度鄰域捕獲不同密度局部結構特征的金字塔池化模型,然后利用雙向循環(huán)神經(jīng)網(wǎng)絡(RNN,recurrent neural network)學習點云的空間相關性來捕捉空間結構信息,最后輸出每個點的語義標簽。
相對于三維目標識別任務,三維點云語義分割需要預測每個點的語義類別,提取更精細的點特征,因此是一項需要結合上下文信息的更具挑戰(zhàn)性的細粒度點云分析任務,但由于點云存儲在不規(guī)則和無序的結構中,提取點云的上下文細粒度特征信息仍然具有很大的挑戰(zhàn)性。現(xiàn)有方法在三維點云語義分割過程中對于整體幾何形狀極其相似、局部細節(jié)結構略有不同的語義類不能進行有效區(qū)分,造成的欠分割問題一直沒有得到很好的解決。本文提出一種基于上下文注意力卷積神經(jīng)網(wǎng)絡(CACNN,contextual attention convolutional neural network)的三維點云語義分割算法,充分挖掘三維模型的多尺度上下文細粒度特征信息,改善了三維點云語義分割的過分割問題,提高了三維點云語義分割的準確率。主要貢獻和創(chuàng)新點如下。1) 構建上下文注意力卷積層。通過在局部點云中引入圖注意力機制來對鄰域特征進行自適應篩選,更好地學習點云的細粒度局部特征。2) 通過上下文RNN 編碼每個采樣點的不同尺度鄰域特征來學習每個采樣點的多尺度上下文幾何特征,并與細粒度局部特征相互補償增強特征描述符的語義豐富性。3) 采用多頭部機制聚合不同的單頭部上下文注意力卷積層的特征,使網(wǎng)絡具有良好的泛化能力,同時在網(wǎng)絡中引入殘差學習以充分挖掘三維點云的深層隱含特征信息,進一步提高網(wǎng)絡特征學習的能力。
在實際應用(如自動駕駛)中,點云的數(shù)目非常大,為了減少計算成本,需要構建一個k近鄰圖G=(V,E)來表示點云的一個局部區(qū)域。其中,V={1,2,…,N}為點的集合,E?V×αi表示連接相鄰點對的邊,αi為點xi的鄰域點的集合。為了使點集的特征學習不受旋轉(zhuǎn)、平移等變換的影響,將每個局部區(qū)域點的坐標xij轉(zhuǎn)換為中心點xi的相對坐標,即得到邊的特征為
其中,xi∈V,xij∈αi。
為了充分挖掘點云的細粒度細節(jié)和多尺度上下文信息,在PointNet[15]的基礎上,本文構建上下文注意力卷積(CAC,contextual attention convolutional)層,采用注意力編碼和上下文RNN 編碼2 個并行編碼機制分別學習局部區(qū)域內(nèi)細粒度特征和局部區(qū)域之間的多尺度上下文幾何特征,上下文注意力卷積層網(wǎng)絡結構如圖1 所示。其中,MLP{}表示多層感知機操作,{ }中的數(shù)字表示卷積核的數(shù)目。
注意力編碼機制首先采用輸出通道為F1的MLP 將原始點特征和邊特征映射到高維特征空間,如式(2)和式(3)所示。
其中,λ為參數(shù)化的非線性激活函數(shù),Θ為卷積核中可學習的參數(shù)集合,BN 為批歸一化處理,c為卷積操作,其下標F1×1 表示卷積核大小。實驗中F1取16,即特征通道數(shù)為16。對分別采用一個MLP 生成描述點xi自注意力系數(shù)和鄰域注意力系數(shù),并將兩者進行融合得到描述點xi到其鄰域內(nèi)k個鄰近點的注意力系數(shù)bij,如式(4)所示。
圖1 上下文注意力卷積層網(wǎng)絡結構
其中,Selu()為非線性激活函數(shù)。為了提高模型收斂速度,采用Softmax 函數(shù)對注意力系數(shù)進行歸一化處理,如式(5)所示。
為了挖掘細粒度局部特征,將注意力系數(shù)aij與局部圖特征相乘,則細粒度局部特征li為
此時,注意力系數(shù)作為一個特征選擇器,自適應地對描述點xi具有鑒別力的鄰域特征進行增強,抑制無意義的鄰域特征(如噪聲)充分挖掘點云局部區(qū)域內(nèi)的細粒度細節(jié)信息。
上下文RNN 編碼機制首先采用迭代最遠點采樣算法從輸入點云中選取R(R<N)個點作為R個局部區(qū)域的中心點。對于每個采樣點,采用k最近鄰算法分別搜索距離采樣點最近的[K1,···,Kt,···,KT]個點來構建T個不同尺度的局部鄰域。然后,分別采用卷積核數(shù)目為32、64、128 的3 個MLP 提取每個局部鄰域的幾何特征,第一個MLP 卷積核大小為F×1,由于1×1 卷積核[24]可以增強網(wǎng)絡的非線性擬合能力,減少參數(shù)的同時可以聚合各通道信息,因此,網(wǎng)絡中其余MLP 的卷積核大小均采用1×1。最后,采用一個最大池化層分別將不同尺度的鄰域特征聚合到每個采樣點上,得到每個采樣點的不同尺度的特征序列。其中,為采樣點的kt鄰域的幾何特征向量。
為了獲得采樣點的不同尺度鄰域之間的相關性,把采樣點的特征序列輸入RNN 編碼器,并用一個隱藏層d依次編碼采樣點不同尺度的鄰域特征向量來充分挖掘上下文幾何信息。RNN 在編碼采樣點xi的不同尺度鄰域的特征向量時,依次更新隱藏層狀態(tài),如式(7)所示。
其中,p為非線性激活函數(shù),實驗中采用LSTM 單元;dt-1為編碼上一個鄰域特征向量sk-1的隱藏層狀態(tài)。在RNN 編碼采樣點的第t個鄰域的特征向量sk時,編碼器的輸出ot為
其中,Wa是一個可學習的權重矩陣。當網(wǎng)絡學習完成整個特征序列后,得到隱藏層狀態(tài)dT,和Wa相乘得到采樣點的多尺度上下文幾何特征oT。
注意力編碼雖然引入注意力機制增強了網(wǎng)絡捕捉局部區(qū)域內(nèi)細粒度細節(jié)的能力,但是忽略了對于點云語義分割至關重要的局部區(qū)域之間的上下文幾何信息。上下文RNN 編碼機制充分挖掘了點云的多尺度上下文高級特征,因此低級別的細粒度局部特征和高級別的多尺度上下文幾何特征可以相互補償。采用Selu 非線性激活函數(shù)將采樣點的不同層次的細粒度局部特征和上下文幾何特征融合,可以得到采樣點的大小為N×F2的上下文細粒度幾何特征。在特征融合前,采用插值操作[16]在R×128的點云上采樣N×128 的點云。特征融合計算式為
為了獲得豐富的特征信息以進一步增強網(wǎng)絡的泛化能力,本文引入多頭部機制。在計算CAC層的上下文細粒度特征和圖特征時引入隨機丟棄(dropout)算法,通過隨機丟棄一些權重得到M個不同的單頭部(single-head)CAC 層。然后,把M個單頭部CAC 層連接到一起得到特征信息更加豐富的多頭部上下文注意力卷積(M-CAC,multi-heads contextual attention convolutional)層。多頭部CAC層網(wǎng)絡結構如圖2 所示,計算式如式(10)所示。
圖2 多頭部CAC 層網(wǎng)絡結構
為了進一步挖掘點云的深層隱含語義特征信息,本文在構建的上下文注意力卷積神經(jīng)網(wǎng)絡中引入殘差學習,網(wǎng)絡結構如圖3 所示。其中,空間轉(zhuǎn)換網(wǎng)絡為一個3×3 的矩陣。
對于網(wǎng)絡輸入的N×F點云矩陣,首先采用一個空間轉(zhuǎn)換網(wǎng)絡對其進行規(guī)范化,實現(xiàn)點云矩陣的空間變換不變性。然后,采用M-CAC 層提取輸入點云的上下文細粒度幾何特征和圖特征,將得到的特征維度為N×176 的上下文細粒度幾何特征與區(qū)域中心點的三維坐標特征相結合,獲得維度為N×179 的點云矩陣輸入堆疊的MLP層進行二次特征提取。此外,為了挖掘深層隱含語義特征,引入殘差連接,在避免梯度消失的同時加深了網(wǎng)絡深度,各層卷積層的具體參數(shù)設置如表1 所示。最后一層卷積層Layer6輸出的N×1 024 特征矩陣通過一個最大池化層進行特征聚合得到1×1 024 的全局特征描述符。為了從全局形狀特征描述符中獲取點級別的特征,在網(wǎng)絡中引入2 個插值層[16],通過上采樣將特征從形狀級別傳播到點級別。本文采用三維空間中點與點之間的歐氏距離來實現(xiàn)特征傳播過程χ,由點q與其k最近鄰點qi的歐氏距離插值而成,計算式如下
其中,q-qi表示點q與qi的歐氏距離。為了引導插值過程,將插值后的特征與對應的點特征連接起來,并在網(wǎng)絡中引入多個MLP 層和Selu 層促進點級別特征的提取。最后網(wǎng)絡輸出分割結果N×S點云矩陣,表示每個點的語義類別。
圖3 CACNN 的網(wǎng)絡結構
表1 卷積層參數(shù)設置
為了驗證本文算法的語義分割性能和泛化性,實驗選用3 個標準公開數(shù)據(jù)集,分別為部件語義分割數(shù)據(jù)集ShapeNet Parts[25]、室內(nèi)場景語義分割數(shù)據(jù)集 S3DIS[26]和戶外場景語義分割數(shù)據(jù)集vKITTI[27]。ShapeNet Parts 數(shù)據(jù)集包含16 個類別的16 881 個CAD 模型,其中9 843 個模型用于訓練,2 468 個模型用于測試,定義了50 個部件語義標簽。S3DIS 數(shù)據(jù)集是一個大規(guī)模室內(nèi)RGB-D 數(shù)據(jù)集,共有6 個區(qū)域271 個房間,定義了地板、窗戶、門、橫梁等13 個語義類別。實驗設置和文獻[15]一樣,采用6 個區(qū)域交叉驗證。vKITTI 數(shù)據(jù)集是一個模擬現(xiàn)實世界的可應用于自動駕駛的戶外大規(guī)模點云數(shù)據(jù)集,將5 個不同城市場景的視頻序列分為互不重疊的6 個區(qū)域,定義了車、樹木、馬路、建筑物等13 個語義類別。
本文算法CACNN 的訓練和測試過程的實驗環(huán)境基于Linux Ubuntu 16.04 操作系統(tǒng)、Intel i7 8700k CPU、內(nèi)存32 GB、GeForce RTX 2080 GPU,運算平臺為CUDA-Toolkit 9.0,采用Cudnn 7.13 作為網(wǎng)絡的GPU 加速庫,深度學習框架為Tensorflow-GPU,版本號為1.9.0。在實驗中,CACNN 的訓練過程采用基于動量的隨機梯度下降(SGD,stochastic gradient descent)優(yōu)化算法,設置動量為0.9,權重衰減為0.000 5,初始學習率為0.001,學習率衰減系數(shù)為0.5,衰減速度為300 000,全連接層中dropout的參數(shù)保留率為0.5。優(yōu)化器采用Adam,網(wǎng)絡參數(shù)初始化采用Xavier 優(yōu)化器。
為了驗證本文算法在處理三維點云語義分割任務上的優(yōu)越性,在ShapeNet Parts 數(shù)據(jù)集上與其他先進算法在識別準確率和效率兩方面進行了對比,評估準則采用前向傳播時間和平均交并比mIoU(mean intersection-over-union),實驗結果如表2 所示??梢钥闯?,本文算法以85.4%的mIoU 和39.0 ms的前向傳播時間獲得了較好的分割性能。本文算法相比于當前主流算法 DGCNN(dynamic graph convolutional neural network),在分割準確率和計算效率方面都具有一定優(yōu)勢。圖4為本文算法CACNN與PointNet[15]在ShapeNet Parts 數(shù)據(jù)集上幾個類別的模型分割結果對比,其中 PointNet_diff 和CACNN_diff 分別標出了PointNet 和CACNN 的預測結果與真實體的不同之處。與PointNet 相比,本文算法總體分割錯誤率明顯減少,糾正了PointNet在細粒度邊界處的欠分割問題,如桌子的底部、臺燈的底端等,進一步驗證了本文算法通過構建CAC層能夠捕捉對于點云語義分割至關重要的上下文細粒度信息。
表2 不同算法在ShapeNet Parts 數(shù)據(jù)集上的網(wǎng)絡性能比較
圖4 本文算法與PointNet 在ShapeNet Parts數(shù)據(jù)集上的模型分割結果對比
此外,為了探究本文構建的CAC 層中采用注意力編碼和上下文RNN 編碼機制的有效性,在實驗中依次引入這2 種編碼機制以驗證每一種編碼機制的作用,實驗結果如表3 所示。PointNet 算法采用自編碼機制對獨立的點提取特征,本文算法通過引入注意力編碼方式對三維點云語義分割的mIoU比PointNet 提高了0.7%,原因在于注意力編碼機制通過對每個點的鄰域特征進行區(qū)分,能夠充分挖掘局部點云的細粒度局部特征信息。注意力編碼和上下文RNN 編碼相結合的方式對三維點云語義分割的mIoU 比PointNet 提高了1.7%,因為上下文編碼可以結合每個采樣點的多尺度上下文幾何信息,和注意力編碼提取到的細粒度特征進行相互補償,得到特征信息更加豐富的細粒度多尺度上下文特征。
表3 不同編碼機制的有效性分析
本文繼續(xù)探究了CAC 層、M-CAC 層和殘差學習對網(wǎng)絡性能的影響。通過構造不同的網(wǎng)絡進行訓練并測試,對比實驗結果如表4 所示。可以看出,在PointNet 基礎上加入CAC 層后mIoU 提高了1.4%,因為CAC 層中聚合了多尺度上下文細粒度特征。采用M-CAC(M=3,dropout=0.7)后mIoU提高了0.2%,原因在于多頭部機制提高了特征的豐富性,增強了網(wǎng)絡的泛化能力。引入殘差學習后mIoU 又提高了0.1%,因為殘差學習在避免梯度消失問題的同時加深了網(wǎng)絡容量,能夠充分挖掘點云的深層語義特征信息。
表4 不同組件的有效性分析
為了驗證本文算法對于大規(guī)模點云分析的有效性,在室內(nèi)數(shù)據(jù)集S3DIS 和戶外場景分割數(shù)據(jù)集vKITTI 上進行了訓練和測試,并與主流算法進行了對比,實驗結果如表5 和表6 所示??梢钥闯?,本文算法語義分割的總體準確率(OA,overall accuracy)和mIoU 都優(yōu)于其他主流方法,取得了較理想的分割準確率。除了定量分析外,圖5 和圖6 展示了定性的分割可視化結果。
表5 S3DIS 數(shù)據(jù)集上不同方法的分割準確率對比
表6 vKITTI 數(shù)據(jù)集上不同算法的分割準確率對比
圖5 S3DIS 數(shù)據(jù)集上模型語義分割可視化
圖6 vKITTI 數(shù)據(jù)集上模型語義分割可視化
從圖5 中可以看出,CAC 層能夠改善PointNet存在的欠分割問題,獲得更準確的分割結果。例如,PointNet 對于椅子腿這類細粒度語義類識別能力有限,而本文算法能夠很好地分割出椅子腿的邊界腿梢,總體上以更少的錯誤分割整個場景,證明了本文算法的注意力編碼機制能夠挖掘局部點云的細粒度細節(jié)信息的能力。此外,相比于PointNet 的粗預測,本文算法對Board 的預測準確率也有所提高。原因在于Board 和Wall 的幾何形狀十分相似,只有上下文細節(jié)信息有所差異,本文算法能夠結合Board 的上下文信息和Wall 的特征,可以更好地確定其邊界,改善了欠分割問題,進一步證明了本文算法的上下文RNN 編碼機制能夠有效結合點云上下文幾何信息的能力。在圖6 中,本文算法對于幾何形狀極其相似的Terrain和Road 這兩類語義的識別能力明顯提高,總體分割錯誤率也相對較少,原因在于本文算法能夠結合每個點的上下文細粒度信息,對于識別Terrain,能夠結合其上下文Tree 的細粒度細節(jié)信息以便于確定其邊界,可以減少與Road 的混淆。
本文提出了一種基于上下文注意力卷積神經(jīng)網(wǎng)絡的三維點云語義分割算法。首先將注意力機制引入CAC 層來挖掘點云的局部細粒度特征,其次通過RNN 編碼不同尺度鄰域特征以捕捉點云的多尺度上下文特征,與局部細粒度特征進行優(yōu)勢互補,并采用多頭部機制增強了網(wǎng)絡的泛化能力。同時在網(wǎng)絡中引入殘差學習進一步充分挖掘點云的深層隱含語義特征。定性和定量實驗結果表明,本文算法有效改善了三維點云語義分割中存在的欠分割問題,總體分割準確率得到了提升,且本文算法在3 個標準公開數(shù)據(jù)集上都表現(xiàn)優(yōu)異,充分證明了其具有良好的泛化性。然而,本文網(wǎng)絡結構復雜,訓練參數(shù)較多,難以適用于實時點云分割任務,如何構建一個可部署到嵌入式設備中的輕量級實時點云分割網(wǎng)絡是需要進一步研究的問題。