華順剛,李春澤
(大連理工大學(xué)機(jī)械工程學(xué)院,遼寧大連 116024)
作為數(shù)字化制造技術(shù)的基礎(chǔ),三維模型是重要的設(shè)計(jì)資源。研究和統(tǒng)計(jì)分析表明,通過(guò)重用三維模型,可有效降低產(chǎn)品的設(shè)計(jì)成本,加速產(chǎn)品再創(chuàng)新[1]。實(shí)現(xiàn)資源重用的三維模型檢索技術(shù)成為了計(jì)算機(jī)視覺(jué)、計(jì)算機(jī)圖形學(xué)領(lǐng)域的研究熱點(diǎn)[2]。其中,三維模型的識(shí)別與相似性比較是研究重點(diǎn)。目前主流的基于深度學(xué)習(xí)的三維模型識(shí)別方法主要有基于體素化、基于多視角及基于點(diǎn)云這3類方法。
(1)基于體素化(Volumetric)法?;隗w素化法通過(guò)將三維模型表征為空間中的體素,然后對(duì)體素化模型進(jìn)行三維卷積處理來(lái)識(shí)別模型[3]。體素化特征處理手段需要將三維模型變換成一個(gè)個(gè)小的三維特征塊,若分隔成較大的三維特征塊,則計(jì)算耗時(shí)短,但特征表達(dá)精度不足。若分割成較小三維特征塊,雖然特征表達(dá)精度可以滿足需求,但是后期處理的計(jì)算復(fù)雜度較高。因此這種處理手段存在難以平橫計(jì)算復(fù)雜度與精度的問(wèn)題,在實(shí)際應(yīng)用中受限。
(2)基于多視角(Multi-View)法。多視角法使用對(duì)三維模型的多視角采樣獲得的二維圖片來(lái)表征三維物體,此方法將傳統(tǒng)CNN(卷積神經(jīng)網(wǎng)絡(luò))應(yīng)用于多張二維視角的圖片來(lái)表征三維模型[4]。這種方法相比于體素化方法,可以降低計(jì)算復(fù)雜度,提高識(shí)別效率。然而該方法受制于視角數(shù)量,無(wú)法感知三維模型的內(nèi)部信息,因此對(duì)于特定形狀的三維模型識(shí)別精度較差。
(3)基于點(diǎn)云(Point Clouds)法。通過(guò)在三維模型的表面采樣出三維點(diǎn)云,然后用深度學(xué)習(xí)網(wǎng)絡(luò)來(lái)識(shí)別三維模型,這種基于點(diǎn)云采樣方式的采樣復(fù)雜度相比于體素化方法的計(jì)算復(fù)雜度較低,而又不受多視角方法的視角數(shù)量限制,同時(shí)可以感知到模型的內(nèi)側(cè)表面信息,在深度神經(jīng)網(wǎng)絡(luò)建模中,可以直接將三維點(diǎn)云輸入網(wǎng)絡(luò)進(jìn)行建模識(shí)別,而無(wú)需進(jìn)行特征預(yù)處理,因此成為了一種理想的三維模型的識(shí)別方法。其中PointNet[5]是相關(guān)工作的先驅(qū),它直接處理三維點(diǎn)云數(shù)據(jù),利用三維變換和特征轉(zhuǎn)換實(shí)現(xiàn)了點(diǎn)云數(shù)據(jù)的識(shí)別,PointNet++[6]是PointNet 的改進(jìn)版本,它將點(diǎn)云劃分局部來(lái)識(shí)別。PointCNN[7]提出了直接在三維點(diǎn)云數(shù)據(jù)上進(jìn)行卷積操作,PointConv[8]可以高效地對(duì)非均勻采樣的3D 點(diǎn)云數(shù)據(jù)進(jìn)行卷積操作,該方法在多個(gè)數(shù)據(jù)集上實(shí)現(xiàn)了優(yōu)秀的性能。因深度學(xué)習(xí)方法的可適應(yīng)能力高,可以處理復(fù)雜的三維模型的點(diǎn)云,成為了目前的相關(guān)研究熱點(diǎn)。
本文將構(gòu)建多種基于深度學(xué)習(xí)技術(shù)的點(diǎn)云模型識(shí)別方法,對(duì)各種方法進(jìn)行優(yōu)劣分析,并將這些方法應(yīng)用于三維模型的識(shí)別中。同時(shí)將深度神經(jīng)網(wǎng)絡(luò)中的抽象特征用于模型相似度計(jì)算中。本文的研究技術(shù)路線如圖1所示。
圖1 研究路線
首先在三維模型的表面采樣出三維點(diǎn)云,然后利用有標(biāo)簽的三維點(diǎn)云數(shù)據(jù)訓(xùn)練一個(gè)深度神經(jīng)網(wǎng)絡(luò)模型,將網(wǎng)絡(luò)參數(shù)保存起來(lái),再用訓(xùn)練好的網(wǎng)絡(luò)來(lái)對(duì)新的三維點(diǎn)云模型進(jìn)行識(shí)別,同時(shí)可利用網(wǎng)絡(luò)提取的的特征來(lái)計(jì)算兩個(gè)模型的形狀相似度。使用QT和C++語(yǔ)言編程實(shí)現(xiàn)了三維模型識(shí)別與模型相似度計(jì)算來(lái)驗(yàn)證模型的應(yīng)用可行性。該工具在輸入未知三維模型時(shí)可以識(shí)別模型的分類;輸入不同的三維模型時(shí),則可以計(jì)算出它們的形狀相似度。
PointNet 是一個(gè)點(diǎn)云深度學(xué)習(xí)識(shí)別網(wǎng)絡(luò),它采用了兩次STN(空間變換),第一次是對(duì)空間中點(diǎn)云進(jìn)行調(diào)整,直觀上理解是旋轉(zhuǎn)出一個(gè)更有利于分類或分割的角度,比如把物體轉(zhuǎn)到正面;第二次是對(duì)提取出的64維特征進(jìn)行對(duì)齊,即在特征層面對(duì)點(diǎn)云進(jìn)行變換,然后采用MaxPooling(最大化池化)解決點(diǎn)云數(shù)據(jù)的無(wú)序性問(wèn)題。網(wǎng)絡(luò)對(duì)每個(gè)點(diǎn)進(jìn)行了一定程度的特征提取之后,MaxPooling 可以對(duì)點(diǎn)云的整體提取出全局特征。
PointNet++是基于PoinNet 的改進(jìn)版本,核心就是提出了多層次特征提取結(jié)構(gòu)。具體來(lái)說(shuō)就是先在輸入點(diǎn)集中選擇一些點(diǎn)作為中心點(diǎn),然后圍繞每個(gè)中心點(diǎn)選擇周圍的點(diǎn)組成一個(gè)區(qū)域,之后每個(gè)區(qū)域作為PointNet的一個(gè)輸入樣本,得到一組特征,這個(gè)特征就是這個(gè)區(qū)域的特征。之后中心點(diǎn)不變,擴(kuò)大區(qū)域,把上一步得到的那些特征作為輸入送入PointNet,以此類推。這個(gè)過(guò)程就是不斷的提取局部特征,然后擴(kuò)大局部范圍,最后得到一組全局的特征,然后進(jìn)行分類PointNet++還采用多尺度的方法解決樣本不均勻的問(wèn)題,在樣本稀疏時(shí)模型更有魯棒性。
PointCNN 提出了一種稱為X-變換的方法(X-Conv)。X-變換從輸入點(diǎn)學(xué)習(xí)到的一組權(quán)值X,這組權(quán)值可以對(duì)各點(diǎn)相關(guān)聯(lián)的特征進(jìn)行重新加權(quán)和重排列。X-變換可以實(shí)現(xiàn)“隨機(jī)應(yīng)變”,即當(dāng)輸入點(diǎn)的順序變化時(shí),X-變換能夠相應(yīng)地變化,使加權(quán)和重排列之后的特征近似不變。輸入特征在經(jīng)過(guò)X-變換的處理之后能夠?qū)崿F(xiàn)計(jì)算結(jié)果與輸入點(diǎn)順序無(wú)關(guān),同時(shí)也編碼了輸入點(diǎn)形狀信息的歸一化特征。在經(jīng)過(guò)X-變換之后的特征上進(jìn)行卷積能夠極大提高卷積核的利用率,從而大大提高卷積操作在無(wú)序數(shù)據(jù)上提取特征的能力。
PointConv 可以在點(diǎn)云上構(gòu)建深度卷積網(wǎng)絡(luò)。它將卷積核看作3D點(diǎn)局部坐標(biāo)的非線性函數(shù),該函數(shù)由權(quán)重和概率密度函數(shù)組成。對(duì)于給定點(diǎn),利用多層感知器學(xué)習(xí)權(quán)重函數(shù),通過(guò)高斯核密度估計(jì)學(xué)習(xí)該概率密度函數(shù)。為了高效地計(jì)算權(quán)重函數(shù),它提出了一種新型計(jì)算方法,使網(wǎng)絡(luò)規(guī)模顯著擴(kuò)大,性能顯著提高。學(xué)習(xí)到的卷積核可用于計(jì)算3D空間中任何點(diǎn)集上的平移不變卷積和置換不變卷積。
根據(jù)本文的研究路線(圖1),進(jìn)行三維模型識(shí)別主要分為以下幾個(gè)步驟:點(diǎn)云掃描采樣,構(gòu)建神經(jīng)網(wǎng)絡(luò),調(diào)用網(wǎng)絡(luò)識(shí)別模型。
點(diǎn)云掃描采樣是指對(duì)三維模型的表面進(jìn)行采樣,三維模型由網(wǎng)格構(gòu)成,所含有的點(diǎn)數(shù)量不多,尤其在三維模型存在平面或者是簡(jiǎn)單立方體的情況下點(diǎn)的數(shù)量更少。所以需要利用PCL[9](Point Cloud Library)庫(kù)的Pcl_mesh_sampling 來(lái)提取更多點(diǎn),因此本文先調(diào)用VTK[10](Visualization ToolKit)讀取模型,設(shè)置需要的點(diǎn)數(shù),以及采樣距離等參數(shù),然后在三維模型表面采樣出固定點(diǎn)數(shù)的三維點(diǎn)生成點(diǎn)云。掃描采樣結(jié)果如圖2所示。
圖2 點(diǎn)云采樣
本文的軟件環(huán)境主要基于TensorFlow[11]平臺(tái)和Python 語(yǔ)言,硬件環(huán)境配置為Quad-Core Intel Core i7+16g,訓(xùn)練集采用普林斯頓大學(xué)Modelnet40[12],它包含約40 個(gè)對(duì)象類別(如飛機(jī)、汽車、家具等),用三角形網(wǎng)格表示的12 311個(gè)三維模型。每個(gè)模型采樣出2 048個(gè)點(diǎn),數(shù)據(jù)為訓(xùn)練集和測(cè)試集,訓(xùn)練集有9 843 個(gè)模型,測(cè)試集有2 468 個(gè)模型。硬件環(huán)境配置為GTX1060+Intel 酷睿i5 8400+16g,內(nèi)存軟件配置為Win10+TensorFlow1.10+Python3.7+CUDA9.0+cuDNN7.3,用時(shí)9 h訓(xùn)練完成,訓(xùn)練集準(zhǔn)確度達(dá)到了97%左右,測(cè)試集準(zhǔn)確度為85.3%左右。用TensorFlow平臺(tái)和Python編程語(yǔ)言搭建了PointNet++神經(jīng)網(wǎng)絡(luò),軟件配置Ubuntu16.0+TensorFlow1.14+Python3.5+CUDA9.0+cuDNN7.3,訓(xùn)練集采用普林斯頓大學(xué)Modelnet40,迭代了8k次后,在測(cè)試集上準(zhǔn)確率達(dá)到87.2%。用TensorFlow和Python語(yǔ)言搭建了PointCNN網(wǎng)絡(luò),訓(xùn)練集采用普林斯頓大學(xué)Modelnet40,軟件環(huán)境為MacOS+TensorFlow1.13+Python3.7,迭代26k次后。在測(cè)試數(shù)據(jù)集上的準(zhǔn)確率達(dá)到了91.1%,在Py-Torch[13]平臺(tái)用Python語(yǔ)言搭建了PointConv網(wǎng)絡(luò),軟件配置為MacOS+PyTorch+Python3.7,訓(xùn)練集采用普林斯頓大學(xué)Modelnet40,迭代12k次后。在測(cè)試數(shù)據(jù)集上的準(zhǔn)確度達(dá)到了92.1%。
基于以上設(shè)置,對(duì)上述方法的準(zhǔn)確率、參數(shù)量、迭代次數(shù)進(jìn)行了對(duì)比。其中PointConv的識(shí)別準(zhǔn)確率最高,但參數(shù)量較大,PointCNN的參數(shù)量最小,也能較快的收斂。PointNet的參數(shù)量最多,收斂也較慢。PoinNet++的收斂速度最快但是準(zhǔn)確率一般。表1所示為各種點(diǎn)云識(shí)別模型的性能對(duì)比。
表1 基于深度學(xué)習(xí)的點(diǎn)云識(shí)別模型對(duì)比
本文使用QT[14]和C++語(yǔ)言編程實(shí)現(xiàn)了三維模型識(shí)別工具,它先將三維模型采樣出固定點(diǎn)數(shù)的點(diǎn)云,然后輸入到訓(xùn)練好的深度學(xué)習(xí)網(wǎng)絡(luò)中,得到該三維模型的預(yù)測(cè)分類。該工具在輸入未知三維模型時(shí)可以自動(dòng)識(shí)別模型的分類,當(dāng)輸入兩個(gè)三維模型時(shí)可以計(jì)算出它們的形狀相似度。如圖3所示為軟件界面及識(shí)別的實(shí)例,可見(jiàn)軟件成功識(shí)別了2個(gè)杯子模型并計(jì)算出了它們的相似度。
圖3 三維模型的識(shí)別
模型的特征是一組可以表征三維模型的形狀特點(diǎn)的信息,從訓(xùn)練好的網(wǎng)絡(luò)中可以提取出三維模型的特征,然后基于提取的特征計(jì)算兩個(gè)模型的相似度。分別運(yùn)用訓(xùn)練好的PointNet、PointNet++、PointCNN、PointConv 網(wǎng)絡(luò)提取三維模型的特征。本文先將點(diǎn)云輸入到已經(jīng)訓(xùn)練完成的深度神經(jīng)網(wǎng)絡(luò)中,提取出深度神經(jīng)網(wǎng)絡(luò)的抽象特征層(輸入到分類器之前的一層)。因網(wǎng)絡(luò)結(jié)構(gòu)不同,本文從PointNet 和PointNet++及PointConv提取了1 024維的數(shù)據(jù),PointCNN提取了256維數(shù)據(jù),每一維數(shù)據(jù)的范圍在0~1之間,因?yàn)檫@些特征具有識(shí)別能力的網(wǎng)絡(luò)的輸出特征,所以這些抽象出的特征信息表征了三維模型的形狀特點(diǎn)。為了驗(yàn)證特征的相似性,本文使用TensorBoard 的t-SNE 將提取出的高維度的特征向量投影到二維空間,圖4所示為Modelnet40測(cè)試集輸入PointNet網(wǎng)絡(luò)后特征的投影圖,可見(jiàn)同一類型的三維模型投影在二維平面內(nèi)的距離也是相近的。
圖4 PointNet中高維特征的t-SNE低維投影
相似度是衡量?jī)蓚€(gè)三維模型結(jié)構(gòu)形狀相似程度的一個(gè)值,通常用百分?jǐn)?shù)來(lái)表示,利用提取出的抽象特征可以計(jì)算三維模型的相似度。特征的相似性度量方法主要有皮爾遜相關(guān)系數(shù)、歐式距離和余弦相似度等,一個(gè)好的三維模型相似性度量方法就是應(yīng)該和人的視覺(jué)觀察一致。經(jīng)試驗(yàn)其中皮爾遜相關(guān)系數(shù)效果最好,它是衡量隨機(jī)變量X與Y相關(guān)程度的一種方法,相關(guān)系數(shù)的取值范圍是[-1,1]。相關(guān)系數(shù)的絕對(duì)值越大,則表明X與Y相關(guān)度越高。當(dāng)X與Y線性相關(guān)時(shí),相關(guān)系數(shù)取值為1(正線性相關(guān))或-1(負(fù)線性相關(guān)),它的計(jì)算公式如下:
式中:E(X)、E(Y)為變量的期望;D(X)、D(Y)為變量的方差。
使用該公式計(jì)算出兩個(gè)模型提取出的特征的相關(guān)系數(shù),用來(lái)表征模型的形狀相似度。用一個(gè)被檢索模型(杯子)分別與其他模型計(jì)算相似度,圖5所示為基于各種網(wǎng)絡(luò)提取的特征用皮爾遜相關(guān)性計(jì)算相似度的結(jié)果,圖片下方為皮爾遜相關(guān)系數(shù)。由圖可知,形狀相似的模型計(jì)算出形似度也相應(yīng)較高。證明基于深度學(xué)習(xí)提取特征的方法計(jì)算的相似度與實(shí)際情況具有較高的吻合度,有一定的應(yīng)用價(jià)值。
圖5 采用不同神經(jīng)網(wǎng)絡(luò)的相似度計(jì)算結(jié)果比較
本文分析了多種目前最先進(jìn)的點(diǎn)云數(shù)據(jù)的深度學(xué)習(xí)識(shí)別技術(shù),并將其應(yīng)用于三維模型的識(shí)別中。同時(shí)提出可利用深度神經(jīng)網(wǎng)絡(luò)的抽象特征來(lái)進(jìn)行模型的相似性計(jì)算。經(jīng)過(guò)仿真實(shí)驗(yàn)證明深度學(xué)習(xí)方法可以用于三維模型的建模識(shí)別中,且這種識(shí)別方法可以感知三維模型的內(nèi)部信息。同時(shí),將深度神經(jīng)網(wǎng)絡(luò)的輸出特征作為三維模型的形狀特征,應(yīng)用到三維模型檢索的相似度計(jì)算中來(lái),彌補(bǔ)了一些底層特征與上層語(yǔ)義之間的鴻溝,可以有效地計(jì)算模型的相似度,在三維模型的檢索中具有一定的應(yīng)用價(jià)值。