馮乾泰, 楊 猛, 付 慧
(北京林業大學信息學院,北京 100083)
隨著計算機軟硬件技術的迅猛發展,計算機圖形技術也得到了快速地發展,近幾年在自然景物模擬方面取得了重大進展,基于數學方法的仿真和模擬方法成為主流。
同時,隨著計算機硬件性能的提升,人工智能技術的廣泛普及和應用,使得以深度學習為代表的機器學習技術也呈現出爆發式的發展,并廣泛應用于金融、娛樂、醫學、交通等領域。深度學習在虛擬仿真中也有所應用,其能否學習分析自然景象并生成近似自然現象的數據成為一個需探索的問題。
利用計算機圖形學技術對樹葉飄落的自然景象進行仿真模擬,可以在動畫和游戲場景中對周邊環境進行渲染以烘托情節使用,同時也可在植物學、園林等領域的研究與教學工作中發揮舉足輕重的作用。
但傳統的對樹葉飄落等自然現象的模擬方法大多是基于數學或數學方法,對機器配置及性能要求較高,難以滿足大規模以及移動端的渲染要求,同時與真實環境中樹葉飄落的效果相比仍有一定的差異,傳統方法的不足顯而易見。因此需要積極尋求新的方法,當下已有從主機端向移動端遷移的應用趨勢,其可減少渲染對設備性能產生的負荷。
為此,本文提出一種雙通道對抗式生成網絡的生成模型(double-channel auxiliary classifier generative adversarial networks,DACGAN),用于學習和生成樹葉飄落的數據。為虛擬現實領域中樹葉飄落模擬提供一個新的思路。算法如圖1所示,模型通過一組服從正態分布的隨機噪聲和人工標簽向量的輸入(風力級別、擾動級別等),能夠輸出任意數量符合標簽的飄落數據序列,并輸入到渲染環境中進行繪制。

圖1 算法示例
本文的主要貢獻為:①提出一種基于數學模型的仿真數據集生成算法及相應數據處理算法;②針對樹葉飄落產生的雙通道序列數據,提出一種DACGAN模型。
樹葉飄落的動態模擬屬于對自然場景及景象的模擬,國內外已有一些針對性研究。
文獻[1]提供了一個樹葉運動的模型,并將樹葉分為可運動的和不可運動2種。其中可運動的樹葉又被分成葉柄旋轉和葉面旋轉2部分,最終的運動為 2部分的疊加。通過簡單的動力學且忽略葉片彎曲等特殊情況,實現樹葉的旋轉和飄落效果。文獻[2]探討了樹葉的幾何模型并通過噪聲的方法來模擬樹葉的自然運動。
文獻[3]提出了Omni-AD模型,構建了一個新型的、利用數據驅動的、關于三維剛體對象的空氣動力學模型,可以實時交互性模擬剛體運動。文獻[4]提出一種現象學方法,在薄盤上施加力和力矩然后通過四階Runge-Kutta方法來計算薄盤的運動狀態,但該方法僅限于2個維度。
文獻[5]基于文獻[4]的現象學方法提出了樹葉飄落數學模型,并實現了三維空間中的樹葉飄落。該方法的視覺效果具有較強的真實性。
當下樹葉飄落的模擬研究仍以基于數學方法以及參數控制的數學模型為主,該方法存在2個問題:①對算法的要求較高,如果算法不能滿足仿真需求,則生成的路徑可能缺乏真實性。如果算法的仿真度較高,則會增加對設備性能的要求;②相對于真實樹葉飄落場景,通過建立數學模型進行模擬的真實性有待確認。“世界上沒有兩片完全相同的樹葉”,樹葉飄落的軌跡也是一樣。通過數學模型控制飄落的方法能否具有真實感、隨機感和美感仍是一個問題。
文獻[6]提出了一個生成式對抗網絡(generative adversarial networks,GAN)。該方法通過不斷改進和完善,在圖像生成、風格遷移等領域具有良好地應用前景。
文獻[7]提出一個無監督深度卷積神經網絡(deep convolutional generative adversarial networks,DCGAN)模型,能夠提升GAN對圖片的學習和生成效果。文獻[8]提出了Conditional GAN (CGAN)模型,可通過標簽來控制GAN的輸出,該方法相對于無標簽訓練的傳統模型,可以使GAN提供更多的控制效果。
文獻[9]在判別器中添加輔助分類器來進行帶條件的圖片合成算法。算法將數據的標簽和數據一起作為模型的輸入,使生成的數據具有多樣性。通過對傳統生成對抗模型的修改和提升,相對于CGAN有更強的魯棒性。
對于深度學習而言,好的輸入代表好的輸出。所使用的深度攝像機以及跟蹤算法精度越高,獲取樹葉飄落的三維信息質量越好,模型訓練后的輸出結果就越接近真實。但由于時間和實驗設備的限制,暫時使用基于數學模型合成的數據對模型進行訓練及測試。若有好的學習效果,可保證實驗獲取的數據能夠達到理想預期。另外,選取理想的仿真模型后,參考文獻[10]的方法,將同時利用仿真數據和真實數據,減少訓練人工標注的麻煩。
樹葉飄落具有豐富的特性,如旋轉、抖動、隨機效果、速度突變等。選取一個仿真度較高的模型來生成數據至關重要。
本文采用基于文獻[5]提出的樹葉飄落數學模型進行模擬并采集數據。當樹葉所受風力和力矩超過人為設定的閾值后,樹葉將進行飄落。風對樹葉產生的力fwind和力矩τwind可表示為

其中,vrel=vwing-vleaf,vwing為風力,vleaf為樹葉剛體質心的速度;vrel,n=(vrel·n)n,vrel,t=vrel-vrel,n,n為樹葉的法向;ρ為空氣密度;kl為比例因子;At為葉子代表的區域三角形;m為葉子質量;v為一個空氣阻力乘數;ξ為正常阻力系數與切向阻力系數;φ(非零)為一個方位偏移使樹葉產生三維旋轉運動;frandom和τrandom為本文增加的矢量,分別是人為設置的隨機力和力矩,在一個隨機范圍取值,不同的風力下設置不同的隨機范圍。既能驗證不同條件下模型對標簽的學習能力,也能增強樹葉飄落的隨機效果。
選定數學模型后,如何采集需要的數據使模型訓練達到最優的效果,同時適應真實環境中采集到的數據成為關鍵的問題。為此,本文提出一套針對樹葉飄落數據采集的流程算法(圖2)。

圖2 數據處理流程
首先需要確定采集的數據Ds。Ds是仿真實驗中若干樹葉飄落數據L0,L1,L2,L3,···的集合。
而對于任意一條樹葉飄落的數據Ln,可將樹葉視作剛體,即在飄落過程中樹葉不發生彎曲,則由完整飄落過程中樹葉剛體質心位置P以及旋轉角R序列組成。
圖3為三維環境,在t時刻,由6元時間序列表示的樹葉運動信息(xt,yt,zt,αt,βt,γt),其中位置Pt可用(xt,yt,zt) 3個變量表示;而旋轉角Rt則由(αt,βt,γt)表示。

圖3 樹葉飄落序列參數
所以,在仿真數據獲取中,采集樹葉飄落過程中產生的 6 元時間序列(xt,yt,zt,αt,βt,γt)即可。
在獲取仿真數據Ds后,需將經過數據處理得到的Dinput輸入到DACGAN中。數據處理采用“先間隔,后插值”的方法,可在一定程度上解決現實中由于設備和跟蹤算法不精確導致的抖動漂移產生的三維信息。“先間隔”如算法1所示,訓練前對數據Ds采取間隔方式取值;“后插值”如算法 2所示,在訓練后輸入到三維環境渲染之前對Doutput按需求插值。另外,訓練后數據處理算法應在模型訓練前對數據進行規范化,其有助于模型的訓練。
算法1
輸入:仿真數據Ds。
輸出:預處理后的數據Dinput。
步驟1.讀入數據Ds。
步驟 2.在 6 元時間序列(xt,yt,zt,αt,βt,γt)中人工設定間隔i,獲取間隔數據。
步驟3.將間隔數據進行z-score規范化,生成數據Dinput。
算法2
輸入:生成數據Doutput。
輸出:預處理后的數據D。
步驟1.讀入數據Doutput。
步驟2.對Doutput進行逆規范化。
步驟3.將逆規范化后的數據的路徑和旋轉數據分別進行B-spline插值和線性插值。
步驟4.進行可視化。對視覺上不合理的數據進行刪除,獲得篩選后的數據D。
文獻[6]提出的對抗式生成網絡(Vanilla GAN)是非常神奇且迷人的一種生成模型。其能夠學習一組數據分布,并生成近似于該分布的數據。該模型在圖像生成方面已經有許多的研究和應用。GAN蘊涵著一種“零和博弈”的理論:通過生成器和判別器之間的對抗,提升兩者的性能,最后使生成器生成的數據可以“以假亂真”,且逼近真實數據。
Vanilla GAN同時訓練2個模型。生成模型G可產生數據分布,判別模型D可對數據分布與真實數據分布進行判斷。兩者分別對結果進行極大極小化。生成模型和判別模型進行博弈,最終達到理論所支持的納什均衡。該模型的出現為機器學習提出了一種新的可能,基于該模型產生了越來越多針對不同任務的變體,模型的性能被不斷優化。GAN的最終目標為優化最大最小公式,即

其中,z為輸入生成器的噪聲;G(z)為生成器生成的數據;x為真實數據。
Vanilla GAN是針對圖片進行生成,生成器G和判別器D都是基于二維卷積進行模型搭建。本文研究在樹葉飄落的生成中,輸入和輸出均是一組6元時間序列。針對序列的學習和生成有卷積、RNN以及 LSTM[11]方法。本文采用一維卷積進行模型的搭建,如圖4所示。

圖4 DACGAN結構
為了能夠控制生成器的輸出,本文參考ACGAN模型,在D的輸出部分添加一個輔助的分類器以提高GAN的性能。生成器G在輸入一組噪聲時,還輸入一組標簽向量,該向量表示生成數據的屬性,如風力大小等,并輸出包含位移與旋轉的6D姿態數據。而判別器不僅要判斷數據是否為真,同時需要判斷數據的標簽并進行分類。以此控制模型的輸出,在風力、風向等不同的條件下通過不同標簽的輸入讓模型生成所期望的數據。相對于根據噪聲向量隨機輸出,本文算法具有更好地控制效果,更適應樹葉飄落的實際應用要求。
DACGAN的生成器G使用一維卷積替代ACGAN中的二維卷積,并通過一個數字標簽來表示風力的大小。另外,G與D均使用LeakyReLU[12]作為激活函數。模型的目標函數為

其中,判別器D的訓練使LS+LC最大化,生成器G的訓練使LC-LS最大化。
同時有別于傳統圖像單通道二維卷積生成的方法,對于樹葉飄落數據的學習,還借鑒了文獻[14]中提出到的模型,即生成器G采用雙通道的方法學習多元信息,對路徑和旋轉數據分別建立一個對稱的通道進行訓練;而在判別器D的隱藏層中采用雙向LSTM來學習拼接后的路徑和旋轉信息。經生成效果證明,該方法相對于單純的深度一維卷積的方法學習和生成的效果更好,生成的路徑數據點更加穩定和連貫。
實驗在Windows 10下搭建見表1,設備使用了64位Intel六代i5處理器,GTX1060 3G圖形處理器,8 GB運行內存。使用Visual Studio 2017進行Unity3D接口編程、數據處理以及模型構建編程。

表1 實驗環境
三維渲染測試平臺為Unity3D,用于仿真數據制作以及模型數據生成效果展示;并使用了免費資源包Hand Painted Nature Kit Lite進行效果展示的場景搭建。場景的頂點數為484.3 k,面片數為460.3 k;樹葉模型頂點數為 2.1 k,面片數為 2.0 k;模型DACGAN由基于深度學習庫Tensorflow的高級學習框架Keras搭建。
本次實驗生成的數據來源于在 Unity3D中進行數學模型的搭建并生成仿真的數據。本文實驗試圖生成3類數據并使用DACGAN進行學習,并觀察學習效果。實驗生成條件為:強風、中風、弱風。數學模型的參數見表2。風力越強,風速越高。通過設置3檔位的風速來模擬3種風力大小,分別對應數字0,1,2作為標簽輸入到DACGAN中。另外,一個樹葉飄落路徑共記錄360幀的序列數據。

表2 數學模型參數
在 Unity3D 中,數據(xt,yt,zt)對應transform.position 屬 性 , (αt,βt,γt) 對 應transform.eulerAngles屬性;強風、中風、弱風的條件則分別設置不同范圍的隨機擾動變量frandom與τrandom,讓樹葉飄落效果在視覺上產生層次差異即可。
本次實驗共生成了3 000條序列進行訓練,每種條件各1 000條。經過訓練前數據處理后,使用該數據對 DACGAN進行生成器和判別器交替訓練;當生成器或判別器的損失(Loss)大于某個閾值t時,重復訓練生成器或判別器,直至低于該閾值為止。每1 000 Epochs生成一次若干條不同標簽下的數據,導入Unity3D中進行樹葉飄落效果的人工檢驗,并在人工檢驗視覺合理時停止訓練。
表3中DACGAN所使用的優化器Optimizer為Adam[13],根據實際的測試效果,學習率lr設置為0. 000 2,一階矩估計Beta-1設置為0.50。一階矩估計Beta-2為0.99 (默認值)。過大的學習率會造成學習震蕩而無法收斂,訓練精度差;過低的學習率會造成收斂速度慢。用于調整學習率的矩估計值Beta-1比默認值0.90稍低,用于適當降低學習率的衰減。

表3 模型參數
DACGAN對標簽類別 Class和真假判斷Validity分別使用2個損失函數。由于真假判斷是一個二值判斷(0和1),所以本文使用二值交叉熵,該損失函數適用于二分類。以及由于標簽采用數字編碼(0,1,2),所以對標簽使用稀疏分類交叉熵,該損失函數適用于稀疏情況的多分類。
訓練后的 DACGAN即可按照需求生成樹葉飄落的數據。路徑數據部分三維可視化如圖5所示,可以看出,路徑的真實感強、多樣性豐富、弱風(標簽0)、中風(標簽1)、強風(標簽2)下的差異性明顯。

圖5 模型生成效果圖(路徑部分)
將生成的路徑和旋轉序列經過訓練后數據處理(算法2)后,輸入到Unity3D中進行測試,初始參數相同,在風速為(1,0,0)的條件下,數學模型與DACGAN生成的數據渲染效果對比如圖6所示。可見DACGAN的學習效果較好,但是在加速度的學習和展現上仍有欠缺。
由DACGAN生成的數據在大型森林場景渲染效果如圖7所示。通過對場景中每一片樹葉進行腳本綁定,使其使用DACGAN預生成的數據進行運動后,可替代實時數學模型計算生成的效果,并進行樹葉飄落的繪制。注意最好一次性將數據輸入至內存中,以減少數據的讀寫過程,從而提高性能。
對包含樹葉的靜態場景,使用本文算法及數學模型算法[5]的仿真場景分別進行性能測試,結果如圖8所示。

圖6 數學模型與DACGAN效果對比
從零片樹葉開始,渲染環境每增加300片樹葉進行一次幀率(FPS)測試。可知在當前渲染條件下,使用本文算法及數學模型算法[5]的仿真場景的幀率,均在靜態場景的幀率附近上下波動,說明2種算法對幀率均影響不大。

圖7 模型生成數據在Unity3D中的渲染效果(200片樹葉)

圖8 幀率測試效果
本文通過生成式對抗神經網絡對仿真數據集進行學習,實現了對樹葉飄落效果的模擬和生成,提出了一種基于真實數據采集進行的動畫仿真模式。通過實驗證實了本文方法的可行性,為深度學習與虛擬現實仿真技術結合提供了新的思路。
在實驗中,雖然模式坍塌問題解決了(圖 9),但模型的學習效果仍需提高,生成數據與仿真數據集在視覺上仍然有一定的差距。

圖9 弱風條件下具有多樣性和真實性的生成數據樣本((a)~(i)為隨機生成數據樣本)
在后續的工作中,將繼續針對樹葉飄落產生的多元時序列優化深度學習算法和模型結構,使訓練更穩定、效果更佳,生成的樣本具有更強的真實性和多樣性。WGAN[14],WGAN-GP[15],LSGAN[16]等模型都提供了解決問題的思路。
另外,將針對樹葉飄落的數學評估算法[17]研究,與人工檢驗視覺效果結合,共同評估模型生成數據的質量。
最后,將使用真實的三維數據替代數學模型合成的數據,并測試真實環境下的學習效果,同時解決在真實環境下樹葉飄落數據獲取過程中所產生的問題。