鐘 誠,周浩杰,韋海亮
(數(shù)學(xué)工程與先進(jìn)計算國家重點實驗室,江蘇 無錫 214000)
三維點云是指一個三維坐標(biāo)系統(tǒng)中一組向量的集合。這些向量通常以X,Y,Z三維坐標(biāo)的形式表示,一般用于描述物體的外貌形狀。深度學(xué)習(xí)方法已經(jīng)被廣泛應(yīng)用于圖像識別、文本處理等領(lǐng)域。但目前而言,使用深度學(xué)習(xí)方法提取三維點云數(shù)據(jù)的特征仍然存在諸多障礙。其中最主要的原因在于點云的排列不變性。用于表示同一物體的n個點云數(shù)據(jù)點有n!種排列方式,而點云的高層語義特征不能因為點云排列順序的變化而改變。這意味著過去應(yīng)用在網(wǎng)格狀數(shù)據(jù)(如圖像、文本)上的卷積方法難以應(yīng)用在三維點云數(shù)據(jù)上。Charles R. Qi等人提出的PointNet[1]為三維點云數(shù)據(jù)的處理打開了一扇新的大門。PointNet將對稱函數(shù)應(yīng)用到三維點云的處理過程中,憑借最大池化的方法提取三維點云的高層特征,借此刷新了多項基準(zhǔn)數(shù)據(jù)集的記錄。最大池化的方法雖然在高層語義特征的提取上有很大優(yōu)勢,但是采用這種方法會造成三維點云局部幾何特征的缺失,給局部信息的提取造成困難。自然語言處理問題同樣需要妥善解決局部信息與全局信息的關(guān)系。自然語言處理中,解決這一問題的常用方法有:卷積網(wǎng)絡(luò)、循環(huán)卷積網(wǎng)絡(luò)[2]以及注意力機制[3]。其中注意力機制可以不依賴卷積的堆疊,實現(xiàn)局部與全局信息的整合。這一特點滿足三維點云數(shù)據(jù)處理過程的需求,所以利用注意力機制提取點云信息是一種可行的技術(shù)路線。
文中的主要貢獻(xiàn)分為兩點:在點云特征提取中引入注意力機制,為點云局部與全局信息的整合提供一種可行方法;使用稀疏卷積層替代最大池化層,減少池化過程的信息損失。
三維點云的特征提取技術(shù)在與點云相關(guān)的應(yīng)用中發(fā)揮著重要作用。與深度學(xué)習(xí)特征有關(guān)的主流的點云特征提取方法主要可以分為三類:體素化方法[4]、多視圖方法、最大池化方法。
體素化方法可以視作二維卷積在三維空間上的拓展與應(yīng)用。體素化方法結(jié)構(gòu)簡單,但是在三維空間構(gòu)造網(wǎng)格對內(nèi)存資源消耗大,并且點云在空間中的分布往往是稀疏的,直接對空網(wǎng)格進(jìn)行卷積會造成不必要的計算資源浪費。所以單純的體素化方法一般難以完成高分辨率點云解析任務(wù)以及大規(guī)模點云處理任務(wù)[5]。多視圖方法通過將三維點云投影到二維空間使用二維卷積方法完成三維數(shù)據(jù)的特征提取。多視圖方法在三維目標(biāo)檢測方面有著獨到的優(yōu)勢,但是在如三維目標(biāo)分割等應(yīng)用場景中效果不佳[6]。因為投影的過程造成了深度信息的損失。近年來,直接使用三維點云數(shù)據(jù)作為輸入利用最大池化方法處理三維點云逐漸成為了研究熱點。如PointNet[1]等可以利用最大池化方法完成三維點云特征的高層語義信息提取,然而使用最大池化操作的缺陷在于模型會喪失感知局部信息的能力。針對上述問題,研究者設(shè)計出了能夠描述局部特征的三維點云特征提取網(wǎng)絡(luò)如PointNet++[7],基于Octree的方法[8]、PointCNN[9]等。這些方法大都按照:分層、局部特征的提取、全局特征的提取、特征聚合等步驟處理點云信息。其中,為了構(gòu)建全局關(guān)系往往需要對點云進(jìn)行分層,分層的過程又可能會引入新的信息損失。比如文獻(xiàn)[10]中的分層網(wǎng)絡(luò)會將三維點云切割的過細(xì),產(chǎn)生難以利用的點云碎片。在一些應(yīng)用中,直接結(jié)合三維點云的局部與全局信息可能起到更好的特征處理效果。
自然語言中處理上下文關(guān)系的一些方法可以為三維點云的處理提供參考。自然語言處理通常利用循環(huán)卷積網(wǎng)絡(luò)對上下文的信息進(jìn)行抽取,解決局部與全局信息的整合問題。但是循環(huán)卷積網(wǎng)絡(luò)的基本結(jié)構(gòu)是一個遞歸模型。遞歸模型一般難以實現(xiàn)并行化并且循環(huán)卷積網(wǎng)絡(luò)對全局信息的感知相對較弱,要逐步遞歸才能獲得全局信息,一般要使用雙向循環(huán)卷積網(wǎng)絡(luò)。卷積網(wǎng)絡(luò)只能獲取局部信息,需要通過層疊來增大感受野。文獻(xiàn)[11]提出了僅依賴注意力機制即可提取文本的全局信息的方法。筆者認(rèn)為利用注意力機制同樣能夠在三維點云上獲取全局信息。不同于直接構(gòu)造特征提取層的方法,文中基本的思路是構(gòu)建如下編碼方案:
yt=f(xt,A,B)
其中,xt∈X表示原始點云數(shù)據(jù),yt表示編碼后的點云數(shù)據(jù),A,B表示兩個序列矩陣。若取A=B=X,則得到結(jié)果yt=f(xt,X,X)。yt為xt與全局X點云數(shù)據(jù)交互后的編碼結(jié)果,這個結(jié)果既包含本地信息又包含全局信息,提取特征的問題轉(zhuǎn)化成為確定編碼函數(shù)f的問題。
本節(jié)結(jié)合注意力機制的基本概念介紹在點云中應(yīng)用注意力機制的方法。針對最大池化層的缺陷,本節(jié)從理論上分析了池化層與卷積層的異同,給出了一種替換池化層的解決方案。
注意力機制的一般化定義如式(1)所示。
(1)
其中,Q∈Rn×dk,K∈Rm×dk,V∈Rm×dv。
不妨取qt∈Q,則對單個輸入向量qt求得的編碼結(jié)果可以表示為:
(2)
在Attention機制基礎(chǔ)之上,谷歌提出的Multi-Head Attention機制用于進(jìn)一步提升模型的編碼能力[11]。文中使用的注意力機制模型主要基于Multi-Head Attention。相比基礎(chǔ)的模型,Multi-Head Attention機制有兩點不同。一是將Q,K,V經(jīng)矩陣參數(shù)進(jìn)行映射,再送入Attention模型;二是將原始輸入進(jìn)行多次不共享參數(shù)的Attention操作,輸出結(jié)果拼接。這兩點改進(jìn)能提升模型的描述能力。具體的模型如下所示:
headi=Attention(QWiQ,KWiK,VWiV)
(3)
最終輸出的特征表示為:
MultiHead(Q,K,V)=Concat(head1,…,headh)
注意力機制在點云數(shù)據(jù)與文本數(shù)據(jù)方面的應(yīng)用密切相關(guān)又存在不同。應(yīng)用于自然語言領(lǐng)域的注意力機制模型通常由一組編碼器與解碼器構(gòu)成。編碼器負(fù)責(zé)構(gòu)建上下文關(guān)系,對詞句進(jìn)行映射,形成特征;解碼器負(fù)責(zé)解釋特征,對語義信息進(jìn)行還原。文中應(yīng)用注意力機制的主要目的是通過編碼功能實現(xiàn)局部信息與全局信息的聚合,避免使用卷積堆疊逐層增加感受野的方法,進(jìn)而繞過點云層次劃分問題。所以文中主要利用注意力機制的編碼部分,通過編碼即可得到可用于點云分類的特征向量。
文中基于Multi-Head Attention機制對點云進(jìn)行編碼,需要在序列內(nèi)部應(yīng)用Attention,尋找序列內(nèi)部的聯(lián)系綜合局部與全局信息。為實現(xiàn)這一目的,文中利用自注意力機制(Self Attention)[3]實現(xiàn)模型。所謂的自注意力機制就是將式(1)中的輸入Q,K,V設(shè)為同一矩陣X。具體的模型如下所示:
Y=MultiHead(X,X,X)
(4)
其中,X為三維點云集合,Y為對點云的編碼結(jié)果。
對某一點云xt∈X而言,其編碼過程如式(5)所示:
(5)
容易觀察到每次對xt進(jìn)行編碼的過程中,其他的點云也作為變量,影響到xt的輸入結(jié)果,得到的編碼結(jié)果既蘊含本地信息又包括全局信息。直接使用點云作為輸入提取到的信息僅包含點特征,而點特征的描述能力較弱,難以囊括鄰近的幾何信息。為了更好地獲取局部幾何信息,文中參照邊緣卷積[12]的概念對點云輸入重新進(jìn)行構(gòu)造。記原始的點云集合為X,xt∈X,記xt的最近鄰為xtn。xt的最近鄰向量為(xt,xtn)。輸入向量qt記為qt=(xt,xtn)。這樣做是為注意力機制提供了一個直觀的可解釋的作用機制。qt的編碼結(jié)果可以視作其余向量在輸入空間中的線性組合。按上述方法構(gòu)造出的最近鄰向量qt完全可以用于重新生成原始的點云數(shù)據(jù)xt。這意味著輸入向量構(gòu)造方案不會破壞原始三維點云的信息。
三維點云難以應(yīng)用卷積的一個主要原因在于點云的排列不變性。觀察注意力機制公式(3),在該式中如果將K,V按行打亂順序,那么經(jīng)過Attention模塊編碼得到的結(jié)果還是一樣的。這在自然語言處理中會造成詞序混亂的問題,所以在用注意力機制處理自然語言時通常還需要增加一個標(biāo)注位置信息的模塊。然而這個問題在三維點云的處理中反而成為一個優(yōu)點,因為三維點云的輸入本身是無序的,若K,V的順序?qū)幋a結(jié)果不造成影響,那么說明這種編碼方案可以適應(yīng)三維點云的序列無關(guān)性,Attention模塊起到類似對稱函數(shù)的作用。
PointNet中最關(guān)鍵的點是最大池化方法能夠描述三維點云的分布,并且池化層大小與模型的性能密切相關(guān)。然而最大池化操作的缺點在于局部信息的損失較大。雖然增加池化層的寬度可以逼近三維點云的空間分布,但是真實的應(yīng)用場景中不可能無限制增加池化層寬度。局部信息的損失同樣會為感知三維點云的精細(xì)結(jié)構(gòu)造成困難。注意到最大池化操作是對點云空間的一種降采樣。使用其他的采樣方法有可能也能夠達(dá)成相同的效果。
文獻(xiàn)[13]指出池化層可以用卷積的形式進(jìn)行表示,這表明在處理點云數(shù)據(jù)時同樣可能用卷積方法對池化層進(jìn)行替換。
為了闡明兩者的區(qū)別與聯(lián)系,下面對二者進(jìn)行對比。設(shè)f是原始數(shù)據(jù)經(jīng)過一系列網(wǎng)絡(luò)處理后得到的特征表示(feature map)。f可以用一個三維矩陣W×H×N表示。其中W、H、N分別為feature map的寬度、高度以及特征的通道數(shù)。在這個三維結(jié)構(gòu)下,池化操作可以看成是一個用p-norm當(dāng)作激活函數(shù)的卷積操作。當(dāng)p趨向于正無窮時,就是最大池化操作。卷積式的池化層的公式表示如下:
(6)
其中,k為池化層大小,r為步長,g(h,w,i,j,u) = (r·i+h,r·j+w,u)為f到池化層的映射函數(shù)。
卷積層的公式定義如下:
其中,θ為卷積權(quán)重,σ為激活函數(shù),o∈[1,M]為輸出通道。
通過觀察上式不難發(fā)現(xiàn),池化層可以視作一個特征級別的卷積。在式(7)中,當(dāng)卷積步長取值非常大時,局部信息對卷積結(jié)果的影響相對較小[13]。此時卷積層對全局特征的提取性能較好。在目標(biāo)分類的實驗中同樣證明了這一點:當(dāng)取較大卷積核的步長時分類結(jié)果更好。
文中在ModelNet40數(shù)據(jù)集[14]上評估模型的三維形狀分類性能。所有的點云數(shù)據(jù)來自對40個類別,共計12 311個CAD模型的采樣。實驗取其中9 843個模型用于訓(xùn)練,使用2 468個進(jìn)行測試。對每個訓(xùn)練/測試模型實例抽取2 048個采樣點。
圖1所示為AttentionPointNet的基本結(jié)構(gòu)。
圖1 AttentionPointNet模型
其中最基本的結(jié)構(gòu)為Attention Block。文中的Attention Block模塊(見圖2)可以分為三個部分。
第一部分主要完成輸入向量Q,K,V的線性映射。實際的模型采用自注意力機制,所以Q,K,V的取值均設(shè)置為三維點云的最近鄰向量矩陣X。實驗中采用長度為64的全連接層實現(xiàn)映射工作。為避免混淆,方便概念解釋,下文仍使用Q,K,V代指Attention Block中的三部分輸入(query,key,value)。模型中的第二部分為Multi-Head Attention模塊。這一模塊主要完成特征的融合工作。Q構(gòu)成原始輸入,K構(gòu)成特征向量空間,V作為欲表征的結(jié)果,訓(xùn)練head=Attention(QWQ,KWK,VWV)中的WQ、WK、WV等參數(shù)矩陣。第三部分為一個殘差模塊。該模塊將輸入與V的值連接可以提升模型的分類性能,提高模型的分類準(zhǔn)確率。
圖2 Attention Block結(jié)構(gòu)
AttentionPointNet采用Tensorflow[15]構(gòu)建。整體的結(jié)構(gòu)包括一層卷積層、五個Attention Block模塊、一層最大池化層和多個三層連接層。第一層的卷積層卷積核大小為(1,1,64)。五個Attention Block的通道維度大小分別為64、64、64、128、1 024。最大池化層寬度為1 024。使用Adam(adaptive moment estimation)算法作為優(yōu)化算法,初始學(xué)習(xí)率為0.001。每20輪學(xué)習(xí)率減半。學(xué)習(xí)輪數(shù)300輪。表1為不同模型在ModelNet40數(shù)據(jù)集上的分類結(jié)果。
表1 ModelNet40數(shù)據(jù)集分類結(jié)果
現(xiàn)有的大多數(shù)基于PointNet的模型依賴于最大池化層對空間分布的擬合。文中提出的Attention PointNet對每個三維點云進(jìn)行編碼,編碼的信息中包含了其他點的空間分布信息。對于三維點云的分類這一問題,除了使用最大池化的方法,其他的降采樣方法理應(yīng)能取得類似的結(jié)果,比如經(jīng)過特殊設(shè)計的卷積方法。在ModelNet40數(shù)據(jù)集上,文中分別改變卷積的步長,測試實驗性能用于尋找最大池化層的替換品。
實驗中取采樣點個數(shù)為256,batchsize設(shè)為128,訓(xùn)練輪數(shù)設(shè)為300,對Attention Block5的輸出結(jié)果(N×1 024)進(jìn)行卷積。輸出的通道維度為128。表2為用不同步長時替代最大池化層時,在ModelNet40數(shù)據(jù)集上的結(jié)果。
表2 不同卷積核在ModelNet40數(shù)據(jù)集上的分類結(jié)果
實驗的結(jié)果同樣證明在三維點云數(shù)據(jù)處理中,池化層可以由卷積層進(jìn)行代替,使用較大的步長能更好地提取點云的全局特征,取得更優(yōu)的分類效果。并且當(dāng)步長的取值超過一定閾值,泛化性能基本保持不變。
針對三維點云的全局與局部信息整合問題,提出了利用注意力機制對三維信息進(jìn)行整合的方法。目前利用深度學(xué)習(xí)技術(shù)處理三維點云的主流方法大都依賴最大池化層的表征能力。結(jié)合注意力機制,使用大步長的卷積方法對點云的高層次信息進(jìn)行抽取,取得了與使用最大池化方法類似的結(jié)果。這表明除了池化方法,卷積方法也具備三維點云的高層信息提取的潛力。使用注意力機制的好處是能夠一步到位捕捉到三維點云局部與全局的聯(lián)系。但是相比長程的、全局性的依賴,在三維點云處理中有部分問題比如點云的分割問題,更加依賴于局部結(jié)構(gòu)。在這種情況下,文中使用的最近鄰向量構(gòu)造方法就不太合適。而使用K近鄰描述局部特征可能是更為合理的方案。