吳 楊,張海翔,馬漢杰,蔣明峰,馮 杰
(浙江理工大學 信息學院,浙江 杭州 310018)
三維形狀表達技術一直是計算機視覺領域的重要研究課題。與圖片相比,三維模型能夠傳遞出更多的信息,與用戶的交互也更加真實。另外,三維模型也應用于無人駕駛、機器人的地圖重建上,在游戲和VR領域也有所涉及。因此,如何表達出高質(zhì)量的三維模型是一個重要的問題。
與傳統(tǒng)的三維形狀表達工作相比,基于深度學習的三維形狀表達任務,是一個重要的研究問題,它能夠通過端到端的學習直接產(chǎn)生精細的三維模型。當前,基于深度學習的三維表達,根據(jù)表示方法的不同主要分為體素法、八叉樹法、隱函數(shù)法、點云法和網(wǎng)格法,其中體素形狀表達是三維形狀表達方法中的重要研究內(nèi)容,具有很多優(yōu)勢。首先,體素數(shù)據(jù)具有良好的結構,便于特征學習和計算,基于圖像的處理方法,可以應用到三維模型的處理中來,且體素表達形狀的結構類型不受限制。其次,三維表達中對體素的特征編碼,可以作為三維重建中圖片編碼器的學習目標,作為三維重建的中間過程。但是,體素表示也存在著很多問題:① 現(xiàn)有的方法主要使用3DCNN來進行編碼,僅利用了體素的層次特征,更高精度特征編碼方法有待進一步研究;② 由于體素編碼的提高存在困難,大多數(shù)方法通過提高分辨率的方式來增加模型的效果;③ 體素表示的方法在訓練時會占用大量內(nèi)存,使得學習的成本變高。
針對這些問題,本文提出了一種基于多尺度殘差特征的形狀表達編碼模型,利用3D形狀體素多尺度特征之間相關性,學習更有效的特征編碼。在此基礎上,在解碼器中引入自注意機制,進一步提高解碼模型的精度。此外,還探索研究了一種體素殘差編碼的深度分離卷積方法,在精度下降不大的條件下有效降低了模型的參數(shù)。實驗證明,所提出的網(wǎng)絡模型是有效的,并且通過與最近的工作對比,也取得了更好的結果。
重點介紹了最近工作中有關三維形狀表達及特征編碼的方法,對它們的貢獻和不足之處進行了分析。同時,對自注意力機制和深度分離卷積的相關工作,也展開了討論。
基于體素的形狀表達大都是基于CNN來進行體素的編碼。八叉樹法是將體素數(shù)據(jù)轉(zhuǎn)化為八叉樹的存儲結構,采用類似卷積的操作來處理數(shù)據(jù)。隱函數(shù)法編碼階段也都是使用CNN來提取特征。而CNN只利用了體素的層次特征,因此如何對體素特征編碼進行優(yōu)化就成了一項有挑戰(zhàn)性的工作。
體素法:由于體素是圖像網(wǎng)格中像素的自然3D擴展并允許3D卷積,因此它們常用于三維模型的生成。早期的體素表示方法的研究,受限于內(nèi)存大小,只能產(chǎn)生低分辨率的生成模型[1-2]。CNN-AE[3]可以直接對體素進行卷積和反卷積運算,實現(xiàn)體素的形狀表達。但是由于普通的CNN網(wǎng)絡難以提取完整的特征信息,所以學習到的生成模型雖然具有完整的結構但往往缺乏細節(jié)。Shubham等人[4]提出一種學習物體的部件并裝配成完整物體的方法,這種方法也是通過CNN來進行編碼。大部分體素表示的方法,通過三維卷積網(wǎng)絡來進行編碼,由于淺層的CNN有限的特征提取能力,而無法得到有效的映射。
八叉樹法:目前基于體素的研究,通常從高分辨率的角度來獲得三維模型。如八叉樹法[5-6],就是將體素轉(zhuǎn)化為八叉樹的結構,通過多次迭代,獲得高分辨率的模型。這種方法是通過存儲結構優(yōu)化的方式來減小內(nèi)存的消耗,但還是使用CNN來進行編碼。
隱函數(shù)法:最近基于隱函數(shù)的IM-NET[3],通過預測體素中逐點占用來生成模型。雖然能夠獲得任意分辨率的輸出模型,但在編碼階段依然是通過卷積網(wǎng)絡對體素進行特征提取。BAE-NET[7]、BSP-NET[8]與IM-NET結構類似,都是采用CNN來進行編碼,而對不同的問題進行處理。這些網(wǎng)絡雖然能夠生成高分辨的模型,但在低分辨率下精度不高,與它們的編碼方式有很大的關系。
點云法:由于點云往往可以通過一些掃描設備直接獲取,所以點云上的深度學習一直吸引著研究者的關注。特別是在過去五年,一些公開的數(shù)據(jù)集也被發(fā)布,如ModelNet[9],ScanNet[10]等,這些數(shù)據(jù)集進一步推動了深度學習在三維點云上的研究。PointsNet[11], PointsNet++[12]都是用來對點云進行分類以及語義分割的網(wǎng)絡,它們將三維外形看作是無序的點云,使用對稱函數(shù)來達到點的排列不變性。由于點云的無序性,對點云的特征提取存在困難。在PVCNN[13]中采用了點云和體素特征融合的方式來處理點云,利用了體素良好的表示結構,通過3DCNN來提取體素化點云的特征。也證明了對體素編碼的進一步研究有廣泛的意義。
網(wǎng)格法:基于網(wǎng)格的方法大都以模板變形為基礎預測形狀,生成模型受限于模板[14]。T.Groueix[15]、A.Sinha[16]等人將曲面模板變形成目標外形,但是許多三維外形不能用單個面片很好地表示,而來自多個面片集成的輸出通常包含由于間隙、折疊和重疊而產(chǎn)生的視覺偽影。總的來說,基于網(wǎng)格的表示方法有很大的限制。
體素的表示方法相對點云和網(wǎng)格,更適合于物體結構的表達,且表達形狀的結構類型不受限制。因此,本文采用體素的表示方法,致力于生成高精度三維模型的表達,主要對編碼器進行了深入的研究。與之前的網(wǎng)絡不同,受Hara等人[17]的啟發(fā),設計了多級殘差網(wǎng)絡作為編碼器,能夠保留更多有效的信息。通過與相關工作的對比,也證明了所提出方法的有效性。
注意力機制模仿生物觀察行為的內(nèi)部過程,即一種將內(nèi)部經(jīng)驗和外部感覺對齊從而增加部分區(qū)域的觀察精細度的機制。而自注意機制是注意力機制的改進,其減少了對外部信息的依賴,更擅長捕捉數(shù)據(jù)或特征的內(nèi)部相關性。
自注意機制的提出是為了解決NLP領域?qū)υ~向量特征關注的問題。Transformer[18]、BERT[19]等模型都充分運用了自注意機制來解決翻譯任務。由于自注意機制在NLP領域的巨大成功,許多框架都將注意力引入了視覺任務中。Wang等人[20]提出了一種基于堆疊注意模塊的殘差注意算法用于圖像分類。Zhang等人[21]設計了SAGAN,它使用自我注意進行圖像生成。Guo等人[22]將Transformer與點云結合用于3D點云分類、分割。Parmar等人[23]提出了一種圖像變換器模型,將自我注意力添加到用于圖像生成的自回歸模型中。Wang等人[24]將自我關注形式化為非局部操作,以模擬視頻序列中的時空依賴性。
基于自注意機制能夠捕捉全局特征的性質(zhì),在三維領域應當也有重要作用。受Wang等人[24]的啟發(fā),本文設計了基于自注意機制的全局關注模塊,應用于解碼器中以提高模型精度。
深度分離卷積最早由Laurent Sifre[25]在其博士論文中提出,可以減少卷積操作中的參數(shù)數(shù)量和計算量。隨后應用于InceptionNet[26]中,它首先對通道進行多尺度的分組卷積,然后用1×1的卷積核逐點卷積。受InceptionNet的啟發(fā),XceptionNet[27]則先逐點卷積,再對每個通道進行卷積。而同時提出的MobileNet[28]與XceptionNet的區(qū)別,僅在于MobileNet先進行通道卷積再逐點卷積。XceptionNet和MobileNet幾乎同時提出,前者通過拆分普通卷積來減少參數(shù)數(shù)量,后者是通過對Inception的充分解耦來完成的。
本文中依據(jù)這種思想,在三維卷積中實現(xiàn)了深度分離卷積,通過先通道卷積再逐點卷積的方式,有效減小了模型參數(shù)和運行內(nèi)存。
本文提出了一種形狀表達方法,主要是對多尺度殘差特征編碼方法進行了研究。它是一種基于自編碼器的網(wǎng)絡架構,用于對物體的體素數(shù)據(jù)編碼再恢復出三維形狀。整個網(wǎng)絡架構包括一個編碼器和一個解碼器,編碼器使用多級殘差網(wǎng)絡結合深度可分離卷積提取三維的殘差特征,解碼器將提取到的特征解碼,即反卷積成與原有的三維模型。模型的輸入是單通道的643的體素網(wǎng)格,經(jīng)過編碼器得到一個256維的特征向量z,z作為解碼器的輸入再反卷積得到分辨率為643的三維模型。
本網(wǎng)絡的結構如圖1所示,編碼器是多級殘差網(wǎng)絡,由多個殘差塊組成。將殘差塊中的3D卷積修改為深度可分離卷積,以減少模型的參數(shù)數(shù)量。解碼器由多個轉(zhuǎn)置卷積組成,其中加入了自注意層,用以關注全局特征。通過將輸入的體素網(wǎng)格與生成的模型做平方差得到損失值,反向訓練整個模型的參數(shù)。下面將詳細介紹網(wǎng)絡的各個部分。
圖1 網(wǎng)絡結構Fig.1 Diagram of network structure
由于深度的3D卷積網(wǎng)絡參數(shù)過多難以訓練,以往的三維表達方法,通常采用淺層的3D卷積網(wǎng)絡,只能提取到不完整的特征。為了能夠在深層次的網(wǎng)絡中更準確地學習到體素的編碼,本網(wǎng)絡在三維模型處理中使用了多級殘差網(wǎng)絡來提取編碼信息。多級殘差網(wǎng)絡的結構如圖1中編碼器所示。
多級殘差網(wǎng)絡包括一個7×7×7的3D卷積層、3×3×3的最大池化層、多個殘差塊以及一個平均池化層。由于多個殘差塊的存在,能夠保留更多的信息,提取到多級特征。其中的block模塊包括2個卷積層和一個shortcut連接,每個卷積層后都有一個歸一化層和Relu激活函數(shù)。shortcut連接能夠?qū)⑸弦粚拥妮斎離和經(jīng)過2層卷積層的f(x)相加作為輸出。表示為:
y=x+f(x)。
(1)
殘差網(wǎng)絡解決了深度學習中網(wǎng)絡退化的問題,使得深層的網(wǎng)絡更容易去學習。通過多級殘差網(wǎng)絡提取體素的特征,能夠獲得更完整的信息,更好地完成體素到隱向量的映射。在實驗中,也得到了有效的驗證。
由于體素網(wǎng)格在訓練中內(nèi)存的占用率很大,深層網(wǎng)絡中的參數(shù)相對較多,本網(wǎng)絡修改了殘差塊中的卷積操作,設計了基于三維卷積核的深度可分離卷積,將原本的一層卷積改為2層分離的卷積,可以有效地減少模型中的參數(shù),如圖2所示。
圖2 深度可分離卷積結構Fig.2 Depthwise separable convolution structure
深度可分離卷積就是將普通的卷積操作分解為深度卷積和逐點卷積。與標準卷積網(wǎng)絡不一樣的是,在網(wǎng)絡中將卷積核拆分成為單通道形式,在不改變輸入特征圖像的通道數(shù)的情況下,對每一通道進行卷積操作,這樣就得到了和輸入特征圖通道數(shù)一致的輸出特征圖。逐點卷積就是1×1×1的卷積,主要作用是對特征圖進行升維和降維。通過深度分離卷積,可以有效地降低模型的參數(shù)數(shù)量,減小網(wǎng)絡的大小。
通過對多級殘差網(wǎng)絡的block中的卷積進行優(yōu)化,提出了一個輕量級的網(wǎng)絡架構,有效減少了模型的參數(shù)以及內(nèi)存占用。
在解碼器中主要使用了轉(zhuǎn)置卷積將提取到的特征恢復成三維模型。解碼器結構如圖1所示。
解碼器中包含多個轉(zhuǎn)置卷積層和一個自注意模塊。轉(zhuǎn)置卷積是卷積操作的逆運算,與上池化和上采樣層不同,能夠在訓練中學習參數(shù)。為了提高生成模型的精度,提出了適用于三維模型處理的自注意機制。它可以學習特征圖的整體特征,獲得每一個位置上的關注度,保留重要的信息。自注意機制的結構如圖3所示。
圖3 自注意模塊的結構Fig.3 Structure of self-attention module
傳統(tǒng)的卷積核只能對特征圖的局部進行加權計算,而不能獲得位置上的全局相關信息,自注意機制的提出就是為了彌補這一缺陷。θ,φ和g都是1×1×1的卷積核,實際上是為了降低通道數(shù),從而減少計算量。φ和g對特征圖卷積之后,為了減少參數(shù)會進行池化操作。同時為了便于計算也會對張量的維度進行變換。θ(xi),φ(xj)矩陣經(jīng)過點乘獲得每2個點之間的相關關系,softmax函數(shù)對點乘結果進行歸一化和突出差異。將歸一化的結果與g(xj)相乘,即將空間注意力機制應用到了所有通道的每張?zhí)卣鲌D對應位置上,本質(zhì)就是輸出的每個位置值都是其他所有位置的加權平均值。
yi=softmax(θ(xi)Tφ(xj))g(xj),
(2)
(3)
式中,xi為特征圖中當前關注位置的信息;xj為全局位置信息。
最后的1×1×1卷積核是對結果進行維度的調(diào)整,將它與最初的輸入維度保持一致。并用殘差連接將最后的結果Wzyi與輸入的特征xi圖融合得到輸出zi。Wz的初始值為0,保證自注意模塊的嵌入性,即:
zi=Wzyi+xi。
(4)
通過在解碼器中加入自注意層,對特征圖的處理中保留了更多的信息,并且能夠?qū)W習到遠距離位置間的相關性,大大提高了模型的精度,在實驗中也得到了驗證。
采用MSE損失函數(shù)來描述輸入數(shù)據(jù)和輸出模型間的差異:
(5)
使用的是Chen等人[3]處理過的ShapeNet數(shù)據(jù)集,包含飛機、汽車、椅子和桌子等13個類別的三維模型,共50 000個643分辨率的體素模型。其中80%用于訓練集,20%用于測試集,如圖4所示。
圖4 ShapeNet數(shù)據(jù)集Fig.4 ShapeNet datasets
實驗過程中,在ShapeNet訓練集的13個類別上訓練了本網(wǎng)絡。在 PyTorch 中實現(xiàn)了網(wǎng)絡模型的構建。初始的學習率、eps分別設置為10-5,10-8,Adam用于優(yōu)化學習速率,批量大小為8。在 20 GB 內(nèi)存的 Nvidia RTX 3090 Ti GPU上訓練本網(wǎng)絡,迭代一次需要600多秒,大概迭代300次,網(wǎng)絡開始收斂。
將在ShapeNet測試集上驗證提出的網(wǎng)絡模型。為了與基準保持一致,測試實驗中只生成了測試集中每類前100個模型,并計算它們的平均值。實驗將倒角距離(CD)和交并比(IOU)作為結果的評價指標。倒角距離描述的是預測的模型與真值之間的距離,其值越小越接近真值。交并比表示的是交集與并集的比值,其值越大交集越多。這2個指標常用作三維重建的損失函數(shù)或評價指標,來衡量生成模型與真實值的距離。采用Marching Cubes獲得渲染模型,并引入3DPytorch[27]提取1 024個點來計算CD值,PyMesh來計算IOU指標。在下列實驗結果中,為了更好地比較,CD值乘以1 000,IOU值乘以100,作為最終結果,同時更好的結果以黑色加粗表示。下面通過實驗確定了多級殘差網(wǎng)絡層數(shù)的超參數(shù),也設計了消融實驗來證明所加模塊的有效性。最后將本網(wǎng)絡產(chǎn)生的結果與最新的方法比較,證明了本網(wǎng)絡的可比較性。
Resnets在多種任務中都證明了它的有效性,但在三維任務中還沒有突出的研究成果。為了取得更好的精度,本文對三維表達任務中的3D-Resnets的層數(shù)進行了研究,并對多種層數(shù)的網(wǎng)絡進行了實驗,來獲得最好的結果,如表1所示。
表1 不同層數(shù)的3D-Resnets與CNN-AE的CD值Tab.1 CD values of CNN-AE and 3D-Resnets with different layers
在本次實驗中,比較了多層的多級殘差網(wǎng)絡,用CNN-AE的解碼器作為解碼器。實驗結果表明,在200次迭代下,18層的Resnets能在各個類別上取得最好的結果,相比CNN-AE也獲得了顯著的提升。因此在接下來的網(wǎng)絡中都使用18層的Resnets網(wǎng)絡進行比較。
將從實驗上驗證網(wǎng)絡中模塊的有效性。在消融研究中,將Light Res Sa(LRS)也就是加了深度卷積以及自注意機制的網(wǎng)絡與分別刪減這2個模塊的網(wǎng)絡進行比較。采用18層的多級殘差網(wǎng)絡作為編碼器,3D反卷積網(wǎng)絡作為解碼器。將其與在block中修改為深度分離卷積的Light Res(LR)和在解碼器中加了自注意機制的Res Sa(RS)比較,并在 ShapeNet數(shù)據(jù)集上進行實驗。本網(wǎng)絡可分為2部分:深度可分離卷積的多級殘差特征編碼器和自注意的解碼器。文中將重點介紹深度可分離卷積和自注意機制的有效性。
4.2.1 深度可分離卷積
為了減少模型的參數(shù)和內(nèi)存占用,在網(wǎng)絡中將Resnets的殘差塊中的卷積層調(diào)整為深度可分離卷積層。深度分離卷積是一種將卷積層分解的輕量級網(wǎng)絡結構,可以在保持精度的條件下,有效減小模型的大小,提高運行效率。網(wǎng)絡的調(diào)整如圖3所示,對比結果如表2所示,更好的結果用黑色加粗表示。調(diào)整前后的參數(shù)大小(單位MB)、內(nèi)存大小(單位GB)和訓練以及測試時間(單位s)對比如表3所示。
表2 消融實驗的CD值對比結果Tab.2 Comparison results of CD value in ablation experiment
表3 模型大小、參數(shù)的對比結果Tab.3 Comparison results of model size and parameters
通過Res Sa網(wǎng)絡與Light Res Sa網(wǎng)絡比較,可以看到模型的參數(shù)數(shù)量減少了12.1%,內(nèi)存占用率下降了約2.52%。同時,CD指標平均值與只用Resnets相比,僅下降了約8%,但同時訓練時間和測試時間有所加長。因此,實驗結果證明了加入深度可分離卷積可以對網(wǎng)絡進行優(yōu)化。
4.2.2 自注意機制
本文設計了適用于三維模型處理的自注意模塊,將其應用于解碼器的部分。它的作用主要是學習特征圖中每2個位置之間的相關性,從而改善傳統(tǒng)卷積操作感受野不足的缺陷,得到特征圖整體的信息。本網(wǎng)絡在解碼器的反卷積層中加入自注意機制。
實驗證明,加入自注意模塊后的確能夠優(yōu)化測試結果。實驗結果如表2所示。Light Res Sa與Light Res相比較,CD值的平均結果提升了3%左右,并且在絕大多類別上都有所提升,證明它的有效性。
將本網(wǎng)絡與最近的工作做了定性和定量的比較,并且也與最新的表示方法進行了比較,證明了本網(wǎng)絡的有效性和可比較性。
4.3.1 定性比較
用不同的方法在ShapeNet數(shù)據(jù)集上產(chǎn)生的體素模型如圖5所示。定性結果顯示,基于體素的自編碼器相對于隱函數(shù)表示的方法,更能保持體素網(wǎng)格的完整性。IM-AE產(chǎn)生的模型往往會有殘缺或者多余的部分,而CNN-AE和Light Res Sa及Res Sa網(wǎng)絡在大部分類別中都能重建出完整的體素網(wǎng)格。IM-AE的結果相對來說,表面更加平滑一些,這是因為IM-AE是基于體素表面的點來恢復結構的。與CNN-AE相比,Light Res Sa及Res Sa網(wǎng)絡能保留更多的細節(jié)和完整的結構,這正是3D-Resnets編碼器的能夠提取多級的殘差特征的緣故。
(a) Ground-truth
同時,對于柜子、槍支和船艇這樣具有很多細節(jié)的物體,重建的效果不是很好,往往得到的是不完整的網(wǎng)格模型,它們只能學習到粗糙的形狀,這也是很多生成模型存在的問題。
4.3.2 定量比較
為了評估生成模型,將實驗結果與最新的研究做定量比較。將交并比(IOU)和倒角距離(CD)值作為評價指標。
在5個類別上進行試驗,將Light-Res Sa和Res Sa與CNN-AE和IM-AE比較了CD和IOU結果,如表4所示。將計算的結果,與IM-AE發(fā)布的結果直接進行了比較,可以看到Res Sa網(wǎng)絡的結果是最好的,輕量級的Light Res Sa也在所有類別上超過了其他方法,僅次于Res Sa。本網(wǎng)絡的CD值在每個類別上超過其他方法。而IOU指標在大部分類別以及平均值上都很有優(yōu)勢。對于aircraft和rifle兩個類別上,本網(wǎng)絡相比CNN-AE在CD值上有一些降低。由圖5也可以看到,Light Res Sa及Res Sa網(wǎng)絡的結果中aircraft、rifle相對于CNN-AE,雖然都有整體的結構,但是缺少細節(jié)部分。因此可以認為對于具有復雜細節(jié)且微小部件的模型,Resnets可能有一定局限性??傮w上來說,本網(wǎng)絡的表示結果更加接近于真實模型。相對CNN-AE有很大提升。這證明了3D-Resnets在提取特征方面的重要作用,它可以在深度神經(jīng)網(wǎng)絡中有效地學習到三維特征,并將其映射到向量上。同樣也證明了Non-local block在保留全局信息上的有效性,因此模型的指標才超過了其他網(wǎng)絡。
表4 所提出的方法與基準方法IOU和CD指標對比Tab.4 Comparison of IOU and CD indicators between proposed method and reference method
為了進一步證明本網(wǎng)絡的有效性,在飛機、汽車、椅子等多個類別上將Light Res Sa及Res Sa網(wǎng)絡與Volumetric Primitives (VP)[4],Super Quadrics (SQ)[30],Branched Auto Encoders (BAE)[7],BSP[8]進行比較。其中BAE*[7]是BAE用隱函數(shù)生成的版本,這些網(wǎng)絡都是最近的三維模型生成方法。
結果如表5所示。由表中可以看到,與其他網(wǎng)絡相比, Res Sa網(wǎng)絡在所有類別上都取得了最好的結果,而Light Res Sa僅次于Res Sa,在大部分類別上超過其他方法。只在table和chair兩個類別上次于其他方法。2種網(wǎng)絡平均的結果也超過了其他類別。再次證明了本網(wǎng)絡與最新的方法相比,依然具有競爭力,能夠獲得精細的生成模型。
表5 所提出的方法與最近的方法IOU值的對比Tab.5 Comparison of IOU values between proposed method and recent methods
本文提出了一種形狀表達中的多級尺度殘差特征編碼模型,利用體素的多尺度特征之間相關性,學習更有效的特征編碼。在此基礎上在解碼器中引入自注意機制,進一步提高解碼模型的精度。此外,還探索研究了一種體素殘差編碼的深度分離卷積方法,在精度下降不大的條件下有效降低了模型的參數(shù)。通過消融實驗,證明了這些模塊的有效性。也通過定性以及定量實驗,證明了多級尺度殘差特征的編碼有效性。但在本文中只研究了形狀表達工作,在其他方向上有所不足。在以后的工作中,將探索形狀檢索、形狀分類等其他任務,以期得到更好的結果。