盧林鵬,關(guān)柏良,林淑金
(1.中山大學(xué)計(jì)算機(jī)學(xué)院,廣東 廣州 510006;2.中山大學(xué)傳播與設(shè)計(jì)學(xué)院,廣東 廣州 510006)
根據(jù)離散點(diǎn)云重建出符合原始實(shí)物空間幾何結(jié)構(gòu)的網(wǎng)格,在計(jì)算機(jī)輔助設(shè)計(jì)、醫(yī)學(xué)仿真、城市重建和逆向工程等領(lǐng)域有著重要的應(yīng)用[1]。然而,不管采用何種獲取設(shè)備和數(shù)字化方式,點(diǎn)云數(shù)據(jù)中固有的噪聲、密度不均引起的數(shù)據(jù)缺失,以及法向量缺失或錯(cuò)誤等問題都會(huì)導(dǎo)致最終重建的網(wǎng)格質(zhì)量不高。
傳統(tǒng)的網(wǎng)格重建方法往往依賴數(shù)據(jù)的局部幾何結(jié)構(gòu),通常分成顯示連接點(diǎn)[2 - 4]的顯式重建方法和運(yùn)用隱式函數(shù)逼近曲面[5,6]的隱式重建方法。前者容易受到點(diǎn)云數(shù)據(jù)固有的噪聲和密度影響,難以直接應(yīng)用于實(shí)際掃描中所獲取的質(zhì)量不高的點(diǎn)云數(shù)據(jù)。而隱式重建則能夠局部近似表示模型曲面,因此具有更好的抗噪性和魯棒性。然而,這類方法對于函數(shù)的參數(shù)設(shè)置非常敏感,需要人工調(diào)整參數(shù)以應(yīng)對不同的點(diǎn)云數(shù)據(jù)[7]。對于法向量錯(cuò)誤、局部密度稀疏和薄片結(jié)構(gòu)導(dǎo)致的點(diǎn)云粘連,隱式重建方法仍然難以處理,得出的網(wǎng)格模型可能會(huì)出現(xiàn)局部斷裂或者錯(cuò)誤外擴(kuò)。
隨著深度神經(jīng)網(wǎng)絡(luò)DNN(Deep Neural Network)[8,9]的發(fā)展,三維深度學(xué)習(xí)技術(shù)也隨之迅速發(fā)展,涌現(xiàn)出許多用于三維模型分析的方法。神經(jīng)網(wǎng)絡(luò)具有權(quán)值共享的特性,因此利用卷積神經(jīng)網(wǎng)絡(luò)提取模型局部特征,并對整個(gè)網(wǎng)絡(luò)進(jìn)行全局優(yōu)化,既能充分利用模型的局部幾何特征信息,也能通過全局優(yōu)化解決局部數(shù)據(jù)質(zhì)量不佳的問題。其中,以無結(jié)構(gòu)點(diǎn)云作為輸入數(shù)據(jù),基于點(diǎn)云的深度神經(jīng)網(wǎng)絡(luò)DNN直接對點(diǎn)云的空間信息進(jìn)行學(xué)習(xí),在點(diǎn)云的分類和分割任務(wù)中表現(xiàn)良好。同時(shí),基于三維網(wǎng)格中邊的DNN[10]也能夠直接使用網(wǎng)格中邊的特征進(jìn)行運(yùn)算,在網(wǎng)格分類、分割等任務(wù)中均有良好的表現(xiàn)。此外,還有許多利用DNN進(jìn)行網(wǎng)格重建的探索[11 - 13],包括使用DNN估計(jì)點(diǎn)云法向量[11],提高點(diǎn)云質(zhì)量[12,13]等。這些方法利用卷積對三維數(shù)據(jù)的局部空間進(jìn)行關(guān)聯(lián),實(shí)現(xiàn)整個(gè)數(shù)據(jù)信息的共享和聚合。
實(shí)際上,點(diǎn)云三維重建即是利用算法提取離散的空間信息并建立點(diǎn)與點(diǎn)之間的連接關(guān)系,從而得出網(wǎng)格模型。然而,點(diǎn)云質(zhì)量往往會(huì)影響最終重建的效果。與自然圖像相似,點(diǎn)云和網(wǎng)格具有獨(dú)特的分布性,而不是隨機(jī)的。因此,可以利用DNN強(qiáng)大的內(nèi)在屬性,獲得三維數(shù)據(jù)的自我相似性,進(jìn)而提高重建質(zhì)量。此外,重建任務(wù)中,原始點(diǎn)云和生成網(wǎng)格是相輔相成的,生成網(wǎng)格需要忠于原始點(diǎn)云來凸顯細(xì)節(jié),同時(shí)要具有抗噪性和魯棒性。因此,本文使用神經(jīng)網(wǎng)絡(luò)中的對抗神經(jīng)網(wǎng)絡(luò)(Adversarial Neural Network) 框架作為點(diǎn)云重建的網(wǎng)絡(luò)框架,該網(wǎng)絡(luò)通過對預(yù)測器和判別器進(jìn)行對抗式的訓(xùn)練,得出具有抗噪性且擁有原始點(diǎn)云細(xì)節(jié)的三維網(wǎng)格模型。
基于上述分析,本文提出一種面向點(diǎn)云三維重建的空間感知對抗神經(jīng)網(wǎng)絡(luò)。對于輸入的原始點(diǎn)云數(shù)據(jù),本文首先利用預(yù)測器提取包圍網(wǎng)格模型的邊特征來預(yù)測網(wǎng)格頂點(diǎn)的位移,根據(jù)位移進(jìn)行網(wǎng)格頂點(diǎn)坐標(biāo)的更新,生成新的網(wǎng)格模型,并對新的網(wǎng)格模型進(jìn)行采樣得到采樣點(diǎn)云數(shù)據(jù)。然后,利用判別器提取點(diǎn)云數(shù)據(jù)的特征,通過對高維特征的識別,對點(diǎn)云數(shù)據(jù)進(jìn)行打分(分?jǐn)?shù)接近0表示對應(yīng)的點(diǎn)云為采樣得到的點(diǎn)云)。最終,根據(jù)判別器的輸出計(jì)算損失,更新預(yù)測器和判別器的參數(shù),在進(jìn)行指定的迭代次數(shù)后,得到具有抗噪性且滿足原始點(diǎn)云細(xì)節(jié)的三維網(wǎng)格模型。實(shí)驗(yàn)結(jié)果表明,本文方法能夠重建出滿足點(diǎn)云空間信息的三維網(wǎng)格模型,同時(shí)能夠解決粗劣的點(diǎn)云數(shù)據(jù)引起的網(wǎng)格質(zhì)量問題。
傳統(tǒng)的網(wǎng)格重建方法主要包含2類:顯式重建方法和隱式重建方法。
顯式重建方法主要是基于Delaunay三角剖分的方法[2]。而在所有基于Delaunay的方法中crust方法[3]和Tight Cocone方法[4]是被研究最為廣泛的。然而由于基于Delaunay的方法是根據(jù)點(diǎn)云來估計(jì)曲面的局部連通性,從而進(jìn)行點(diǎn)云曲面重建的,所以該方法對點(diǎn)云質(zhì)量的要求較高。在點(diǎn)云稀疏、密度不均或含有噪聲時(shí),這類方法的效果較差。
隱式重建方法首先尋找一個(gè)近似于點(diǎn)云的場函數(shù)(Field Function) ,然后使用移動(dòng)立方體算法(Marching Cubes Algorithm)[14]來提取函數(shù)等值面。例如泊松曲面重建算法PSR(Poisson Surface Reconstruction)[5,6]通過解決帶法向量的點(diǎn)的泊松問題來重建曲面。然而這類方法對于點(diǎn)云質(zhì)量的要求較高,如果點(diǎn)云數(shù)據(jù)沒有正確的法向量或者較為稀疏甚至缺失的話,PSR往往會(huì)產(chǎn)生較差的結(jié)果。
與二維圖像不同,三維多邊形網(wǎng)格是不規(guī)則的,很難直接由神經(jīng)網(wǎng)絡(luò)生成。然而,目前仍有許多利用DNN進(jìn)行網(wǎng)格重建的探索,包括使用DNN估計(jì)法向量、提升點(diǎn)云質(zhì)量等。
Boulch等[11]首先提出了一個(gè)用于估計(jì)非結(jié)構(gòu)化點(diǎn)云的法向量的卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network),通過霍夫變換(Hough Transfer) 將非結(jié)構(gòu)化的點(diǎn)云轉(zhuǎn)換成類似于圖像的表示。Atzmon等[12]提出了PCNN(Point Convolutional Neural Networks),用于估計(jì)點(diǎn)云法向量信息,進(jìn)一步提高了法向量估計(jì)準(zhǔn)確度。通過這些方法只能得到點(diǎn)云的法向量,無法直接得到網(wǎng)格模型。此外,Williams等[13]提出了用于提高點(diǎn)云質(zhì)量的深幾何先驗(yàn)DGP(Deep Geometric Prior) 方法,通過該方法得到質(zhì)量較好的點(diǎn)云,然后采用傳統(tǒng)的方法進(jìn)行網(wǎng)格重建。然而這類方法對于質(zhì)量差的點(diǎn)云不能取得很好的效果,會(huì)出現(xiàn)孔洞和法向量估計(jì)錯(cuò)誤等問題。
除了使用基于學(xué)習(xí)的技術(shù)來估計(jì)非結(jié)構(gòu)化點(diǎn)云的法線和提升點(diǎn)云質(zhì)量,以重建曲面外,基于深度學(xué)習(xí)的方法也被用于直接生成網(wǎng)格曲面。Groueix等[15]提出了用于網(wǎng)格曲面生成的AtlasNet。AtlasNet通過學(xué)習(xí)點(diǎn)云數(shù)據(jù)特征得到一組參數(shù)化的2D正方形表示,然后通過拼接這些正方形得到所求三維模型。然而由于這些正方形無法完美地重疊,所以生成的網(wǎng)格不是水密的。因此,這類方法生成的網(wǎng)格無法直接用于對網(wǎng)格質(zhì)量要求高的應(yīng)用中。
這類網(wǎng)絡(luò)模型最早源自于Goodfellow 等[16]提出的生成對抗網(wǎng)絡(luò)GAN(Generative Adversarial Network) 模型。GAN模型由生成器G和判別器D組成。生成器G的目的是生成樣本去欺騙判別器D,而判別器用于區(qū)分真實(shí)樣本和生成樣本,通過對抗訓(xùn)練來不斷優(yōu)化自身,最終達(dá)到一個(gè)納什均衡狀態(tài)。然而GAN模型本身存在一些缺陷,為了彌補(bǔ)這些缺陷,許多研究者進(jìn)行了相關(guān)研究。為了使GAN生成的數(shù)據(jù)可控,Mirza等[17]提出了條件式GAN CGAN(Conditional GAN)。 CGAN 在生成器G和判別器D的輸入上分別增加了一個(gè)條件信號作為輔助輸入,以實(shí)現(xiàn)對生成數(shù)據(jù)的控制。Mao等[18]提出的最小二乘GAN LSGAN(Least Squares GAN) 則進(jìn)一步解決了GAN訓(xùn)練不穩(wěn)定且生成樣本質(zhì)量不高的問題。總的來說,GAN 本身是一個(gè)有包容性的框架,它可以和許多深度學(xué)習(xí)模型結(jié)合起來,解決傳統(tǒng)機(jī)器學(xué)習(xí)模型所不能解決的問題[19]。
為了解決點(diǎn)云質(zhì)量不高帶來的網(wǎng)格重建問題,本文提出一種基于對抗神經(jīng)網(wǎng)絡(luò)的點(diǎn)云三維重建方法。 該方法以對抗神經(jīng)網(wǎng)絡(luò)為框架,通過多次迭代優(yōu)化,最終得出滿足點(diǎn)云形狀的三維網(wǎng)格模型。對于每一次迭代,預(yù)測器首先對前一次迭代的網(wǎng)格模型頂點(diǎn)位置進(jìn)行偏移估計(jì),獲得本次迭代的網(wǎng)格模型; 接著,判別器分別對本次迭代網(wǎng)格模型表面采樣的點(diǎn)集和原始點(diǎn)云數(shù)據(jù)進(jìn)行空間特征提取; 最后,根據(jù)點(diǎn)云和點(diǎn)集之間的坐標(biāo)和空間特征計(jì)算損失,并更新網(wǎng)絡(luò)參數(shù)。
對于給定點(diǎn)云數(shù)據(jù),本文方法先生成初始網(wǎng)格,然后經(jīng)過多次迭代調(diào)整網(wǎng)格模型,最終得到滿足原始點(diǎn)云數(shù)據(jù)的三維網(wǎng)格模型。 本文提出的空間感知對抗神經(jīng)網(wǎng)絡(luò)主要包括3個(gè)模塊,分別是預(yù)測器、判別器和損失計(jì)算模塊。 預(yù)測器是網(wǎng)格模型調(diào)整模塊,其首先接收前一次迭代得到的封閉網(wǎng)格模型作為輸入;然后通過卷積操作提取邊特征,預(yù)測邊的偏移量,從而更新對應(yīng)頂點(diǎn)的位置,得到網(wǎng)格模型;最后對該網(wǎng)格進(jìn)行采樣得到一個(gè)點(diǎn)云。 判別器是網(wǎng)格模型采樣點(diǎn)集與原始點(diǎn)云比較的模塊,其通過統(tǒng)一的點(diǎn)云分類器提取空間特征,利用對抗策略獲取得分,以區(qū)分特征來源,得分接近0為采樣點(diǎn)集,接近1則是原始點(diǎn)云。 損失計(jì)算模塊則根據(jù)原始點(diǎn)云、采樣點(diǎn)集和判別器的輸出得分,計(jì)算預(yù)測器和判別器的損失,從而優(yōu)化網(wǎng)絡(luò)參數(shù)。 具體地,本文算法是一個(gè)迭代算法(共迭代6次),其中第T次迭代的流程如圖1所示,具體流程步驟如下:
Figure 1 Interative flow圖1 迭代流程
輸入:點(diǎn)云X。
輸出:重建網(wǎng)格M′。
步驟1若是第一次迭代,也就是T=1時(shí),根據(jù)點(diǎn)云X,采用Huang等[20]提出的方法,生成分辨率固定、占據(jù)空間盡量小但能包圍X的三角網(wǎng)格M1;否則將上一次迭代輸出的網(wǎng)格作為輸入網(wǎng)格M1。
步驟2預(yù)測器通過提取M1的邊特征,預(yù)測邊的偏移量,更新對應(yīng)頂點(diǎn)的位置,從而優(yōu)化變形網(wǎng)格M1。
步驟3對于網(wǎng)格模型M1的每個(gè)網(wǎng)格面片,利用三角網(wǎng)格表面采樣算法提取若干點(diǎn),從而得到網(wǎng)格模型M1對應(yīng)的點(diǎn)集Y。
步驟4判別器利用統(tǒng)一的點(diǎn)云分類器分別對點(diǎn)云X和點(diǎn)集Y進(jìn)行空間特征提取,并利用對抗策略計(jì)算得分,根據(jù)得分區(qū)別點(diǎn)的來源。
步驟5根據(jù)點(diǎn)云X和點(diǎn)集Y的坐標(biāo)和空間特征,通過損失計(jì)算,更新網(wǎng)絡(luò)參數(shù)。
步驟6將步驟2~步驟5循環(huán)N(本文取1 000)次,對M1進(jìn)行網(wǎng)格重構(gòu)與細(xì)分后得到本次迭代輸出網(wǎng)格M′。
對于每一次迭代,預(yù)測器通過估計(jì)網(wǎng)格模型邊的偏移量,調(diào)整頂點(diǎn)的位置,從而使網(wǎng)格模型的空間形狀向著原始點(diǎn)云的特征進(jìn)行改變,最終得到滿足原始點(diǎn)云空間形狀的三維網(wǎng)格模型。如圖1所示,預(yù)測器包含頂點(diǎn)位置偏移預(yù)測和拓?fù)浔3值捻旤c(diǎn)重定向2個(gè)操作。
與點(diǎn)云數(shù)據(jù)相比,網(wǎng)格模型有頂點(diǎn)之間的連接信息,即具有拓?fù)浣Y(jié)構(gòu)而非離散的,僅僅考慮頂點(diǎn)特征信息進(jìn)行變形,會(huì)引起網(wǎng)格翻轉(zhuǎn)或者連接關(guān)系錯(cuò)亂等問題。 實(shí)際上,邊的偏移同時(shí)伴隨著頂點(diǎn)位置的改變,因此本文通過估計(jì)邊偏移量來預(yù)測頂點(diǎn)位置。
在預(yù)測器中,本文利用Hanocka等[10]提出的基于邊的卷積提取邊的特征,并估計(jì)本次循環(huán)中網(wǎng)格模型邊的偏移量。本文利用邊的卷積,對網(wǎng)格模型的每一條邊提取六維特征,并轉(zhuǎn)換成2個(gè)點(diǎn)的三維坐標(biāo),表示成該邊的偏移量。 由于本文利用2個(gè)頂點(diǎn)表示一條邊的位移,而每一個(gè)頂點(diǎn)會(huì)與多個(gè)頂點(diǎn)組成多條邊,因此,每一個(gè)頂點(diǎn)會(huì)有多個(gè)不同的位移預(yù)測值。 為了解決該問題,本文對每一個(gè)頂點(diǎn)不同的位移預(yù)測值取平均值作為最終的位移,計(jì)算公式如式(1)所示:
(1)
其中,Δvi表示點(diǎn)vi的位移,n表示包含點(diǎn)vi的邊的總數(shù),Δej(vi)表示點(diǎn)vi在邊ej中的位移。
接著,本文利用新的頂點(diǎn)坐標(biāo)進(jìn)行拓?fù)浔3值捻旤c(diǎn)重定向,即使用對應(yīng)頂點(diǎn)的新坐標(biāo)更新上一次迭代輸出的網(wǎng)格模型,并進(jìn)行重網(wǎng)格化去除面片翻轉(zhuǎn)等問題,得到本次迭代的網(wǎng)格模型。
為了使重建結(jié)果更加貼近原始點(diǎn)云數(shù)據(jù),需要將網(wǎng)格模型轉(zhuǎn)化成點(diǎn)集,再與原始點(diǎn)云進(jìn)行比較。網(wǎng)格模型轉(zhuǎn)化成點(diǎn)集,既可以提取網(wǎng)格頂點(diǎn),又可以提取面片重心。Guan等[21]用網(wǎng)格面片重心來表示面片,從而將網(wǎng)格轉(zhuǎn)化為點(diǎn)集,所得點(diǎn)集分布更加均勻且數(shù)量更多。然而,由于本文的網(wǎng)格模型是固定分辨率的,即網(wǎng)格面片數(shù)量為固定值,因此重心轉(zhuǎn)換成的點(diǎn)集的大小也可能遠(yuǎn)小于原始點(diǎn)云數(shù)量。為了獲取與原始點(diǎn)云同等量級的點(diǎn)集數(shù)量,使網(wǎng)格模型更加貼近原始點(diǎn)云模型,本文對每個(gè)面片進(jìn)行多次采樣,以提高網(wǎng)格表面點(diǎn)集規(guī)模。
對于當(dāng)前的網(wǎng)格模型,本文分別計(jì)算每個(gè)三角網(wǎng)格面片面積,由此可得,第i個(gè)面片需要采樣的點(diǎn)的數(shù)量占總采樣點(diǎn)集數(shù)量的比例fi的計(jì)算公式如式(2)所示:
(2)
其中,Q表示網(wǎng)格面片總數(shù),Sq表示第q個(gè)面片的面積。由此可得,若總共采樣P個(gè)點(diǎn),則在第i個(gè)面片上采樣的點(diǎn)集數(shù)量為ni=fi×P,假設(shè)第k(1≤k≤ni)個(gè)點(diǎn)落在第i個(gè)面片中,那么該點(diǎn)的坐標(biāo)yk的計(jì)算公式如式(3)所示:
yk=vi+ae1+be2
(3)
其中,vi是面片i的3個(gè)頂點(diǎn)之一,e1和e2分別是以vi為起點(diǎn)、該面片另外2個(gè)頂點(diǎn)為終點(diǎn)的2個(gè)向量,而a和b是2個(gè)在0~1的隨機(jī)數(shù),并且為了使yk落在面片內(nèi)部,要求a和b滿足a+b<1。
點(diǎn)云數(shù)據(jù)中的每個(gè)點(diǎn)通常以歐氏空間中的三維坐標(biāo)表示,因此點(diǎn)云特征往往以歐氏距離來表示。然而,這樣的表示方式只能表示3個(gè)維度的特征,難以充分表達(dá)點(diǎn)云特征。隨著深度學(xué)習(xí)在三維數(shù)據(jù)中的發(fā)展,利用基于點(diǎn)的DNN能夠提取點(diǎn)云的高維特征,而本文判別器的主要任務(wù)就是區(qū)分表面采樣點(diǎn)集和原始點(diǎn)云。因此,本文使用一個(gè)基于點(diǎn)的DNN作為判別器,提取點(diǎn)云的特征,用來區(qū)分采樣點(diǎn)集和原始點(diǎn)云在高維空間中的不一致性,以便更好地對重建網(wǎng)格進(jìn)行調(diào)整。通過判別器與預(yù)測之間的對抗訓(xùn)練,來增強(qiáng)預(yù)測器的性能。
在判別器中,本文的點(diǎn)云分類器是參考Qi等[9]提出的PointNet++中點(diǎn)云特征提取模塊實(shí)現(xiàn)的。如圖2所示,對于輸入的點(diǎn)集,點(diǎn)云分類器使用3層點(diǎn)云特征提取模塊SA(Set Abstraction),利用層級結(jié)構(gòu)學(xué)習(xí)不同數(shù)量的點(diǎn)云特征。用于特征提取的SA模塊則由采樣分組模塊(Sample & Group)和多層感知器mlp (multilayer perceptron)組成。對于輸入的點(diǎn)云,數(shù)量為N,SA模塊的采樣和分組模塊首先使用最遠(yuǎn)距離采樣算法FPS(Farthest Point Sampling) 進(jìn)行點(diǎn)云下采樣,得到保留原始形狀的點(diǎn)集,數(shù)量為M; 然后根據(jù)給定的半徑,生成以M個(gè)采樣點(diǎn)為球心的局部區(qū)域,并選擇K個(gè)點(diǎn)作為該中心點(diǎn)的鄰域; 最后利用3個(gè)全連接層提取球心點(diǎn)與其鄰域點(diǎn)的特征。完成輸入點(diǎn)云的特征提取后,SA模塊將合并采樣后的點(diǎn)云三維坐標(biāo)和特征。最終提煉出維度為1×1024的特征向量,并經(jīng)過3個(gè)全連接層得出輸入點(diǎn)集的分?jǐn)?shù)。
Figure 2 Network architecture of discriminator 圖2 判別器網(wǎng)絡(luò)架構(gòu)
點(diǎn)云分類器中mlp的參數(shù)D1、D2和D3代表mlp中卷積層通道數(shù),具體地,3個(gè)SA中分別設(shè)置為 (64,64,128),(128,128,256) 和 (256,512,1024),而3個(gè)全連接層依次為512,256和1。點(diǎn)云分類器利用層級結(jié)構(gòu)能夠更有效、更魯棒地學(xué)習(xí)點(diǎn)云局部特征,能夠較好地解決密度不均勻點(diǎn)云的分類問題。
本文以對抗神經(jīng)網(wǎng)絡(luò)作為整體框架,通過預(yù)測器和判別器的損失計(jì)算結(jié)果達(dá)到平衡,得出最終網(wǎng)格模型。
對于預(yù)測器,損失函數(shù)模型由3部分組成,分別是判別器對抗損失、原始點(diǎn)云和采樣點(diǎn)集之間的歐氏雙向倒角距離(Bi-directional Chamfer Distance)和法向量余弦相似度(Cosine Similarity),其計(jì)算公式如式(4)所示:
LP=γ1LPD+γ2LCD-γ3LCS
(4)
其中,LPD表示判別器對抗損失;LCD和LCS分別表示原始點(diǎn)云和采樣點(diǎn)集之間的歐氏雙向倒角距離和法向量余弦相似度;而γ1,γ2和γ3均為常數(shù),用于調(diào)整三者之間的權(quán)重。
具體地,判別器對抗損失計(jì)算如式(5)所示:
(5)
其中,D(·)表示由判別器輸出的得分,D(Y)則表示網(wǎng)格表面采樣點(diǎn)集的判別評分。對于原始點(diǎn)云X和采樣點(diǎn)集Y,其雙向倒角距離損失計(jì)算公式如式(6)所示:
(6)
其中,|·|代表某個(gè)集合中元素的數(shù)量。而X與Y法向量的余弦相似度損失計(jì)算公式如式(7)所示:
(7)
對于判別器,本文參考LSGAN[18],損失計(jì)算采用最小二乘誤差模型,其計(jì)算公式如式(8)所示:
(8)
其中,LD表示判別器網(wǎng)絡(luò)的誤差,D(X)和D(Y)分別是將原始點(diǎn)云和網(wǎng)格表面采樣點(diǎn)集輸入給判別器得到的評分。
Figure 3 Iterative process 圖3 迭代過程
本文的實(shí)驗(yàn)在配有Intel i7-8700K CPU,NVIDIA GTX1080Ti顯卡和32 GB 主存的PC機(jī)上完成。為了評價(jià)本文網(wǎng)絡(luò)的性能,與Turbosquid三維模型均勻采樣所得的點(diǎn)云數(shù)據(jù)上進(jìn)行實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果均使用MeshLab軟件進(jìn)行展示。對于對抗神經(jīng)網(wǎng)絡(luò)的實(shí)現(xiàn),本文預(yù)測器和判別器均使用Adam算法執(zhí)行6次迭代,每次迭代1 000次循環(huán)來訓(xùn)練神經(jīng)網(wǎng)絡(luò)。預(yù)測器的初始學(xué)習(xí)率和權(quán)重衰減值分別為0.000 1和0,損失權(quán)重γ1,γ2和γ3的取值分別為1.0,100和10,而判別器的初始權(quán)重和權(quán)重衰減值分別為0.000 5和0.000 1。
本文方法與傳統(tǒng)方法泊松重建[6]和深度學(xué)習(xí)方法DGP[13]進(jìn)行比較。其中,對于泊松重建,本文將其深度參數(shù) (簡單表示為d) 分別設(shè)置為6和8; 對于DGP,本文根據(jù)文獻(xiàn)[13]所述流程,先利用深度學(xué)習(xí)對初始點(diǎn)云進(jìn)行預(yù)處理,以提高點(diǎn)云質(zhì)量,然后采用泊松方法進(jìn)行點(diǎn)云表面重建。文獻(xiàn)[6,13]在網(wǎng)格生成環(huán)節(jié)均采用自適應(yīng)方法,無法控制最終網(wǎng)格模型的分辨率,因此不同模型的網(wǎng)格分辨率是不一樣的。具體地,本文方法的網(wǎng)格分辨率為7 000,文獻(xiàn)[6]的深度設(shè)置為6時(shí),重建網(wǎng)格的分辨率為5 000~10 000,當(dāng)文獻(xiàn)[6]的深度為8時(shí)與文獻(xiàn)[13]的網(wǎng)格分辨率均為20 000~100 000。為了客觀分析本文方法與其他方法的重建效果,本文既通過可視化渲染重建網(wǎng)格進(jìn)行直觀視覺評價(jià),又通過計(jì)算真實(shí)的網(wǎng)格數(shù)據(jù)和重建得到網(wǎng)格之間的距離來衡量重建網(wǎng)格的質(zhì)量。本文首先從真實(shí)網(wǎng)格和重建網(wǎng)格中分別采樣25 000個(gè)點(diǎn),然后計(jì)算這2個(gè)點(diǎn)集之間的倒角距離CD(Chamfer Distance) 和距離標(biāo)準(zhǔn)差STD(STandard Deviation)。倒角距離是指一個(gè)點(diǎn)集中的每個(gè)點(diǎn)到另一個(gè)點(diǎn)集中的最近鄰點(diǎn)之間的平均距離;而距離標(biāo)準(zhǔn)差即是倒角距離的標(biāo)準(zhǔn)差,其能夠很好地反映出重建網(wǎng)格與原始網(wǎng)格的貼合程度。
首先,本文重建方法在迭代過程中所得的部分網(wǎng)格可視化渲染的結(jié)果如圖3所示。圖3a是輸入的原始點(diǎn)云,圖3b是用Huang等[20]方法生成的粗略網(wǎng)格,圖3c~圖3e分別是第2,4和6次迭代所得網(wǎng)格模型。從圖3可以看出,網(wǎng)絡(luò)在迭代的過程中,所生成的網(wǎng)格不斷由粗糙變精細(xì)。因此,對于本文方法設(shè)置合理的迭代次數(shù)是非常重要的。如圖3d所示,當(dāng)T=4時(shí)獲得的長頸鹿網(wǎng)格模型已經(jīng)能夠較好地呈現(xiàn)出輸入點(diǎn)云的整體形狀,但是在尾巴和鹿角仍然存在網(wǎng)格粘連。如圖3e所示,當(dāng)T=6時(shí)所得網(wǎng)格在尾巴和鹿角的網(wǎng)格粘連現(xiàn)象已經(jīng)完全消除。由此可得,本文方法所得的網(wǎng)格模型會(huì)隨著迭代次數(shù)的不斷增加,由粗糙變精細(xì)。因此,可以通過設(shè)置不同的迭代次數(shù)來獲得不同精細(xì)程度的網(wǎng)格模型,以適應(yīng)不同的應(yīng)用場景。例如在一些復(fù)雜或者數(shù)據(jù)龐大點(diǎn)云數(shù)據(jù)的重建中,可以設(shè)置更多的迭代次數(shù),從而得到體現(xiàn)點(diǎn)云細(xì)節(jié)的網(wǎng)格。
其次,本文利用不同方法重建不含薄片結(jié)構(gòu)的點(diǎn)云數(shù)據(jù),可視化渲染結(jié)果如圖4所示。對于手掌和頭骨2個(gè)模型,本文先對其均勻采樣成不同點(diǎn)云數(shù)量(分別為25 000和1 024),然后分別利用泊松重建、DGP和本文方法進(jìn)行網(wǎng)格重建。從可視化結(jié)果可以看出,對于密度大的輸入點(diǎn)云,這3種方法均能夠重建出質(zhì)量很好的網(wǎng)格,但是對于密度小的輸入點(diǎn)云,文獻(xiàn)[6,13]的效果并不理想,而本文方法仍然能夠重建質(zhì)量較好的網(wǎng)格。此外,重建網(wǎng)格的CD和STD的計(jì)算結(jié)果如表1所示。從表1中可以看出,對于密度小的輸入點(diǎn)云,本文的方法重建出的結(jié)果優(yōu)于文獻(xiàn)[6,13]的方法。
然后,本文在含有薄片結(jié)構(gòu)的點(diǎn)云數(shù)據(jù)上進(jìn)行實(shí)驗(yàn),重建結(jié)果如圖5所示。實(shí)物的薄片結(jié)構(gòu),如飛機(jī)的機(jī)翼、紙皮箱張開的4個(gè)面和刀的刀鋒,或者實(shí)物局部變化導(dǎo)致的點(diǎn)云粘連,如椅子和高跟鞋的彎曲表面,文獻(xiàn)[6]的結(jié)果并不理想,出現(xiàn)了網(wǎng)格整體斷裂或者模型局部缺失問題。通過增加泊松重建的深度(d=8),網(wǎng)格缺失和斷裂問題有所緩解,但是仍然達(dá)不到實(shí)際應(yīng)用需求,而且網(wǎng)格分辨率的提高,增加了存儲空間的需求。然而使用文獻(xiàn)[13]的方法進(jìn)行重建,雖然不會(huì)出現(xiàn)網(wǎng)格斷裂和局部缺失的問題,但是該方法無法正確處理好薄片處粘連的點(diǎn)云,從而導(dǎo)致最終的重建網(wǎng)格出現(xiàn)大量的外擴(kuò)。相較之下,本文以對抗網(wǎng)絡(luò)為框架的方法能夠取得更好的效果。此外這些重建網(wǎng)格的CD和STD計(jì)算結(jié)果如表2所示。從表2中可以看出,在倒角距離測試中,對于盒子、椅子、刀和飛機(jī),本文方法優(yōu)于文獻(xiàn)[6,13]的方法。但是,對于高跟鞋的重建,文獻(xiàn)[6]的結(jié)果優(yōu)于本文的,這是由于高跟鞋的薄片結(jié)構(gòu)不明顯,文獻(xiàn)[6]的方法能夠得出貼合原始點(diǎn)云的網(wǎng)格重建。對于距離標(biāo)準(zhǔn)差測試,本文方法則表現(xiàn)出更加優(yōu)異的效果。
Figure 4 Reconstruction results of point cloud without slices圖4 不含薄片結(jié)構(gòu)的點(diǎn)云重建結(jié)果
表1 不含薄片結(jié)構(gòu)的重建網(wǎng)格與原始網(wǎng)格的倒角距離(CD) 和距離標(biāo)準(zhǔn)差(STD)
Table 2 Chamfer distance (CD) and distance standard deviation (STD) between reconstructed mesh with slices point cloud and original mesh表2 含薄片結(jié)構(gòu)的點(diǎn)云重建網(wǎng)格與原始網(wǎng)格的倒角距離(CD)和距離標(biāo)準(zhǔn)差(STD)
Figure 5 Reconstruction results of point cloud with thin slices圖5 含有薄片結(jié)構(gòu)的點(diǎn)云重建結(jié)果
Figure 6 Reconstruction results of normal vector error point cloud by different methods圖6 不同方法對法向量錯(cuò)誤點(diǎn)云的重建結(jié)果
此外,點(diǎn)云數(shù)據(jù)還會(huì)存在局部法向量錯(cuò)誤的問題。面對這類情況,傳統(tǒng)的重建方法同樣面臨困難,無法直接得到良好的重建效果。本文以恐龍為例子,如圖6所示,文獻(xiàn)[6]的方法會(huì)出現(xiàn)網(wǎng)格外擴(kuò)的情況。雖然文獻(xiàn)[13]的方法能夠較好地重建出網(wǎng)格,但是其重建網(wǎng)格在恐龍的尾部依舊存在一些網(wǎng)格斷裂和外擴(kuò),而本文方法則能夠重建出質(zhì)量良好的網(wǎng)格模型。通過熱力圖分析,本文方法能夠更好地呈現(xiàn)出恐龍的原始形狀。
由于本文在進(jìn)行網(wǎng)格重建時(shí)需要用到2個(gè)神經(jīng)網(wǎng)絡(luò)模型,一是用于提取網(wǎng)格邊特征的網(wǎng)絡(luò)模型,二是用于提取點(diǎn)云高維特征的網(wǎng)絡(luò)模型,因此本文方法是比較耗時(shí)的。在本文實(shí)驗(yàn)中,輸入點(diǎn)云的點(diǎn)數(shù)量為25 000并且重建網(wǎng)格面片的數(shù)量為7 000的情況下,每一次網(wǎng)格優(yōu)化,即每一次循環(huán),大約需耗時(shí)0.88 s,每次迭代進(jìn)行1 000次優(yōu)化,大約耗時(shí)14 min。針對較復(fù)雜點(diǎn)云需要增加迭代次數(shù),也就是說需要消耗更多的時(shí)間。
通過上述實(shí)驗(yàn)以及分析可知,本文方法在稀疏、含有薄片結(jié)構(gòu)或法向量錯(cuò)誤的點(diǎn)云三維網(wǎng)格重建任務(wù)中,仍然能夠重建出貼近原始點(diǎn)云特征的網(wǎng)格模型。這是由于本文在使用基于邊的網(wǎng)絡(luò)模型對網(wǎng)格進(jìn)行變形的同時(shí),還使用基于點(diǎn)的網(wǎng)絡(luò)模型對點(diǎn)云進(jìn)行高維特征的提取,而不是僅僅局限于歐氏三維空間的特征,能夠更充分地利用點(diǎn)云數(shù)據(jù)的幾何空間信息。此外,這2個(gè)網(wǎng)絡(luò)模型進(jìn)行對抗訓(xùn)練能夠更好地關(guān)聯(lián)網(wǎng)格信息和點(diǎn)云信息,從而得到更符合點(diǎn)云空間幾何信息的重建網(wǎng)格模型。
點(diǎn)云三維重建有著悠久的歷史,但是網(wǎng)格質(zhì)量問題依然沒有得到很好的解決。為了解決由原始點(diǎn)云數(shù)據(jù)密度不均勻和法向量錯(cuò)誤等制約因素引起的重建網(wǎng)格質(zhì)量問題,本文提出了一種基于對抗網(wǎng)絡(luò)的點(diǎn)云三維重建方法,該方法能夠利用對抗神經(jīng)網(wǎng)絡(luò)中權(quán)重共享的特性和對抗式的訓(xùn)練過程,利用點(diǎn)云空間特征將預(yù)測器與判別器關(guān)聯(lián)起來,得到滿足點(diǎn)云空間特征的三維網(wǎng)格模型。實(shí)驗(yàn)分析表明,本文方法能夠重建出滿足點(diǎn)云空間信息的三維網(wǎng)格模型,同時(shí)能夠克服粗劣的點(diǎn)云數(shù)據(jù)引起的網(wǎng)格質(zhì)量問題。