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