冯乾泰, 杨 猛, 付 慧
(北京林业大学信息学院,北京 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]研究,与人工检验视觉效果结合,共同评估模型生成数据的质量。
最后,将使用真实的三维数据替代数学模型合成的数据,并测试真实环境下的学习效果,同时解决在真实环境下树叶飘落数据获取过程中所产生的问题。