李肖南,王 蕾,2,程海霞,張志勇
(1.東華理工大學 信息工學院,江西 南昌 330013;2.江西省核地學數(shù)據(jù)科學與系統(tǒng)工程技術(shù)研究中心,江西 南昌 330013)
點云作為一種表示三維模型的基本格式,可以通過激光掃描儀很輕易地獲取,但由于其點數(shù)不確定性和排列的無序性,不適合輸入到深度神經(jīng)網(wǎng)絡(luò)中處理。近年來,一些研究人員致力于開發(fā)3D點云的分類方法。2017年,Qi等人提出了用于直接處理不規(guī)則點云的PointNet[1]框架,它通過對每個點獨立執(zhí)行特征學習,然后應(yīng)用最大池來累積特征,從而實現(xiàn)點云的排列不變性。雖然PointNet[1]比以前的方法更加精確和健壯,但是它忽略了局部特征,這限制了它對復(fù)雜場景的細粒度模式識別和感知。作為增強版,PointNet++[2]引入了分層特征學習來學習尺度不斷增大的局部特征,但在學習過程中仍然只對每個點進行獨立操作,忽略了點與點之間的關(guān)系。為了解決這個問題,一些學者通過考慮每個點的鄰域來充分提取局部特征,盡管在公共數(shù)據(jù)集上已經(jīng)取得了有效的結(jié)果,但是仍然存在一些未解決的問題。首先,每個點都有自己的坐標信息和額外的屬性值,即顏色、法線、反射率等。這種表示只表達點本身的物理意義,而不考慮其鄰近的和上下文的意義。第二,每個點的標注不僅取決于它自己的表示,還與其他點有關(guān),點云中復(fù)雜的全局關(guān)系還沒有被明確地開發(fā)和描述。第三,不同位置的點對幾何知覺的重要性是不相等的。具體來說,角點和邊緣比平坦區(qū)域的視覺敏感,強調(diào)這些關(guān)鍵點對于提高特征的質(zhì)量是至關(guān)重要的。
為了解決上述問題,該文提出了一種新的三維點云分類模型,包括低級局部幾何特征和高級全局語義特征,并引入了self-attention機制,更靈活地捕捉局部和全局信息,可以充分挖掘三維點云的深層隱含特征。這項工作提供了以下三個主要內(nèi)容:
(1)構(gòu)建了一個端到端的三維點云分類模型,網(wǎng)絡(luò)采用逐點特征提取和匯集操作來解決無序的點云問題。
(2)以Self-Attention機制的方式作為網(wǎng)絡(luò)輸入,而不是僅考慮每個孤立點的位置,可以靈活地捕捉全局和局部的聯(lián)系,可以充分挖掘三維點云的深層隱含特征。
(3)采用KNN和VLAD模塊分別提取低級幾何特征和高級語義特征,并引入關(guān)鍵點來表示每個不同點的權(quán)重,達到對點云特征的有效提取。
隨著深度學習技術(shù)的發(fā)展和更多的數(shù)據(jù)集開始向公眾開放,點云處理已經(jīng)成為計算機視覺領(lǐng)域的一項重要任務(wù)。深度神經(jīng)網(wǎng)絡(luò)已經(jīng)在各種視覺任務(wù)中取得了顯著的成功,然而,將CNN應(yīng)用于不規(guī)則結(jié)構(gòu)的物體里(如3D點云)仍然具有挑戰(zhàn)性。
PointNet[1]是將原始點云作為深度學習輸入的開創(chuàng)性工作,并且它是首次對點云進行直接處理,因此為很多學者對點云的研究提供了新思路。其主要思想是利用點向卷積將原始三維坐標映射到高維特征空間,然后進行max pooling或average pooling操作來消除點排列的影響。但是由于PointNet在提取點云特征的時候忽略了局部特征,從而限制了其分類性能。為了解決這一問題,PointNet++[2]提出了點云的分層特征學習方法,將整個點集劃分為多個子集,并對每個子集重復(fù)應(yīng)用一個簡化的PointNet[1],這些局部特征被分組組成一個全局表示。PointNet++[2]由于分組的復(fù)雜過程和反復(fù)的前向傳播,使得調(diào)優(yōu)變得非常耗時,導(dǎo)致結(jié)果并不能達到特別理想。這兩種方法的提出使得很多學者都開始相繼研究直接對點云處理的方法。
最近,已經(jīng)有很多學者引入k-d樹、圖等結(jié)構(gòu)來捕獲非結(jié)構(gòu)化點之間的局部關(guān)系[3-8],例如,KCNet[8]和FoldingNet[7]使用基于圖的max-pooling對圖進行下采樣,該圖使用構(gòu)建的k-NN圖對每個節(jié)點的鄰域取最大特征。但是這些方法不能保證將最重要的點(臨界點)傳遞給下層網(wǎng)絡(luò),使得具有不太相關(guān)的特征的點可能被選擇,而重要的點可能被刪除。一些學者還提出了新的卷積策略,嘗試引入各種局部特征,如到鄰近點的距離和局部表面法線的夾角,并用它們來表示點云。隨后的PointCNN[9]、PointConv[10]等文獻也聚焦于點云的局部結(jié)構(gòu),進一步提高了捕獲特征的質(zhì)量。根據(jù)局部特性和全局特性之間的關(guān)系,引入了self-attention機制、KNN模塊以及VLAD層來提高點云的分類精度,此外,還引入了一個有效的關(guān)鍵點描述符來幫助識別整體幾何圖形。經(jīng)過大量實驗,該模型在ModelNet40數(shù)據(jù)集上獲得了90.9%的分類精度。
該文提出的網(wǎng)絡(luò)框架引入了self-attention層來計算每個點與其他所有點之間的關(guān)聯(lián),從而挖掘點云的局部區(qū)域細粒度特征以及全局信息,并采用KNN算法感知點云的局部形狀結(jié)構(gòu)。在點云識別中,通??梢酝ㄟ^一些邊角上的點來判別物體形狀,因此在點云分類中,一些關(guān)鍵點信息也不可忽略。在網(wǎng)絡(luò)中引入了一個有效的關(guān)鍵點描述符,對一些點通過計算其法向量來獲取不同的點權(quán)重,這是整個網(wǎng)絡(luò)的關(guān)鍵之處。
文獻[11]中提出了一種新的VLAD方法,首次提出高層幾何信息是可以通過每個點的低層幾何描述子和幾個視覺單詞之間的關(guān)系來間接描述的,這種關(guān)系使網(wǎng)絡(luò)能夠推斷出三維點云的高層語義信息。因此,該文在網(wǎng)絡(luò)框架中加入了這個模塊,用于提取點云中包含的高層幾何信息??傮w網(wǎng)絡(luò)框架如圖1所示。
點之間的依賴關(guān)系可以改善分類結(jié)果。在實驗中,受到自然語言處理(序列對序列)任務(wù)研究的啟發(fā),該文引入了一種self-attention機制,可以提取點之間的上下文特征。它是一種自我注意模塊,可以簡單地描述為查詢到鍵值對的映射,通常包含查詢、鍵、值和輸出。通過對鍵值對的查詢,得到對應(yīng)鍵下查詢的權(quán)值,將權(quán)重添加到相應(yīng)的查詢中以得到輸出。同一個查詢在不同的鍵下有不同的輸出,即不同的關(guān)注,并且self-attention對于輸入順序也是不變的。該文利用self-attention機制來獲得每一個點的得到了新的考慮了上下文信息的表征。self-attention模型如圖2所示。
圖1 SA-PointNetVLAD網(wǎng)絡(luò)框架
圖2 self-attention 模型
與傳統(tǒng)的基于注意的序列對序列模型不同,在一個自注意塊中,查詢向量Q∈RDQ,key向量K∈RDK(通常DQ=Dk),Value向量V∈RDV,它們都是從同一個輸入學習的,也可以認為Q,K和V只是三個獨立的MLP層學習的三個特征向量。注意權(quán)值通過Q和K的點積計算,然后與V相乘得到變換后的表示。
(1)
此時,得出的attention value是一個向量值,代表了某一點的編碼向量。該向量中包含了該點的上下文關(guān)系,既包含了全局聯(lián)系同時也擁有了局部聯(lián)系,這也是attention的強大優(yōu)勢之一,它可以同時一次性獲得全局聯(lián)系又可以獲得局部聯(lián)系。
Un,k=Pn⊕(Pn,k-Pn)n∈[1,k]Un,k∈R6
(2)
上面部分的輸出形成一個N×K×6的張量,其中N表示3D點集的點數(shù),K表示每個點的鄰域數(shù),最后6維是點p的坐標和第k個最近鄰點的統(tǒng)一坐標。為了獲得足夠的表達能力來將每個點特征轉(zhuǎn)換成更高維度的特征,后面加了全連接層,3D點集表示為N×K×64的張量。因此KNN模塊可以被視為學習從輸入3D點集提取逐點低級幾何特征的組件,如圖3所示。此外,KNN模塊以逐點方式提取低層幾何特征,解決了點云無序的問題,有效提高了分類任務(wù)的準確性。
圖3 KNN模塊
一般情況下,關(guān)鍵點表示位于目標對象邊緣或角上的點?,F(xiàn)有的方法[12]使用注意力模塊來突出有利于識別的區(qū)域。在這種數(shù)據(jù)驅(qū)動的方法中,每個點的重要程度是自動學習的,然而由于缺乏真實感的關(guān)鍵點進行監(jiān)督,使得難以區(qū)分哪個點更重要。筆者認為,利用點云的內(nèi)在屬性可以獲得更準確的信息。眾所周知,點的法線可以反映形狀特征,所以通過考慮相鄰區(qū)域法線的變化來為每個點分配一個響應(yīng)。
(3)
n表示點的法線。在進行全局最大池化操作之前,將計算得到的響應(yīng)集成到點云的全局表示中。
在本節(jié)中,主要描述了利用VLAD機制[11]從3D點集中提取高級語義特征,如圖4所示。VLAD是一種流行的描述符池方法,用于實例級檢索和圖像分類。受PointNetVLAD[13]和NetVLAD[14]的啟發(fā),通過每個點的低級幾何描述符和幾個視覺單詞之間的關(guān)系來間接描述高級語義特征。如圖4所示,VLAD模塊主要包括以下兩個步驟:(1)top- K VLAD特征選擇;(2)特征變換和融合。
圖4 VLAD框架
2.4.1 top-K VLAD特征選擇
取n個低級幾何特征描述符{v1,v2,…,vn|vn∈RD}作為VLAD模塊的輸入,其中D=128。同時,初始化M個視覺單詞(“聚類中心”),表示為{c1,c2,…,cm|cm∈RD}。每個點的低級幾何特征描述符vn被分配給每個視覺單詞cm,由殘差向量vn-cm表示,該向量記錄低級幾何特征描述符和視覺單詞之間的差異。第n個低級幾何特征描述符vn與M個視覺單詞的關(guān)系表示為r,r的(n,d)關(guān)系計算如下:
(4)
an(cm)表示注意系數(shù),cm,d和vn,d分別表示在m的局部特征上的第d個維度和第n個低層幾何特征描述子,an(cm)是影響cm,d的權(quán)重。用低層幾何特征描述子的soft-assignment來表示an(cm),an(cm)通過下面公式來計算:
(5)
(6)
其中,k∈[1,top-K]和d∈[1,D]。一方面,top-K值控制剩余向量的數(shù)量,另一方面,它表示不同視覺單詞之間的重疊。此外,為了改善網(wǎng)絡(luò)的非線性變換,使用了共享的FC層。
2.4.2 特征轉(zhuǎn)換和融合
top-kVLAD module輸出一個N×3×128張量,其中N表示3D點集中的點數(shù),3表示top-K視覺單詞的數(shù)量,每個點被表示為一個3×128矩陣。在VLAD模塊中添加了一個FC layer層,經(jīng)過FC Layer之后每個點都表示為3×256的矩陣,因此3D的數(shù)據(jù)集表示為N×3×256。然后將其輸入到逐點的全局池化層,池化層為每個點生成高級語義特征。這里VLAD模塊可以看作是學習從輸入的3D點集中提取(n×256)維高層幾何特征的模塊。VLAD模塊不僅解決了點云的無序問題,而且還有效提高了點云分類的準確性。
該文提出的網(wǎng)絡(luò)框架主要是在ModelNet40[15]數(shù)據(jù)集上進行實驗,數(shù)據(jù)集由來自40個類別的12 311個CAD模型組成,其中9 843個用于訓練,2 468個用于測試。由于設(shè)備限制,如果輸入的點數(shù)過多將會延長運行時間,也會導(dǎo)致后期硬件散熱問題無法長時間運行,實驗中統(tǒng)一以512個點作為網(wǎng)絡(luò)輸入。設(shè)置初始學習率為0.001,總的訓練輪數(shù)為250,在Adam優(yōu)化器下(momentum=0.9),Batch Size=32參數(shù)下進行訓練,實驗配置如表1所示。
表1 實驗設(shè)置
本節(jié)主要分析了KNN模塊中的K值對模型性能的影響。在ModelNet40上進行了大量實驗,在其他條件不變的情況下,通過設(shè)置不同的K值以獲取最佳的分類效果。K的大小和分類精度之間的關(guān)系如圖5所示,由圖可以看出當epoch=250,K=8時,分類精度最佳。
圖5 不同K值的效果對比
由圖5可以看出,當K值偏小時(如K=4),在構(gòu)建局部鄰域時所搜索的鄰近點數(shù)較少,“學習”的估計誤差也會隨之增大,從而會降低點云分類精度。然而,隨著K值的增大,所包含的不相關(guān)點數(shù)也會增加,由圖可以看出,K=16時其分類精度比起K=8時有所下降。因此,在構(gòu)建局部鄰域時,K值的選取至關(guān)重要。將K值設(shè)為8,其搜索的局部鄰域包含了一定數(shù)量的點或特征,不僅避免了局部信息不足對點云分類結(jié)果產(chǎn)生的影響,還避免了不相關(guān)點數(shù)導(dǎo)致的較大學習近似誤差。
圖1顯示了SA-PointNetVLAD的網(wǎng)絡(luò)架構(gòu),本節(jié)為了研究SA-TNet模塊和VLAD模塊的功效,在ModelNet40上進行了消融分析。
表2中第一行顯示了只使用簡單的共享層以及基礎(chǔ)KNN模塊,可以看出其性能很差, VLAD模塊的性能很差;第二行是基礎(chǔ)模塊KNN和SA-TNet模塊的集成結(jié)果;第三行是基礎(chǔ)模塊KNN和VLAD模塊的集成結(jié)果,第四行是基礎(chǔ)模塊KNN、SA-TNet和VLAD模塊的集成結(jié)果。結(jié)果表明,在KNN模塊的基礎(chǔ)上單獨引入SA-TNet和VLAD模塊效果分別提升了1.79個百分點和22.28個百分點。當SA-TNet和VLAD模塊全部整合在一起時,如最后一行所示,SA-PointNetVLAD的分類精度達到90.91%。
表2 SA-TNet模塊、KNN模塊和VLAD模塊
實驗結(jié)果分析如下:(1)雖然不同的模塊對分類精度的貢獻不同,但通過增加更多的模塊可以進一步提高最終的分類精度;(2)在三維對象分類任務(wù)中,高層語義特征比低層幾何特征更重要,充分說明VLAD模塊有效提取了高層語義特征。
本節(jié)主要展示了SA-PointNetVLAD從三維點云中提取特征時的效率。主要在ModelNet40數(shù)據(jù)集上設(shè)置了幾組實驗,分類模型的網(wǎng)絡(luò)配置與3.1節(jié)中描述的相同。由于實驗設(shè)備限制,主要將numpoint設(shè)置為512,觀察到實驗結(jié)果與pointNet的對比效果(如圖6所示),SA-PointNetVLAD比PointNet在ModelNet40數(shù)據(jù)集上的分類精度明顯要高。
為了進一步評估SA-PointNetVLAD模型的分類效果,基于ModelNet40數(shù)據(jù)集與幾種先進的方法(包括3DshapeNets[16],OctNet[17],VoxNet[18], O-CNN[6],ECC[19],So-Net[20],A-SCN[21],PointNet++[2],PointNet[1]和Kd-Net[22])進行了比較。結(jié)果如表3所示。
圖6 與pointNet的總分類精度對比
表3 ModelNet40數(shù)據(jù)集分類精度 %
從表3中可以看出,由于該文在提取特征時考慮了點與點之間的幾何關(guān)系,增強了描述局部信息和全局信息的能力,SA-PointNetVLAD的性能優(yōu)于其他所有只使用點作為ModelNet40數(shù)據(jù)集輸入數(shù)據(jù)的方法。SA-PointNetVLAD比ECC[19]的分類精度高了3.5個百分點,SA-PointNetVLAD比So-Net[20]使用了相當小的輸入數(shù)據(jù)大小,但它的效果卻是差不多的。與基于體積的方法相比,SA-PointNetVLAD獲得了更好的性能,與基于點的方法相比,結(jié)果優(yōu)于所有單模型結(jié)果,對于同時運用了self-attention機制的A-SCN[21],分類精度高了1.1個百分點,而且SA-PointNetVLAD所需的輸入數(shù)據(jù)大小僅為512×3。從平衡性能和網(wǎng)絡(luò)復(fù)雜性的角度來看,SA-PointNetVLAD具有更多的優(yōu)勢。
針對三維點云模型中缺乏對各個點的局部信息和全局信息的有效利用,提出了一種新的點云分類框架SA-PointNetVLAD,不僅在PointNet原始的框架上做出了改進,還對整個網(wǎng)絡(luò)框架進行了改進,最后點云分類精度達到了90.9%。在實驗過程中,發(fā)現(xiàn)KNN模塊、SA-TNet模塊以及VLAD模塊這三個模塊都大大提升了網(wǎng)絡(luò)框架的分類精度,并具有一定的實用性。在今后的工作中,將針對點云的實用性做進一步的提升,在考慮點云的法向量的同時,也可以考慮一些其他的影響因素。在檢測出關(guān)鍵點后,沒有做進一步的提取特征操作,而是簡單的將結(jié)果輸入到了VLAD模塊中,后期可以考慮將這些部分進行進一步的處理以獲得更好的效果。