李恒宇,楊家志,沈 潔,張峻愷
1.桂林理工大學 信息科學與工程學院,廣西 桂林 541004
2.廣西嵌入式技術與智能系統重點實驗室,廣西 桂林 541004
近年來,3D掃描設備和技術的發展,促進了許多依賴3D 點云數據的應用興起。例如,機器人、自動駕駛、AR等,因此,如何高效地處理點云數據逐漸成為了人們關注的焦點。深度學習被廣泛應用在計算機視覺、語音識別和自然語言處理等研究領域,同時也常常被用于點云分類實驗。但是,由于三維點云數據集規模小、維度高、結構無序和稀疏性等特點[1],導致深度卷積神經網絡在對三維點云數據處理時存在一定難度。
目前主流的點云分類方法分為三種:基于多視圖的方法、基于體素化的方法和基于點的方法。基于多視圖的方法是將三維形狀投影到多個視圖中,提取視圖特征,然后融合這些特征來進行準確的形狀分類。這種方法通常會造成大量信息丟失。因為是將三維數據投影成了二維數據,三維數據的內部結構無法獲取,導致幾何的內在關系被破壞,三維空間的上下文信息無法有效利用。基于體素化的方法是將點云轉化為規則的三維網格,在三維網格上使用卷積神經網絡。這種方法會受到體素大小這一個關鍵因素限制,因為需要體素化后的規則體素網絡作為輸入,體素分辨率的高低將直接影響到整體精度。體素的分辨率低則導致有用信息丟失、整體精度降低,體素的分辨率高提升整體精度的同時也導致了龐大的計算量和嚴重的內存占用[2-3]。基于點的方法是將點云的三維坐標(x,y,z)軸作為輸入,直接對點云三維坐標進行卷積操作。許多算法得利于基于點的方法可以保留點云信息的完整性和算法性能良好,在多個數據集上都取得了不錯的效果。基于原始點云的算法現如今是基于深度學習的點云處理的主要研究趨勢[4]。
Qi 等人[5]提出了PointNet 的方法,開創了基于點的方法的先河。PointNet使用多個共享的多層感知器(multilayer perceptron,MLP)對輸入的點云進行學習,并使用最大池化來獲得全局特征,最后使用全連接層(fully connected layer,FC)進行最終的分類。但是這種設計中每個點的特征都是獨立學習的,因此忽略了點與點之間的結構關系。白靜等人[6]提出的LightPointNet雖然優化了參數量,減少了訓練時間,但仍存在忽略空間信息的問題。閆林等人[7]提出的雙路徑神經網絡模型雖然能夠挖掘到局部粒度特征,但臨近點參數對不同數據集有較大影響,需要手動設置,這就導致算法的適應性受到影響。由Qi等人[8]提出的PointNet++通過構建抽象層來從每個點的鄰域構成的局部區域捕捉精細的幾何結構,從局部幾何結構中學習并逐層提取局部特征。雖然簡單地劃分了幾個局部區域進行局部特征學習,但是沒有考慮到點與點之間的關系。Wang 等人[9]在DGCNN(dynamic graph CNN)中提出了一種邊緣卷積(edge convolution,EdgeConv)的方法,通過與K近鄰點構建局部圖結構,之后使用共享的MLP 層對圖的每一個邊緣進行卷積獲取鄰邊特征,最后使用最大池化的方式來對每一個鄰邊特征進行聚合獲取局部特征,并在網絡的每一層之后動態更新。這種方法增強了局部結構中點與點之間的關聯,但由于點云并不是均勻分布的,近鄰點對于中心點的影響也是不同的,而邊緣卷積平等的處理每一個鄰邊,這對分類結果造成了影響。二維圖像數據是機構化存儲的,因此每個像素的順序也是固定的。卷積直接就能從這種潛在的空間結構中獲取信息。然而,因為點云稀疏性、無序性、有限性等特點,卷積并不合適用來獲取數據間的局部相關性。Point-CNN[10]提出一種X 變換方法,先對點云數據進行處理,然后利用卷積操作,對點云進行處理。X變化可以使點云數據實現數據的“規則化”和加權與點相關聯的輸入特征的權重,無序性得到解決,相當于順序發生變化但是得到的卷積效果是相同的。相比其他方法,PointCNN 的參數更少,但是在部分數據上表現出過擬合的問題。
論文基于深度學習方法,針對直接使用卷積提取點的相關特征將導致特征信息的丟失問題,提出了一種經過X 變換后的點云分類卷積神經網絡(convolutional neural network based on X-transform,XTNet)。XTNet對輸入的原始點云數據進行X變換,將它們置換成潛在的規范順序,使用K近鄰算法構建局部區域,在局部特征提取中使用加寬和跳躍連接的方法緩解過擬合,豐富特征信息。在標準公開數據集ModelNet40和真實數據集ScanObjectNN 中進行了實驗,實驗結果表明與目前主流的多個高性能網絡相比,XTNet分類準確率提高了0.3~4個百分點,并且擁有良好的魯棒性和普適性。
XTNet是使用原始點云數據三維坐標(x,y,z)作為輸入的網絡模型。卷積神經網絡(convolutional neural network,CNN)在各種任務上取得成功的一個關鍵因素是卷積算子能夠非常有效地利用數據的空間局部相關性。這是多數類型數據具有的普遍屬性,且與數據的表示方式無關[11]。然而,因為點云具有稀疏性、無序性、有限性等特點,卷積算子不能充分提取局部空間相關性,直接使用卷積提取點的相關特征將導致形狀信息的丟失。XTNet先將輸入的點云數據進行X-變換,將混亂無序的點云數據轉變成潛在的規范順序以減小因為點云的無序、不規則對卷積其造成的影響。然后將轉換后的數據送入局部特征提取模塊,學習和提取局部特征。在局部特征提取的同時設置稠密連接增強信息的傳遞。其次在局部特征提取結束后,通過堆疊局部信息后提取全局信息。最后通過全連接層和Softmax函數分類和輸出。XTNet整體網絡結構如圖1所示。

圖1 XTNet整體網絡結構圖Fig.1 XTNet overall network structure diagram
相較于常規2D 圖片,多個點組成的點云其位置順序有很多種變換可能。如果直接進行卷積操作,那么輸入點的順序發生變化,輸出的也會隨之變化。為了抑制輸入點云的順序阻礙卷積操作,先對輸入的原始點云數據進行X-變換。X-變換是PointCNN 提出的一種Xtransformation Conv 算子,即X-Conv 的核心部分,首先定義一個X-變換矩陣,這個矩陣可以對輸入的帶有特定順序的數據進行處理來獲得一個與順序無關的特征。X-Conv 先經過X 變換矩陣處理,再執行卷積操作。X-Conv算法公式由式(1)所示:
P=(p1,p2,…,pk)T表示鄰近點;F=(f1,f2,…,fk)T表示鄰近點的特征;K表示卷積的的kernel;p表示目標點(query point,or representative point);Fp表示目標點更新后的特征。因為上式可微,故X 變換的矩陣同樣可微,進而可以進行反向傳播。
如果卷積網絡包含接近輸入層和接近輸出層之間的較短連接,則卷積網絡可以更深入、更準確和高效地進行訓練[12]。因此在本文模型中加入了稠密連接,在本文局部特征提取塊中都有D×(D+1)/2 個連接,其中D表示第D個局部特征提取模塊D∈(1,2,3)。引入稠密連接有以下好處:緩解了消失梯度問題,加強了特征傳播,加強了特征傳遞,間接地減少了參數數量。
很多的經典網絡都證明過點云局部結構的構建對于點云高維特征的提取是至關重要的[8-9,13]。局部特征提取能力將間接影響算法識別細粒度模式的能力和對復雜場景的泛化能力。XTNet局部特征提取模塊如圖2所示,其中f為輸入通道數,d為輸出通道數。
在XTNet 局部特征提取模塊中,首先采用K近鄰(K-nearest neighbors,KNN)的方式計算離中心點最近的k個點,將中心點與鄰近點組合構建一個局部區域。然后使用二維卷積對局部區域提取k個高維的近鄰邊特征。在得到k個近鄰邊特征后用最大池化函數將k個鄰邊特征聚合為中心的局部特征。X 變換減小了點云無序性對卷積的干擾,將輸入數據使用一個1×1卷積擴充通道數后與從k個鄰近區域提取到的局部特征相加,一方面每一層可以學習到更加豐富的特征,比如不同方向、不同頻率的紋理特征[14-15];另一方面可以增強了信息流通,使上一個局部特征信息直接傳導給下一個局部特征提取模塊。并且一定程度上起到了抑制梯度消失和退化的問題,表達式如式(2)所示:
多數現有的網絡算法通常采用最大池化函數或者平均池化函數,這樣可以保持網絡的對稱性,但可能存在信息丟失的問題。為減少這方面帶來的影響,本文采用將數據分別使用最大池化函數和平均池化函數聚合后再拼接的方法來對特征進行聚合。即保持了網絡的對稱性,還減少了信息丟失。
這部分首先與其他經典網絡在ModelNet-40 和ScanObjectNN 數據集上的效果進行對比,并對實驗結果進一步分析;然后對各模塊做消融實驗;最后對網絡進行魯棒性和網絡復雜度測試。
ModelNet40數據集[16]:ModelNet40數據集是Princeton大學公開的三維模型分類標準數據集。ModelNet40 由9 843個訓練模型和2 468個測試模型組成,分為40個類。
ScanObjectNN數據集[17]:本文通過ScanObjectNN數據集來證明本網絡模型的魯棒性。這是一個新的基于掃描室內場景數據的真實世界點云對象數據集,數據集包含約15 000個對象,這些對象被分為15個類別,有2 902個唯一的對象實例。因為來自真實世界掃描的對象經常與背景混雜或部分被遮擋而對現有點云分類技術提出更大挑戰。
實驗所用硬件環境為Intel Core i5-11400k CPU+RTX3060(12 GB 顯存)GPU,軟件環境為Windows11+CUDA11.3.1+cuDNN8.2.1+Pytorch1.10.1+Python3.8。網絡優化器選擇的是隨機梯度下降法(stochastic gradient descent,SGD),學習率設置為0.1,訓練批次大小設置為16,訓練最大周期設置為250,K值設置為20,激活函數使用的是將斜率設置為-0.2 的Leaky-ReLU,并在每個MLP后面加入設置為0.5dropout層用來抑制過擬合。
本實驗輸入為僅含1 024 個x、y、z軸三維坐標的點云數據,在實驗結果表1 中用1 kpoint表示僅含1 024個三維坐標的點云數據作為輸入,同理2 kpoint、5 kpoint分別表示輸入的是僅含2 048、5 120個三維坐標點云數據,nor 表示輸入了額外的法向量信息,1 kpoint+nor 表示使用了1 024個三維坐標的點云數據和額外的法向量信息作為輸入,5 kpoint+nor則表示使用了5 120個三維坐標的點云數據和額外的法向量信息作為輸入,vot 表示使用了多次投票驗證策略,Volumetric 表示輸入的是體素化數據。本文對于分類結果的評價標準采取的是最常用的整體精度(overall accuracy OA)和平均類精度(mean accuracy,mAcc),“OA”表示所有測試實例的平均精度,計算方法如公式(3)所示:

表1 ModelNet40數據集上的分類結果Table 1 Classification results on ModelNet40 dataset
TP(True Positive)表示將正類預測為正類數,TN(True Negative)表示將負類預測為負類,FP(False Positive)表示將負類預測為正類數誤報,FN(False Negative)表示將正類預測為負類數漏報。
mAcc 表示所有形狀類別的平均精度,計算方法如公式(4)所示:
其中,M是樣本類總共分成的類別數目,classiacc是第i類的精確度,i∈(1,2,…,M),hits是預測正確的數量,preds參與預測的樣本總量。
對比的網絡模型和分類結果均取自數據集官網公布的主流且效果領先的網絡模型和數據。
表1 給出了XTNet 和當前主流網絡在ModelNet40上的分類結果。從結果上對比可以看出,XTNet整體精度達到93.2%,平均精度為90.4%,與同樣是僅輸入1 kpoint的網絡相比達到領先的結果。還有如PointNet++和SpiderCNN 在輸入了額外5 kpoint 和法向量信息后分類精度仍低于本網絡。與RSCNN 相比,在僅輸入1 kpoint數據時XTNet分類結果優于RSCNN,在使用了10次投票機制后也僅低了0.4個百分點。與分類結果最好的VRN Ensemble 相比,VRN Ensemble 采用的是基于體素化的方法,它充分地發揮了這類方法的優勢,在ResNet[15]的基礎上設計,搭建了更深、更復雜的網絡模型。因此得到了很好的分類結果。但是這種基于體素化的方法需要繁瑣的體素化操作且受分辨率大小影響,更深層次的卷積也意味著需要消耗更多的時間、硬件資源。
為了驗證XTNet 的魯棒性和對真實世界數據集的效果,本文在ScanObjectNN 數據集上也進行了分類實驗,分類結果如表2 所示。在同樣僅是輸入1 024 個點云坐標的情況下,XTNet的整體精度為78.7%,平均精度為73.3%,和數據集官網公布的其他幾個網絡模型相比,都取得了不錯的效果,進一步說明了XTNet 具有強魯棒性。

表2 ScanObjectNN數據集上的分類結果Table 2 Classification results on ScanObjectNN dataset 單位:%
為了驗證網絡中不同模塊的效果,本文還對網絡模型進行了消融實驗。實驗均在數據集ModelNet40上進行,實驗結果如表3所示。

表3 模塊消融實驗結果Table 3 Results of module ablation experiments
網絡0是輸入僅為1 kpoint的DGCNN的分類結果,在網絡1中,將網絡0結構修改成與本文網絡結構一致,由于缺少了一個特征提取模塊,整體精度下降到了90.1%,平均精度下降到84.2%。網絡2在網絡1的基礎上,將用X 變換模塊替換掉網絡1 的轉換模塊,整體精度提升到了91.3%,平均精度提升到了88%,可以看出X變換比原來的變換模塊更有效果。網絡3在網絡2的基礎上再增加殘差連接,增加了模型寬度,增強了特征提取能力,相比之前整體精度和平均精度都有提升。網絡4啟用了所有模塊,整體精度達到93.2%,平均精度達到90.4%。
本文還在ModelNet40數據集上進行了采樣密度魯棒性實驗。分別將點云采樣數量設置為128、256、512、1 024。圖3是不同采樣點采樣可視化結果,表4是使用不同采樣點時的整體精度。圖4是與PointNet、PointNet++、PCNN、DGCNN做對比的結果,可以看到其他網絡模型隨著采樣點的減少,分類精度大幅下降,而本文網絡模型仍有90%以上的準確率,進一步說明了本文網絡魯棒性更好。圖5顯示了不同采樣點精度隨訓練周期epoch變化的變化曲線,在前幾輪學習率較大時有少許抖動,隨訓練周期增加,學習率衰減后不同采樣點的訓練曲線都無明顯抖動。

表4 不同采樣點的整體精度Table 4 Overall accuracy in different sampling points

圖3 不同采樣點的可視化結果Fig.3 Visualization results for different sampling points

圖4 不同采樣點下多種模型的分類效果Fig.4 Classification effects of multiple models at different sampling points

圖5 不同采樣點下XTNet整體精度的變化曲線Fig.5 Variation curve of overall accuracy of XTNet at different sampling points
本節通過對比網絡的參數量(parameters)和浮點運算數(floating point operations,FLOPs)來說明網絡的復雜度。數據通過Facebook 提供的fvcore 工具對作者公開的模型代碼提取,獲取各網絡模型的復雜度,網絡模型的復雜度對比如表5所示。

表5 網絡復雜度Table 5 Network complexity
對比PointNet++和DGCNN,XTNet 在整體精度上有不同程度提高,并且參數量和浮點運算數都有一定的減少;與PointCNN 相比參數量和浮點運算數都有明顯上升,但是整體精度提升了1個百分點。可以看出XTNet在參數量和浮點運算數做到了讓網絡盡量更輕的同時不對精確度產生影響。
在本節中討論了KNN 算法中的K的取值對模型性能的影響。KNN中的K值選取對分類的結果影響至關重要,K值選取得太小,學習的估計誤差會增大,預測結果對近鄰的實例點非常敏感;K值選取得太大,導致學習的近似誤差增大,與輸入實例較遠的訓練實例也會對預測起作用,使預測發生錯誤。本實驗采用ModelNet40數據集,在輸入1 024個點,迭代250次的情況下對不同的K值做了詳細的測試,測試結果如表6所示。不同K值隨周期變化的變化曲線如圖6 所示。根據測試結果和2.5節的分析中,K值選20時分類結果最好,并且不會因為采樣點數的減少在訓練過程中出現大的抖動,所以本文超參數K取20。

表6 不同K 值對模型的影響Table 6 Effect of different values of K on model

圖6 不同K 值下XTNet整體精度的變化曲線Fig.6 Variation curve of overall accuracy of XTNet with different K values
針對點云稀疏性、無序性、有限性等特點造成的信息丟失、神經網絡模型過擬合等問題,本文提出一種用于點云分類的卷積神經網絡模型,可以有效地聚合點云局部和全局特征。首先通過X 變換將原始點云變成潛在的規則矩陣,減少點云的無序性對卷積的干擾;然后通過KNN構建局部區域并使用卷積模塊從中提取局部特征,同時用1×1 卷積拓寬模型并構建殘差塊,對多個局部特征提取模塊做稠密連接,豐富特征的同時抑制過擬合;最后使用池化層從堆疊的局部特征中提取全局特征。從ModelNet40和ScanObjectNN兩個數據集上的分類結果可以看出:XTNet 與現有的網絡模型相比,精度上達到了領先的水平,且通過采樣密度魯棒性實驗以及網絡復雜度實驗證明了本文網絡的穩定性和擁有更低的復雜度。