馮乾泰, 楊 猛, 付 慧
(北京林業(yè)大學(xué)信息學(xué)院,北京 100083)
隨著計算機軟硬件技術(shù)的迅猛發(fā)展,計算機圖形技術(shù)也得到了快速地發(fā)展,近幾年在自然景物模擬方面取得了重大進展,基于數(shù)學(xué)方法的仿真和模擬方法成為主流。
同時,隨著計算機硬件性能的提升,人工智能技術(shù)的廣泛普及和應(yīng)用,使得以深度學(xué)習(xí)為代表的機器學(xué)習(xí)技術(shù)也呈現(xiàn)出爆發(fā)式的發(fā)展,并廣泛應(yīng)用于金融、娛樂、醫(yī)學(xué)、交通等領(lǐng)域。深度學(xué)習(xí)在虛擬仿真中也有所應(yīng)用,其能否學(xué)習(xí)分析自然景象并生成近似自然現(xiàn)象的數(shù)據(jù)成為一個需探索的問題。
利用計算機圖形學(xué)技術(shù)對樹葉飄落的自然景象進行仿真模擬,可以在動畫和游戲場景中對周邊環(huán)境進行渲染以烘托情節(jié)使用,同時也可在植物學(xué)、園林等領(lǐng)域的研究與教學(xué)工作中發(fā)揮舉足輕重的作用。
但傳統(tǒng)的對樹葉飄落等自然現(xiàn)象的模擬方法大多是基于數(shù)學(xué)或數(shù)學(xué)方法,對機器配置及性能要求較高,難以滿足大規(guī)模以及移動端的渲染要求,同時與真實環(huán)境中樹葉飄落的效果相比仍有一定的差異,傳統(tǒng)方法的不足顯而易見。因此需要積極尋求新的方法,當(dāng)下已有從主機端向移動端遷移的應(yīng)用趨勢,其可減少渲染對設(shè)備性能產(chǎn)生的負(fù)荷。
為此,本文提出一種雙通道對抗式生成網(wǎng)絡(luò)的生成模型(double-channel auxiliary classifier generative adversarial networks,DACGAN),用于學(xué)習(xí)和生成樹葉飄落的數(shù)據(jù)。為虛擬現(xiàn)實領(lǐng)域中樹葉飄落模擬提供一個新的思路。算法如圖1所示,模型通過一組服從正態(tài)分布的隨機噪聲和人工標(biāo)簽向量的輸入(風(fēng)力級別、擾動級別等),能夠輸出任意數(shù)量符合標(biāo)簽的飄落數(shù)據(jù)序列,并輸入到渲染環(huán)境中進行繪制。
圖1 算法示例
本文的主要貢獻為:①提出一種基于數(shù)學(xué)模型的仿真數(shù)據(jù)集生成算法及相應(yīng)數(shù)據(jù)處理算法;②針對樹葉飄落產(chǎn)生的雙通道序列數(shù)據(jù),提出一種DACGAN模型。
樹葉飄落的動態(tài)模擬屬于對自然場景及景象的模擬,國內(nèi)外已有一些針對性研究。
文獻[1]提供了一個樹葉運動的模型,并將樹葉分為可運動的和不可運動2種。其中可運動的樹葉又被分成葉柄旋轉(zhuǎn)和葉面旋轉(zhuǎn)2部分,最終的運動為 2部分的疊加。通過簡單的動力學(xué)且忽略葉片彎曲等特殊情況,實現(xiàn)樹葉的旋轉(zhuǎn)和飄落效果。文獻[2]探討了樹葉的幾何模型并通過噪聲的方法來模擬樹葉的自然運動。
文獻[3]提出了Omni-AD模型,構(gòu)建了一個新型的、利用數(shù)據(jù)驅(qū)動的、關(guān)于三維剛體對象的空氣動力學(xué)模型,可以實時交互性模擬剛體運動。文獻[4]提出一種現(xiàn)象學(xué)方法,在薄盤上施加力和力矩然后通過四階Runge-Kutta方法來計算薄盤的運動狀態(tài),但該方法僅限于2個維度。
文獻[5]基于文獻[4]的現(xiàn)象學(xué)方法提出了樹葉飄落數(shù)學(xué)模型,并實現(xiàn)了三維空間中的樹葉飄落。該方法的視覺效果具有較強的真實性。
當(dāng)下樹葉飄落的模擬研究仍以基于數(shù)學(xué)方法以及參數(shù)控制的數(shù)學(xué)模型為主,該方法存在2個問題:①對算法的要求較高,如果算法不能滿足仿真需求,則生成的路徑可能缺乏真實性。如果算法的仿真度較高,則會增加對設(shè)備性能的要求;②相對于真實樹葉飄落場景,通過建立數(shù)學(xué)模型進行模擬的真實性有待確認(rèn)。“世界上沒有兩片完全相同的樹葉”,樹葉飄落的軌跡也是一樣。通過數(shù)學(xué)模型控制飄落的方法能否具有真實感、隨機感和美感仍是一個問題。
文獻[6]提出了一個生成式對抗網(wǎng)絡(luò)(generative adversarial networks,GAN)。該方法通過不斷改進和完善,在圖像生成、風(fēng)格遷移等領(lǐng)域具有良好地應(yīng)用前景。
文獻[7]提出一個無監(jiān)督深度卷積神經(jīng)網(wǎng)絡(luò)(deep convolutional generative adversarial networks,DCGAN)模型,能夠提升GAN對圖片的學(xué)習(xí)和生成效果。文獻[8]提出了Conditional GAN (CGAN)模型,可通過標(biāo)簽來控制GAN的輸出,該方法相對于無標(biāo)簽訓(xùn)練的傳統(tǒng)模型,可以使GAN提供更多的控制效果。
文獻[9]在判別器中添加輔助分類器來進行帶條件的圖片合成算法。算法將數(shù)據(jù)的標(biāo)簽和數(shù)據(jù)一起作為模型的輸入,使生成的數(shù)據(jù)具有多樣性。通過對傳統(tǒng)生成對抗模型的修改和提升,相對于CGAN有更強的魯棒性。
對于深度學(xué)習(xí)而言,好的輸入代表好的輸出。所使用的深度攝像機以及跟蹤算法精度越高,獲取樹葉飄落的三維信息質(zhì)量越好,模型訓(xùn)練后的輸出結(jié)果就越接近真實。但由于時間和實驗設(shè)備的限制,暫時使用基于數(shù)學(xué)模型合成的數(shù)據(jù)對模型進行訓(xùn)練及測試。若有好的學(xué)習(xí)效果,可保證實驗獲取的數(shù)據(jù)能夠達到理想預(yù)期。另外,選取理想的仿真模型后,參考文獻[10]的方法,將同時利用仿真數(shù)據(jù)和真實數(shù)據(jù),減少訓(xùn)練人工標(biāo)注的麻煩。
樹葉飄落具有豐富的特性,如旋轉(zhuǎn)、抖動、隨機效果、速度突變等。選取一個仿真度較高的模型來生成數(shù)據(jù)至關(guān)重要。
本文采用基于文獻[5]提出的樹葉飄落數(shù)學(xué)模型進行模擬并采集數(shù)據(jù)。當(dāng)樹葉所受風(fēng)力和力矩超過人為設(shè)定的閾值后,樹葉將進行飄落。風(fēng)對樹葉產(chǎn)生的力fwind和力矩τwind可表示為
其中,vrel=vwing-vleaf,vwing為風(fēng)力,vleaf為樹葉剛體質(zhì)心的速度;vrel,n=(vrel·n)n,vrel,t=vrel-vrel,n,n為樹葉的法向;ρ為空氣密度;kl為比例因子;At為葉子代表的區(qū)域三角形;m為葉子質(zhì)量;v為一個空氣阻力乘數(shù);ξ為正常阻力系數(shù)與切向阻力系數(shù);φ(非零)為一個方位偏移使樹葉產(chǎn)生三維旋轉(zhuǎn)運動;frandom和τrandom為本文增加的矢量,分別是人為設(shè)置的隨機力和力矩,在一個隨機范圍取值,不同的風(fēng)力下設(shè)置不同的隨機范圍。既能驗證不同條件下模型對標(biāo)簽的學(xué)習(xí)能力,也能增強樹葉飄落的隨機效果。
選定數(shù)學(xué)模型后,如何采集需要的數(shù)據(jù)使模型訓(xùn)練達到最優(yōu)的效果,同時適應(yīng)真實環(huán)境中采集到的數(shù)據(jù)成為關(guān)鍵的問題。為此,本文提出一套針對樹葉飄落數(shù)據(jù)采集的流程算法(圖2)。
圖2 數(shù)據(jù)處理流程
首先需要確定采集的數(shù)據(jù)Ds。Ds是仿真實驗中若干樹葉飄落數(shù)據(jù)L0,L1,L2,L3,···的集合。
而對于任意一條樹葉飄落的數(shù)據(jù)Ln,可將樹葉視作剛體,即在飄落過程中樹葉不發(fā)生彎曲,則由完整飄落過程中樹葉剛體質(zhì)心位置P以及旋轉(zhuǎn)角R序列組成。
圖3為三維環(huán)境,在t時刻,由6元時間序列表示的樹葉運動信息(xt,yt,zt,αt,βt,γt),其中位置Pt可用(xt,yt,zt) 3個變量表示;而旋轉(zhuǎn)角Rt則由(αt,βt,γt)表示。
圖3 樹葉飄落序列參數(shù)
所以,在仿真數(shù)據(jù)獲取中,采集樹葉飄落過程中產(chǎn)生的 6 元時間序列(xt,yt,zt,αt,βt,γt)即可。
在獲取仿真數(shù)據(jù)Ds后,需將經(jīng)過數(shù)據(jù)處理得到的Dinput輸入到DACGAN中。數(shù)據(jù)處理采用“先間隔,后插值”的方法,可在一定程度上解決現(xiàn)實中由于設(shè)備和跟蹤算法不精確導(dǎo)致的抖動漂移產(chǎn)生的三維信息。“先間隔”如算法1所示,訓(xùn)練前對數(shù)據(jù)Ds采取間隔方式取值;“后插值”如算法 2所示,在訓(xùn)練后輸入到三維環(huán)境渲染之前對Doutput按需求插值。另外,訓(xùn)練后數(shù)據(jù)處理算法應(yīng)在模型訓(xùn)練前對數(shù)據(jù)進行規(guī)范化,其有助于模型的訓(xùn)練。
算法1
輸入:仿真數(shù)據(jù)Ds。
輸出:預(yù)處理后的數(shù)據(jù)Dinput。
步驟1.讀入數(shù)據(jù)Ds。
步驟 2.在 6 元時間序列(xt,yt,zt,αt,βt,γt)中人工設(shè)定間隔i,獲取間隔數(shù)據(jù)。
步驟3.將間隔數(shù)據(jù)進行z-score規(guī)范化,生成數(shù)據(jù)Dinput。
算法2
輸入:生成數(shù)據(jù)Doutput。
輸出:預(yù)處理后的數(shù)據(jù)D。
步驟1.讀入數(shù)據(jù)Doutput。
步驟2.對Doutput進行逆規(guī)范化。
步驟3.將逆規(guī)范化后的數(shù)據(jù)的路徑和旋轉(zhuǎn)數(shù)據(jù)分別進行B-spline插值和線性插值。
步驟4.進行可視化。對視覺上不合理的數(shù)據(jù)進行刪除,獲得篩選后的數(shù)據(jù)D。
文獻[6]提出的對抗式生成網(wǎng)絡(luò)(Vanilla GAN)是非常神奇且迷人的一種生成模型。其能夠?qū)W習(xí)一組數(shù)據(jù)分布,并生成近似于該分布的數(shù)據(jù)。該模型在圖像生成方面已經(jīng)有許多的研究和應(yīng)用。GAN蘊涵著一種“零和博弈”的理論:通過生成器和判別器之間的對抗,提升兩者的性能,最后使生成器生成的數(shù)據(jù)可以“以假亂真”,且逼近真實數(shù)據(jù)。
Vanilla GAN同時訓(xùn)練2個模型。生成模型G可產(chǎn)生數(shù)據(jù)分布,判別模型D可對數(shù)據(jù)分布與真實數(shù)據(jù)分布進行判斷。兩者分別對結(jié)果進行極大極小化。生成模型和判別模型進行博弈,最終達到理論所支持的納什均衡。該模型的出現(xiàn)為機器學(xué)習(xí)提出了一種新的可能,基于該模型產(chǎn)生了越來越多針對不同任務(wù)的變體,模型的性能被不斷優(yōu)化。GAN的最終目標(biāo)為優(yōu)化最大最小公式,即
其中,z為輸入生成器的噪聲;G(z)為生成器生成的數(shù)據(jù);x為真實數(shù)據(jù)。
Vanilla GAN是針對圖片進行生成,生成器G和判別器D都是基于二維卷積進行模型搭建。本文研究在樹葉飄落的生成中,輸入和輸出均是一組6元時間序列。針對序列的學(xué)習(xí)和生成有卷積、RNN以及 LSTM[11]方法。本文采用一維卷積進行模型的搭建,如圖4所示。
圖4 DACGAN結(jié)構(gòu)
為了能夠控制生成器的輸出,本文參考ACGAN模型,在D的輸出部分添加一個輔助的分類器以提高GAN的性能。生成器G在輸入一組噪聲時,還輸入一組標(biāo)簽向量,該向量表示生成數(shù)據(jù)的屬性,如風(fēng)力大小等,并輸出包含位移與旋轉(zhuǎn)的6D姿態(tài)數(shù)據(jù)。而判別器不僅要判斷數(shù)據(jù)是否為真,同時需要判斷數(shù)據(jù)的標(biāo)簽并進行分類。以此控制模型的輸出,在風(fēng)力、風(fēng)向等不同的條件下通過不同標(biāo)簽的輸入讓模型生成所期望的數(shù)據(jù)。相對于根據(jù)噪聲向量隨機輸出,本文算法具有更好地控制效果,更適應(yīng)樹葉飄落的實際應(yīng)用要求。
DACGAN的生成器G使用一維卷積替代ACGAN中的二維卷積,并通過一個數(shù)字標(biāo)簽來表示風(fēng)力的大小。另外,G與D均使用LeakyReLU[12]作為激活函數(shù)。模型的目標(biāo)函數(shù)為
其中,判別器D的訓(xùn)練使LS+LC最大化,生成器G的訓(xùn)練使LC-LS最大化。
同時有別于傳統(tǒng)圖像單通道二維卷積生成的方法,對于樹葉飄落數(shù)據(jù)的學(xué)習(xí),還借鑒了文獻[14]中提出到的模型,即生成器G采用雙通道的方法學(xué)習(xí)多元信息,對路徑和旋轉(zhuǎn)數(shù)據(jù)分別建立一個對稱的通道進行訓(xùn)練;而在判別器D的隱藏層中采用雙向LSTM來學(xué)習(xí)拼接后的路徑和旋轉(zhuǎn)信息。經(jīng)生成效果證明,該方法相對于單純的深度一維卷積的方法學(xué)習(xí)和生成的效果更好,生成的路徑數(shù)據(jù)點更加穩(wěn)定和連貫。
實驗在Windows 10下搭建見表1,設(shè)備使用了64位Intel六代i5處理器,GTX1060 3G圖形處理器,8 GB運行內(nèi)存。使用Visual Studio 2017進行Unity3D接口編程、數(shù)據(jù)處理以及模型構(gòu)建編程。
表1 實驗環(huán)境
三維渲染測試平臺為Unity3D,用于仿真數(shù)據(jù)制作以及模型數(shù)據(jù)生成效果展示;并使用了免費資源包Hand Painted Nature Kit Lite進行效果展示的場景搭建。場景的頂點數(shù)為484.3 k,面片數(shù)為460.3 k;樹葉模型頂點數(shù)為 2.1 k,面片數(shù)為 2.0 k;模型DACGAN由基于深度學(xué)習(xí)庫Tensorflow的高級學(xué)習(xí)框架Keras搭建。
本次實驗生成的數(shù)據(jù)來源于在 Unity3D中進行數(shù)學(xué)模型的搭建并生成仿真的數(shù)據(jù)。本文實驗試圖生成3類數(shù)據(jù)并使用DACGAN進行學(xué)習(xí),并觀察學(xué)習(xí)效果。實驗生成條件為:強風(fēng)、中風(fēng)、弱風(fēng)。數(shù)學(xué)模型的參數(shù)見表2。風(fēng)力越強,風(fēng)速越高。通過設(shè)置3檔位的風(fēng)速來模擬3種風(fēng)力大小,分別對應(yīng)數(shù)字0,1,2作為標(biāo)簽輸入到DACGAN中。另外,一個樹葉飄落路徑共記錄360幀的序列數(shù)據(jù)。
表2 數(shù)學(xué)模型參數(shù)
在 Unity3D 中,數(shù)據(jù)(xt,yt,zt)對應(yīng)transform.position 屬 性 , (αt,βt,γt) 對 應(yīng)transform.eulerAngles屬性;強風(fēng)、中風(fēng)、弱風(fēng)的條件則分別設(shè)置不同范圍的隨機擾動變量frandom與τrandom,讓樹葉飄落效果在視覺上產(chǎn)生層次差異即可。
本次實驗共生成了3 000條序列進行訓(xùn)練,每種條件各1 000條。經(jīng)過訓(xùn)練前數(shù)據(jù)處理后,使用該數(shù)據(jù)對 DACGAN進行生成器和判別器交替訓(xùn)練;當(dāng)生成器或判別器的損失(Loss)大于某個閾值t時,重復(fù)訓(xùn)練生成器或判別器,直至低于該閾值為止。每1 000 Epochs生成一次若干條不同標(biāo)簽下的數(shù)據(jù),導(dǎo)入Unity3D中進行樹葉飄落效果的人工檢驗,并在人工檢驗視覺合理時停止訓(xùn)練。
表3中DACGAN所使用的優(yōu)化器Optimizer為Adam[13],根據(jù)實際的測試效果,學(xué)習(xí)率lr設(shè)置為0. 000 2,一階矩估計Beta-1設(shè)置為0.50。一階矩估計Beta-2為0.99 (默認(rèn)值)。過大的學(xué)習(xí)率會造成學(xué)習(xí)震蕩而無法收斂,訓(xùn)練精度差;過低的學(xué)習(xí)率會造成收斂速度慢。用于調(diào)整學(xué)習(xí)率的矩估計值Beta-1比默認(rèn)值0.90稍低,用于適當(dāng)降低學(xué)習(xí)率的衰減。
表3 模型參數(shù)
DACGAN對標(biāo)簽類別 Class和真假判斷Validity分別使用2個損失函數(shù)。由于真假判斷是一個二值判斷(0和1),所以本文使用二值交叉熵,該損失函數(shù)適用于二分類。以及由于標(biāo)簽采用數(shù)字編碼(0,1,2),所以對標(biāo)簽使用稀疏分類交叉熵,該損失函數(shù)適用于稀疏情況的多分類。
訓(xùn)練后的 DACGAN即可按照需求生成樹葉飄落的數(shù)據(jù)。路徑數(shù)據(jù)部分三維可視化如圖5所示,可以看出,路徑的真實感強、多樣性豐富、弱風(fēng)(標(biāo)簽0)、中風(fēng)(標(biāo)簽1)、強風(fēng)(標(biāo)簽2)下的差異性明顯。
圖5 模型生成效果圖(路徑部分)
將生成的路徑和旋轉(zhuǎn)序列經(jīng)過訓(xùn)練后數(shù)據(jù)處理(算法2)后,輸入到Unity3D中進行測試,初始參數(shù)相同,在風(fēng)速為(1,0,0)的條件下,數(shù)學(xué)模型與DACGAN生成的數(shù)據(jù)渲染效果對比如圖6所示??梢奃ACGAN的學(xué)習(xí)效果較好,但是在加速度的學(xué)習(xí)和展現(xiàn)上仍有欠缺。
由DACGAN生成的數(shù)據(jù)在大型森林場景渲染效果如圖7所示。通過對場景中每一片樹葉進行腳本綁定,使其使用DACGAN預(yù)生成的數(shù)據(jù)進行運動后,可替代實時數(shù)學(xué)模型計算生成的效果,并進行樹葉飄落的繪制。注意最好一次性將數(shù)據(jù)輸入至內(nèi)存中,以減少數(shù)據(jù)的讀寫過程,從而提高性能。
對包含樹葉的靜態(tài)場景,使用本文算法及數(shù)學(xué)模型算法[5]的仿真場景分別進行性能測試,結(jié)果如圖8所示。
圖6 數(shù)學(xué)模型與DACGAN效果對比
從零片樹葉開始,渲染環(huán)境每增加300片樹葉進行一次幀率(FPS)測試??芍诋?dāng)前渲染條件下,使用本文算法及數(shù)學(xué)模型算法[5]的仿真場景的幀率,均在靜態(tài)場景的幀率附近上下波動,說明2種算法對幀率均影響不大。
圖7 模型生成數(shù)據(jù)在Unity3D中的渲染效果(200片樹葉)
圖8 幀率測試效果
本文通過生成式對抗神經(jīng)網(wǎng)絡(luò)對仿真數(shù)據(jù)集進行學(xué)習(xí),實現(xiàn)了對樹葉飄落效果的模擬和生成,提出了一種基于真實數(shù)據(jù)采集進行的動畫仿真模式。通過實驗證實了本文方法的可行性,為深度學(xué)習(xí)與虛擬現(xiàn)實仿真技術(shù)結(jié)合提供了新的思路。
在實驗中,雖然模式坍塌問題解決了(圖 9),但模型的學(xué)習(xí)效果仍需提高,生成數(shù)據(jù)與仿真數(shù)據(jù)集在視覺上仍然有一定的差距。
圖9 弱風(fēng)條件下具有多樣性和真實性的生成數(shù)據(jù)樣本((a)~(i)為隨機生成數(shù)據(jù)樣本)
在后續(xù)的工作中,將繼續(xù)針對樹葉飄落產(chǎn)生的多元時序列優(yōu)化深度學(xué)習(xí)算法和模型結(jié)構(gòu),使訓(xùn)練更穩(wěn)定、效果更佳,生成的樣本具有更強的真實性和多樣性。WGAN[14],WGAN-GP[15],LSGAN[16]等模型都提供了解決問題的思路。
另外,將針對樹葉飄落的數(shù)學(xué)評估算法[17]研究,與人工檢驗視覺效果結(jié)合,共同評估模型生成數(shù)據(jù)的質(zhì)量。
最后,將使用真實的三維數(shù)據(jù)替代數(shù)學(xué)模型合成的數(shù)據(jù),并測試真實環(huán)境下的學(xué)習(xí)效果,同時解決在真實環(huán)境下樹葉飄落數(shù)據(jù)獲取過程中所產(chǎn)生的問題。