劉澤鑫 萬(wàn)旺根
1(上海大學(xué)通信與信息工程學(xué)院 上海 200444)2(上海大學(xué)智慧城市研究院 上海 200444)
三維模型分類作為數(shù)字幾何領(lǐng)域的重要組成部分,被廣泛應(yīng)用于計(jì)算機(jī)輔助設(shè)計(jì)和前沿的無(wú)人駕駛中[1]。無(wú)論是模型分類還是模型檢索,如何通過(guò)設(shè)計(jì)合理的算法以提高模型的處理精度,一直是國(guó)內(nèi)外學(xué)者的研究熱點(diǎn)。Kazhdan等[2]提出了一種基于球諧函數(shù)的三維模型分類算法;Vranic等[3]提出了一種使用徑向函數(shù)來(lái)表征三維模型并進(jìn)行分類的算法;Liu等[4]提出了一種使用距離函數(shù)表征三維模型特征并實(shí)現(xiàn)分類的算法;Bronstein等[5]提出了一種使用熱核特征[6]和無(wú)監(jiān)督聚類[7]實(shí)現(xiàn)三維模型分類的方法。
此外,卷積神經(jīng)網(wǎng)絡(luò)[8]技術(shù)作為一種可以處理三維場(chǎng)景下復(fù)雜問(wèn)題的工具也已被成功地應(yīng)用于三維模型分類領(lǐng)域中。Charles等[9]提出的PointNet方法采用多層感知機(jī)網(wǎng)絡(luò)對(duì)三維模型進(jìn)行擬合表示,并通過(guò)卷積神經(jīng)網(wǎng)絡(luò)對(duì)其進(jìn)行特征提取和分類運(yùn)算;Su等[10]提出的MVCNN方法使用二維視圖表示三維模型,并通過(guò)卷積神經(jīng)網(wǎng)絡(luò)處理這些圖像以實(shí)現(xiàn)模型的分類;Wu等[11]提出的3D ShapeNets算法將三維模型表示為體素網(wǎng)格[12]上的二值分布,并通過(guò)卷積神經(jīng)網(wǎng)絡(luò)計(jì)算三維模型的特征與分類情況。
以上方法有其各自的優(yōu)點(diǎn)與缺憾,基于卷積神經(jīng)網(wǎng)絡(luò)的方法而言,大部分可以自主提取特征并實(shí)現(xiàn)端到端的模型分類,然而這些方法的算法復(fù)雜度普遍較高,并且分類結(jié)果不甚理想。針對(duì)以上問(wèn)題,本文提出了基于體素模型與卷積神經(jīng)網(wǎng)絡(luò)的三維模型分類算法,該算法基于八叉樹(shù)結(jié)構(gòu)[13]對(duì)三維模型進(jìn)行體素化,明顯降低了算法的時(shí)間復(fù)雜度和對(duì)GPU顯存的要求,同時(shí)具有較高的三維模型分類能力。
體素是體積元素的簡(jiǎn)稱,表示數(shù)據(jù)在三維空間上的最小單位。在三維模型相關(guān)研究領(lǐng)域中,體素化表示將三維模型轉(zhuǎn)化為一系列體素的堆砌組合,從而模擬模型的空間幾何分布。采用體素化的方法處理三維模型能夠直觀地呈現(xiàn)模型結(jié)構(gòu),準(zhǔn)確地記錄模型信息。為了進(jìn)一步降低顯存占用,同時(shí)提升計(jì)算速度,本文使用基于八叉樹(shù)結(jié)構(gòu)的體素化方法對(duì)三維模型進(jìn)行體素化處理。體素化流程如圖1所示。
圖1 體素化流程
在構(gòu)建基于八叉樹(shù)結(jié)構(gòu)的體素模型時(shí),我們首先設(shè)定模型的深度(Depth,d)為N,接下來(lái)的操作可以分為兩步:
(1) 基于八叉樹(shù)結(jié)構(gòu)將三維模型體素化。為實(shí)現(xiàn)該目標(biāo),首先通過(guò)預(yù)處理步驟計(jì)算出模型的AABB包圍盒并按標(biāo)準(zhǔn)尺寸將其均勻縮放為軸向?qū)R的三維邊界立方體,然后依據(jù)廣度優(yōu)先的原則順序遞歸并細(xì)分三維邊界立方體。在上述過(guò)程的每個(gè)迭代步驟iter中,我們通過(guò)搜索器ser充分遍歷處于第iter深度處,由三維形狀占據(jù)的非空節(jié)點(diǎn)單元,并將它們中的每一個(gè)單元細(xì)分為第iter+1深度的八個(gè)子單元。該過(guò)程將一直持續(xù)直到iter達(dá)到預(yù)定的值N為止。
(2) 貯存重要屬性信息。在構(gòu)建基于八叉樹(shù)體素結(jié)構(gòu)的三維模型時(shí),我們將為各個(gè)節(jié)點(diǎn)單元添加重要的屬性信息,以其滿足后續(xù)卷積神經(jīng)網(wǎng)絡(luò)的操作需求。具體而言,即為八叉樹(shù)體素結(jié)構(gòu)的每個(gè)單元添加通過(guò)計(jì)算得到的隨機(jī)鍵屬性、關(guān)系標(biāo)簽屬性以及信號(hào)屬性。其中,采用隨機(jī)鍵的方式標(biāo)記節(jié)點(diǎn)單元可以使三維卷積運(yùn)算時(shí)的節(jié)點(diǎn)鄰域構(gòu)建變得高效,采用關(guān)系標(biāo)簽的方式標(biāo)記節(jié)點(diǎn)單元可以使三維池化運(yùn)算時(shí)的父子節(jié)點(diǎn)查詢更加快捷,而信號(hào)屬性的設(shè)置可以清晰化模型的性狀特征,同時(shí)使描述符的學(xué)習(xí)與存儲(chǔ)更加容易。
如圖2所示,我們通過(guò)可視化效果圖比較了斯坦福兔子的原始模型、普通體素模型和基于八叉樹(shù)結(jié)構(gòu)的體素模型。觀察發(fā)現(xiàn),與普通體素化方法相比,采用本文方法處理得到的模型更加忠實(shí)于原始樣本。
(a) 原始模型 (b) 普通體素模型 (c) 本文模型圖2 模型對(duì)比
為了使神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)能夠處理體素模型,本文特別使用了網(wǎng)絡(luò)模型中的幾項(xiàng)關(guān)鍵組件,并在此基礎(chǔ)上設(shè)計(jì)了可提取三維模型特征描述符的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。
為使本文設(shè)計(jì)的網(wǎng)絡(luò)結(jié)構(gòu)適配基于八叉樹(shù)結(jié)構(gòu)的體素模型,并可以提取三維模型的特征描述符,我們有選擇性地使用了神經(jīng)網(wǎng)絡(luò)中的部分運(yùn)算符。
2.1.1三維卷積運(yùn)算
本文使用支持空間運(yùn)算的三維卷積運(yùn)算符對(duì)模型進(jìn)行特征提取,并在每次運(yùn)算中,通過(guò)設(shè)置約束項(xiàng)的方式,將運(yùn)算符的作用范圍控制在體素模型相同深度處、待運(yùn)算節(jié)點(diǎn)單元的周圍,從而實(shí)現(xiàn)在八叉樹(shù)結(jié)構(gòu)上開(kāi)展高效的卷積運(yùn)算。該過(guò)程的計(jì)算公式如下:
(1)
2.1.2三維池化運(yùn)算
池化的作用是壓縮特征信號(hào)的空間表達(dá),除去冗余數(shù)據(jù)并在保持位移不變的前提下突出顯著特征。為了在基于八叉樹(shù)結(jié)構(gòu)的體素模型上進(jìn)行池化運(yùn)算,本文選用了支持空間運(yùn)算的三維池化運(yùn)算符對(duì)特征圖進(jìn)行池化操作。該過(guò)程的計(jì)算公式如下:
Resd-1=f(down(Resd))
(2)
式中:down(·)表示池化算子,本文采用的池化方式為Max-pooling。
2.1.3全連接運(yùn)算
全連接運(yùn)算的作用是將經(jīng)過(guò)卷積運(yùn)算和池化運(yùn)算得到的分布式特征表示映射到樣本標(biāo)記空間,以支持后續(xù)的特征分類操作。該過(guò)程的計(jì)算公式如下:
W=Arr(wm)FC=f(Arr(Resd×Wm+pm))
(3)
式中:W表示參與運(yùn)算的卷積核組,pm表示偏置項(xiàng),F(xiàn)C表示全連接層。
2.1.4Softmax運(yùn)算
我們以Softmax層作為三維模型分類網(wǎng)絡(luò)的最后一層,并通過(guò)它進(jìn)行分類運(yùn)算以得到最終的分類結(jié)果。該層的運(yùn)算過(guò)程如下:
(4)
式中:f(zi)表示第i類的預(yù)測(cè)結(jié)果。
在確定卷積神經(jīng)網(wǎng)絡(luò)關(guān)鍵組件的基礎(chǔ)上,本文設(shè)計(jì)了一套適配于八叉樹(shù)結(jié)構(gòu)體素模型的三維模型分類網(wǎng)絡(luò)。該分類網(wǎng)絡(luò)系統(tǒng)可分為特征提取器和分類器兩部分,其中特征提取器的深度由體素模型的分辨率(Resolution,r)決定,并且特征提取器的深度與模型分辨率之間存在著如下式所示的關(guān)系。
r=23×d
(5)
如圖3所示,卷積神經(jīng)網(wǎng)絡(luò)為本系統(tǒng)的特征提取器。根據(jù)體素模型分辨率的不同,該網(wǎng)絡(luò)將包含一定數(shù)量的運(yùn)算單元(Unit,u),而每個(gè)運(yùn)算單元又由兩個(gè)三維卷積運(yùn)算層、一個(gè)歸一化層、一個(gè)激活層和一個(gè)三維池化層組成。該網(wǎng)絡(luò)中卷積層的卷積運(yùn)算符尺寸為3×3×3,移動(dòng)步長(zhǎng)為1,池化層的池化運(yùn)算符尺寸為2×2×2,移動(dòng)步長(zhǎng)為2,網(wǎng)絡(luò)結(jié)構(gòu)任意深度處的特征圖的數(shù)量如式(6)所示,當(dāng)模型經(jīng)過(guò)運(yùn)算單元的一次處理后,分辨率減半,同時(shí)特征描述符向上抽象一個(gè)維度。
圖3 特征提取器網(wǎng)絡(luò)
(6)
將特征提取器作為第一部分置于圖4框架中,銜接在分類器之前便構(gòu)成了完整的三維模型分類系統(tǒng)。其中,沿著系統(tǒng)執(zhí)行方向,分類器依次包含兩項(xiàng)512個(gè)單位的全連接層、一項(xiàng)40個(gè)單位的全連接層和一項(xiàng)用于分類的Softmax層。當(dāng)使用分類系統(tǒng)對(duì)模型進(jìn)行分類時(shí),首先使用特征提取器抽象得到體素模型的特征描述符,接著將特征描述符作為運(yùn)算基礎(chǔ)單元輸入到分類器中進(jìn)一步處理并輸出最終的分類結(jié)果。
圖4 三維模型分類網(wǎng)絡(luò)
與同領(lǐng)域中其他三維模型分類方法,尤其是基于體素模型的方法相比,本文算法可以在較短的訓(xùn)練時(shí)間及較小的顯存占用下,訓(xùn)練出準(zhǔn)確率較高的分類模型。后續(xù)將通過(guò)實(shí)驗(yàn)探究最合理的體素模型與網(wǎng)絡(luò)結(jié)構(gòu)搭配,同時(shí)驗(yàn)證本文算法的上述優(yōu)勢(shì)。
為找到最佳的體素模型與網(wǎng)絡(luò)結(jié)構(gòu)組合,同時(shí)量化地驗(yàn)證本文算法的優(yōu)勢(shì),我們?cè)趨⒖纪惙椒ǖ幕A(chǔ)上,設(shè)計(jì)了一系列實(shí)驗(yàn),包括:基于體素模型分辨率設(shè)計(jì)的實(shí)驗(yàn)、基于最佳網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)的性能比較實(shí)驗(yàn)以及同類方法的分類準(zhǔn)確率對(duì)比實(shí)驗(yàn)。
實(shí)驗(yàn)環(huán)境:Intel(R) Xeon(R) CPU X5650,24 GB內(nèi)存,NVIDIA Tesla K20c,操作系統(tǒng)為Windows 10 pro 64-bit。數(shù)據(jù)集:選擇公共的Princeton ModelNet40數(shù)據(jù)集作為實(shí)驗(yàn)訓(xùn)練集和測(cè)試集來(lái)驗(yàn)證本文實(shí)驗(yàn)的效果。卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)主要參數(shù)設(shè)置:設(shè)置神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)率為0.1,批大小為32,epoch為40。
本文提出的三維模型分類系統(tǒng)中特征提取器的運(yùn)算單元數(shù)與模型的分辨率有關(guān),而特征提取器的結(jié)構(gòu)又直接影響到三維模型的分類準(zhǔn)確率。為此,我們特別設(shè)計(jì)了本實(shí)驗(yàn),以探究最為合理的體素模型與特征提取器組合。圖5所示為本實(shí)驗(yàn)的結(jié)果圖,實(shí)驗(yàn)中,分別按照3、4、5、6、7的深度配置將Princeton ModelNet40數(shù)據(jù)集中的三維模型體素化,其對(duì)應(yīng)的模型分辨率分別為(23)3、(24)3、(25)3、(26)3、(27)3。
圖5 體素模型分辨率對(duì)分類準(zhǔn)確率的影響
實(shí)驗(yàn)結(jié)果表明,當(dāng)體素模型深度為6,對(duì)應(yīng)分辨率為(26)3時(shí),模型與分類網(wǎng)絡(luò)結(jié)構(gòu)組合具有最佳的分類效果。分析認(rèn)為:當(dāng)體素模型的分辨率較低時(shí),三維模型的局部信息表達(dá)不充分,無(wú)法通過(guò)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)學(xué)習(xí)得到高表征的特征描述符,致使分類準(zhǔn)確率較低,而數(shù)據(jù)集體量相對(duì)較小則可能造成模型在訓(xùn)練過(guò)程中出現(xiàn)過(guò)擬合現(xiàn)象,從而使得分類準(zhǔn)確率無(wú)法提升甚至下降。圖6所示為最佳的分類網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)。
圖6 效果最佳的分類網(wǎng)絡(luò)結(jié)構(gòu)
由于使用了八叉樹(shù)結(jié)構(gòu)的體素模型作為輸入數(shù)據(jù)源,相較于普通的基于全體素模型的分類方法,本文算法在進(jìn)行分類運(yùn)算時(shí)速度更快,顯存占用較小。為了證實(shí)這一理論分析,我們使用圖6所示分類網(wǎng)絡(luò)結(jié)構(gòu)開(kāi)展了本實(shí)驗(yàn)。 表1所示為本實(shí)驗(yàn)的結(jié)果,其中:第一列表示分類網(wǎng)絡(luò)運(yùn)算時(shí)的迭代時(shí)間成本,該值是通過(guò)計(jì)算1 000次迭代傳播的平均時(shí)間得到的;第二列表示分類網(wǎng)絡(luò)運(yùn)行時(shí)的峰值顯存占用。
表1 性能分析
實(shí)驗(yàn)結(jié)果表明,本文提出的三維模型分類算法運(yùn)行時(shí)的速度較快,同時(shí)對(duì)顯存的占用較小,這也與上文的理論分析相吻合。
為了證實(shí)本文算法具有更好的分類效果,我們將本文提出的算法與當(dāng)前主流分類算法在ModelNet40數(shù)據(jù)集上的測(cè)試結(jié)果進(jìn)行了比較,實(shí)驗(yàn)結(jié)果如圖7所示。其中,參與對(duì)比實(shí)驗(yàn)的方法包括3D ShapeNets[11]、DeepPano[14]、Geometry Image[15]、FPNN[16]、PointNet[9]以及MVCNN[10]。
圖7 分類準(zhǔn)確率比較
實(shí)驗(yàn)結(jié)果表明,本文提出的基于體素模型與卷積神經(jīng)網(wǎng)絡(luò)的三維模型分類算法具備更高的模型分類水平。
為了形象地說(shuō)明本文的分類效果,本節(jié)展示了使用本文算法在ModelNet40數(shù)據(jù)集上進(jìn)行分類實(shí)驗(yàn)時(shí)得到的正確與錯(cuò)誤分類實(shí)例,并簡(jiǎn)要分析了錯(cuò)誤分類的原因。
如表2所示,為通過(guò)本文方法分類得到的部分正確實(shí)例,不難發(fā)現(xiàn),對(duì)于人、汽車、飛機(jī)、吉他等形狀明顯的模型類別,本文算法可以準(zhǔn)確地判斷出其類別。
表2 正確分類模型實(shí)例
表3所示為使用本文方法分類得到的部分錯(cuò)誤實(shí)例,出現(xiàn)這種狀況的原因可能是部分模型相似度較高。
表3 錯(cuò)誤分類模型實(shí)例
表3中,第一個(gè)“水杯”模型被錯(cuò)誤分類為“花瓶”,分析發(fā)現(xiàn)該“水杯”模型的體素模型為上寬下窄的圓柱體,與“花瓶”的外形非常相似,從而在分類時(shí)發(fā)生錯(cuò)誤判斷;第二個(gè)“浴缸”模型被錯(cuò)誤分類為“碗”,分析發(fā)現(xiàn)該“浴缸”模型的體素模型為半橢圓形容器,與“碗”的外形非常接近,從而在分類時(shí)出現(xiàn)誤判。
本文提出了一種基于體素模型與卷積神經(jīng)網(wǎng)絡(luò)的三維模型分類算法。與傳統(tǒng)的基于卷積神經(jīng)網(wǎng)絡(luò)的三維模型分類算法相比,本算法首先構(gòu)建了基于八叉樹(shù)結(jié)構(gòu)的體素模型,在降低神經(jīng)網(wǎng)絡(luò)運(yùn)算復(fù)雜度的前提下,盡可能地保留了三維模型的幾何特征;其次,綜合運(yùn)用包括三維卷積運(yùn)算層、三維池化運(yùn)算層在內(nèi)的多個(gè)關(guān)鍵組件構(gòu)建了本文的三維模型分類網(wǎng)絡(luò)以完成模型的分類操作。實(shí)驗(yàn)結(jié)果表明,本文算法可以在顯存占用小,運(yùn)算速度快的前提下,提升分類準(zhǔn)確率。然而,我們也注意到由于模型的信號(hào)屬性算子設(shè)計(jì)仍然存在缺陷以及神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)參數(shù)設(shè)置不合理等因素,本文算法在分類外形相近的模型時(shí)結(jié)果不甚理想,因此未來(lái)將研究設(shè)計(jì)能充分表征三維模型結(jié)構(gòu)特性信號(hào)屬性以及更加合理的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)和參數(shù)組合。