Print

发布时间: 2020-06-16
摘要点击次数:
全文下载次数:
DOI: 10.11834/jig.180681
2020 | Volume 25 | Number 6




    计算机图形学    




  <<上一篇 




  下一篇>> 





字典神经网络方法快速湍流烟雾合成
expand article info 柏凯1,2,3, 李伟1,2,3, 刘晓培1,2,3
1. 上海科技大学信息科学与技术学院, 上海 201210;
2. 中国科学院大学, 北京 100049;
3. 中国科学院上海微系统与信息技术研究所, 上海 200050

摘要

目的 基于物理的烟雾模拟是计算机图形学的重要组成部分,渲染具有细小结构的高分辨率烟雾,需要大量的计算资源和高精度的数值求解方法。针对目前高精度湍流烟雾模拟速度慢,仿真困难的现状,提出了基于字典神经网络的方法,能够快速合成湍流烟雾,使得合成的结果增加细节的同时,保持高分辨率烟雾结果的重要结构信息。方法 使用高精度的数值仿真求解方法获得高分辨率和低分辨率的湍流烟雾数据,通过采集速度场局部块及相应的空间位置信息和时间特征生成数据集,设计字典神经网络的网络架构,训练烟雾高频成分字典预测器,在GPU(graphic processing unit)上实现并行化,快速合成高分辨率的湍流烟雾结果。结果 实验表明,基于字典神经网络的方法能够在非常低分辨率的烟雾数据下合成空间和时间上连续的高分辨率湍流烟雾结果,效率比通过在GPU平台上直接仿真得到高分辨率湍流烟雾的结果快了一个数量级,且合成的烟雾结果与数值仿真方法得到的高分辨率湍流烟雾结果足够接近。结论 本文方法解决了烟雾的上采样问题,能够从非常低分辨率的烟雾仿真结果,通过设计基于字典神经网络结构以及特征描述符编码烟雾速度场的局部和全局信息,快速合成高分辨率湍流烟雾结果,且保持高精度烟雾的细节,与数值仿真方法的对比表明了本文方法的有效性。

关键词

烟雾模拟; 神经网络; 粒子系统; 计算机动画; 字典学习

Fast turbulent smoke synthesis via a dictionary-based neural network
expand article info Bai Kai1,2,3, Li Wei1,2,3, Liu Xiaopei1,2,3
1. School of Information Science and Technology, ShanghaiTech University, Shanghai 201210, China;
2. University of Chinese Academy of Sciences, Beijing 100049, China;
3. Chinese Academy of Sciences, Shanghai Institute of Microsyst and Information Technology, Shanghai 200050, China
Supported by: National Natural Science Foundation of China (61502305)

Abstract

Objective Physics-based smoke simulation is an important topic in computer graphics. Realistically simulating turbulent smoke flows is generally computationally expensive due to intrinsic small-scale structures that require sophisticated nondissipative solvers with a relatively high resolution. To effectively preserve small-scale structures, neural networks have been recently proposed and applied. However, the common problem in previous models for upsampling fluid flow fields with added small-scale structures is that the upsampled fluid field may not be sufficiently close to the corresponding high-resolution simulations. This problem may produce visual artifacts as important features, e.g., vortex rings that require high-resolution samples to capture can be overlooked. The difficulty behind such upsampling, which considerably differs from image upsampling, is that the flow structures between high- and low-resolution simulations can substantially differ. This structure inconsistency becomes increasingly evident when high and low resolutions differ significantly from local nonlinear vortex structures to the global shape of turbulent flow distributions. To enable upsampling with close similarity to its high-resolution simulation counterpart, local and global information should be acquired and encoded. In this study, we propose a novel dictionary-based neural network for synthesizing the high-frequency components of a turbulent smoke flow from a very low-resolution simulation. By learning a local generative scheme from a large set of patches that exist in high-resolution simulations, our network can faithfully synthesize a high-resolution smoke flow that closely resembles the corresponding high-resolution simulations, with well-preserved important features and considerably improved computing efficiency. Method First, high- and low-resolution turbulent smoke data are simulated using a high-precision numerical method. We propose a feature vector that encodes the local velocity information of each 3D patch, global position, and time. This vector can help accurately predict local high-frequency components. Then, we construct a novel neural network based on the dictionary learning framework; this network simultaneously learns the dictionary and the associated coefficients. High-resolution smoke data have more details than low-resolution smoke data; thus, the former has a more complex spatial structure. Accordingly, we add gradient loss to maintain the spatial structure, with a regularization term to prevent overfitting. The advantage of our model is that it jointly optimizes all the layer parameters from end to end. After the training process, our neural network can learn a complex mapping function to efficiently synthesize high-resolution turbulent smoke patch data. During online synthesis given a low-resolution simulation, the trained neural network is used to predict overlapping local patches in parallel, with convolution in overlapping regions to ensure smooth transition. Result On the basis of the experimental results, we propose a novel dictionary-based neural network as a small-scale structure predictor to address such upsampling problem. The proposed neural network can produce spatially and temporally consistent high-resolution flow fields from very low-resolution simulations that closely approximate the direct high-resolution simulation results, with considerably improved computational efficiency. Our method faithfully preserves small-scale structures by comparing low- and high-resolution simulations. With our learning-based fast smoke simulation method, efficiency is improved by one order of magnitude compared with direct simulations at a resolution of 200×400×200 with highly similar results. Conclusion In this study, we address the crucial problem of synthesizing a high-resolution flow field from a very low-resolution simulation to achieve efficient smoke animation. The synthesized high-resolution flows can closely approximate their simulation counterparts. To produce a high-resolution flow field, we design a novel neural network that is motivated by dictionary learning and a new feature descriptor that encodes local and global information. The neural network can be used for efficient synthesis to quickly predict flow details in high resolutions. Parallel implementations of such mechanisms are realized on a GPU, with comparisons with numerical simulations to highlight the advantages of our method.

Key words

smoke simulation; neural network; particle system; computer animation; dictionary learning

0 引言

烟雾运动复杂且难以描述,烟雾的真实模拟是计算机图形学和仿真领域非常有挑战性的课题, 烟雾模拟的可视化大量用于电影特效、游戏和虚拟现实(virtual reality, VR)等行业,如何得到逼真的湍流烟雾场景,一直是计算机图形学领域的研究难点(童若锋等,1999)。

由于湍流复杂,在烟雾模拟中会产生不同尺度的涡流,所以模拟逼真的湍流烟雾不仅需要高精度的数值求解算法,而且需要高分辨率的计算网格去捕捉湍流烟雾的细小结构。通常的方法是直接提升计算网格(Selle等,2008)的分辨率(McAdams等,2010)或使用自适应分辨率的计算网格求解得到高分辨率湍流烟雾的结果(Lentine等,2010),但是这种直接模拟湍流烟雾的方法在计算上代价高昂(Zhang等,2016),需要大量计算资源和时间消耗,对大规模湍流烟雾场景尤为明显。为了节省计算资源,提高效率,传统的数值方法首先在低分辨率的计算网格下进行仿真,然后用增加烟雾细节的简单模型(Fedkiw等,2001)得到高分辨率湍流烟雾的结果。其中,基于噪声的方法通过在低分辨率烟雾速度场上添加扰动达到增加细节的目的,基于简单湍流模型的方法(Kim等,2008)根据研究湍流的性质通过增加湍流能量的方式弥补低分辨率烟雾丢失的细节,基于神经网络的方法通过生成对抗网络(generative adversarial networks,GAN)解决烟雾的超分辨率问题(Xie等,2018),在低分辨率的烟雾数据上合成烟雾的细小结构信息,或通过卷积神经网络(Chu等,2017),学习高分辨率烟雾块和低分辨率烟雾块的相似性描述符,合成带有丰富细节的烟雾结果。但是这些模型通过在低分辨率烟雾结果上添加一些细小结构得到的湍流烟雾结果,与直接仿真得到高分辨率湍流烟雾的结果并不接近。高分辨率湍流烟雾仿真结果中会出现的重要结构信息,比如涡环现象,这些模型的方法并不能在低分辨率烟雾数据下合成。解决湍流烟雾的超分辨率问题非常困难,与图像超分辨率问题大不相同,关键是高分辨率的湍流烟雾与低分辨率的烟雾的空间结构完全不同。直接在低分辨率烟雾结果下增加一些烟雾细节并不能得到真正的高分辨率湍流烟雾的结果。图 1是直接通过高精度的数值仿真方法得到的不同计算网格分辨率的烟雾结果。图 1(a)是25×50×25低分辨率的烟雾仿真结果,图 1(b)是200×400×200高分辨率的湍流烟雾结果。从图 1可以看出,计算网格分辨率差距很大时,湍流烟雾的整体形状和局部细节均不相同。因此,解决湍流烟雾的超分辨率问题,需要保证合成的烟雾与高分辨率湍流烟雾的结果足够接近,既要考虑烟雾的局部细小结构,也要考虑烟雾整体的空间结构信息。

图 1 低分辨率和高分辨率湍流烟雾结果
Fig. 1 Low and high resolution smoke results ((a) low resolution smoke; (b) high resolution smoke)

本文提出一种基于字典神经网络的方法作为细节预测模型,解决湍流烟雾的超分辨率问题。首先根据高精度的数值求解方法,得到高分辨率烟雾和低分辨率烟雾的仿真数据,然后构造烟雾数据集的特征向量,使得网络的输入不仅包含烟雾速度块的局部信息,而且包含全局的空间位置和时间信息,帮助字典神经网络正确预测低分辨率烟雾缺少的局部高频成分。其次搭建字典神经网络架构,训练烟雾高频成分字典预测器。字典神经网络训练完成后,可以从分辨率非常低的烟雾数据中,快速合成时间和空间上都保持连续的高分辨率湍流烟雾结果,并且与数值求解方法得到的高分辨率湍流烟雾结果非常接近,计算效率也大大提升,与通过在GPU平台上数值方法求解得到高分辨率的湍流烟雾相比,本文方法合成速度提升了一个数量级,加速了目前湍流烟雾的模拟过程,减少了计算资源和时间消耗。

1 字典学习

字典学习在机器学习、信号和图像处理中有着广泛应用,其主要目的是从输入数据集中学习得到一个完备的集合字典(练秋生等,2015),通过字典能够稀疏表示原来的输入数据,因此也称为稀疏编码。解决烟雾的超分辨率问题,传统方法缺少足够的引导信息,合成的烟雾缺少高分辨率湍流烟雾细节和重要的空间结构信息,很难得到与高分辨率烟雾近似的结果。但是字典学习的方法可以用一个完备的字典和适当的求解系数算法表示庞大的湍流烟雾数据集合,从而解决烟雾的超分辨率问题。

1.1 字典学习的传统求解方法

字典学习问题可以归纳如下:给定训练集${\mathit{\boldsymbol{Y}}}=[{\mathit{\boldsymbol{Y}}}_{1}, {\mathit{\boldsymbol{Y}}}_{2}, …, {\mathit{\boldsymbol{Y}}}_{k}]$,其中${\mathit{\boldsymbol{Y}}}$包含$k$个样本,${\mathit{\boldsymbol{Y}}}_{i}∈ R ^{N}$表示训练集中每个样本都是$N$维向量。通过训练集求解得到完备的字典${\mathit{\boldsymbol{D}}}∈ R ^{N×M}$,训练集中每个样本${\mathit{\boldsymbol{Y}}}_{i}$都可以通过字典${\mathit{\boldsymbol{D}}}$求解得到相应的系数${\mathit{\boldsymbol{X}}}_{i}∈ R ^{M}$${\mathit{\boldsymbol{Y}}}_{i}$可以由系数${\mathit{\boldsymbol{X}}}_{i}$稀疏表示。在误差满足阈值的情况下,$ò$为误差阈值,使得系数集合${\mathit{\boldsymbol{X}}}=[{\mathit{\boldsymbol{X}}}_{1}, {\mathit{\boldsymbol{X}}}_{2}, …, {\mathit{\boldsymbol{X}}}_{k}]$足够稀疏。优化问题可以表示为

$ \min ||\mathit{\boldsymbol{X}}|{|_0}\quad {\rm{ s}}{\rm{.t}}{\rm{.}}\;||\mathit{\boldsymbol{Y}} - \mathit{\boldsymbol{DX}}||_2^2 \le ò $ (1)

虽然式(1)是非凸的优化问题,解决这个问题是NP-hard。有一些工作如K-SVD(singular value decomposition)(Aharon等,2006)和正交匹配追踪(orthogonal matching pursuit,OMP)(Tropp,2004)方法可以解决这个问题。早期的相关工作(Donoho,2006)证明,只要满足系数集合${\mathit{\boldsymbol{X}}}$中每个系数向量是足够稀疏的(Mairal等,2010),可以通过优化${\mathit{\boldsymbol{X}}}$$\rm L_{1}$范数得到近似的结果。优化的方程为

$ \min ||\mathit{\boldsymbol{X}}|{|_1}\quad {\rm{ s}}{\rm{.t}}{\rm{.}}\;||\mathit{\boldsymbol{Y}} - \mathit{\boldsymbol{DX}}||_2^2 \le ò $ (2)

当字典${\mathit{\boldsymbol{D}}}$优化固定下来后,给一个新的测试样本${\mathit{\boldsymbol{Y}}}_{t}$,可以用拉格朗日乘子法求解这个凸优化问题,即

$ \min ||{\mathit{\boldsymbol{Y}}_t} - \mathit{\boldsymbol{D}}{\mathit{\boldsymbol{X}}_t}||_2^2 + \lambda {\rm{||}}{\mathit{\boldsymbol{X}}_t}{\rm{|}}{{\rm{|}}_1} $ (3)

式中,$λ$表示正则化参数,求解式(3)的方法很多,最常见的是软阈值迭代算法(iterative shrinkage-thresholding algorithm,ISTA),具体为

$ {\mathit{\boldsymbol{X}}^{k + 1}} = {\beta _\lambda }\left({{\mathit{\boldsymbol{X}}^k} + h{\mathit{\boldsymbol{D}}^{\rm{T}}}\left({{\mathit{\boldsymbol{Y}}_t} - \mathit{\boldsymbol{D}}{\mathit{\boldsymbol{X}}^k}} \right);\lambda } \right) $ (4)

式中,${\mathit{\boldsymbol{Y}}}_{t}$是一个新的测试样本输入,${\mathit{\boldsymbol{X}}}^{k+1}$是经过$k$+1次迭代得到的系数,${\mathit{\boldsymbol{D}}}$是字典,$h$是迭代步骤中的步长,$λ$表示正则化的参数。$β_{λ}({\mathit{\boldsymbol{v}}};λ)$是阈值收缩函数,具体为

$ {\beta _\lambda }(\mathit{\boldsymbol{v}};\lambda) = {\rm{sgn}}\left({{v_i}} \right) \times {\rm{max}}\left\{ {\left| {{v_i} - \lambda } \right|, 0} \right\} $ (5)

式中,向量${\mathit{\boldsymbol{v}}}$中每一个元素$v_{i}$$λ$相减,所得的绝对值与0比较,取其中的最大值,最后乘上元素本身的符号,可以证明ISTA可以得到收敛的解。

1.2 基于神经网络的字典学习

神经网络在各个领域的应用非常广泛,数据驱动的方法需要大量的训练数据去学习神经网络的参数。使用监督神经网络解决问题时,训练集的数据是成对的,形式类似于$({\mathit{\boldsymbol{Y}}}_{t}, {\mathit{\boldsymbol{X}}}_{t})^{n}_{t=1}$$n$代表训练集中数据对的个数。${\mathit{\boldsymbol{Y}}}_{t}$是神经网络的输入,一般是数据的特征。${\mathit{\boldsymbol{X}}}_{t}$是神经网络的输出,在分类问题中是输入数据特征对应的标签,在回归问题中是输入数据特征对应的预测值。

一些工作表明神经网络(Kamilov和Mansour,2016)在解决稀疏问题的精度(Daubechies等,2004)和效率上都比传统算法高。因此在传统的ISTA算法基础上,提出了LISTA(learned iterative shrinkage and thresholding algorithm)算法(Gregor和LeCun,2010),这是一种基于神经网络的字典学习方法。在LISTA神经网络中,${\mathit{\boldsymbol{Y}}}_{t}$是数据特征,${\mathit{\boldsymbol{X}}}_{t}$是对应的稀疏系数,${\mathit{\boldsymbol{X}}}_{t}$的值由传统的迭代算法得到,是神经网络输出的参考值。LISTA神经网络算法在结构上与ISTA的迭代过程非常相似,具体计算公式可通过改写式(4)获得,即

$ \begin{array}{l} {\mathit{\boldsymbol{X}}^{k + 1}} = {\beta _\lambda }\left({\mathit{\boldsymbol{S}}{\mathit{\boldsymbol{X}}^k} + \mathit{\boldsymbol{B}}{\mathit{\boldsymbol{Y}}_t};\lambda } \right)\\ \;\;\;\;\;\;\;\;\;\;\left\{ {\begin{array}{*{20}{l}} {\mathit{\boldsymbol{B}} = h{\mathit{\boldsymbol{D}}^{\rm{T}}}}\\ {\mathit{\boldsymbol{S}} = \mathit{\boldsymbol{I}} - \mathit{\boldsymbol{BD}}} \end{array}} \right. \end{array} $ (6)

与传统的ISTA算法使用固定值的${\mathit{\boldsymbol{B}}}$${\mathit{\boldsymbol{S}}}$$λ$相比,LISTA神经网络算法基于ISTA,首先初始化${\mathit{\boldsymbol{B}}}$${\mathit{\boldsymbol{S}}}$$λ$的值,然后从训练数据中通过网络优化,更新迭代${\mathit{\boldsymbol{B}}}$${\mathit{\boldsymbol{S}}}$$λ$的值。优化的损失函数为

$ {L_T}(\mathit{\boldsymbol{\theta }}) = \frac{1}{n}\sum\limits_{t = 1}^n {\left\| {{\mathit{\boldsymbol{X}}^k}\left({{\mathit{\boldsymbol{Y}}_t};\mathit{\boldsymbol{\theta }}} \right) - {\mathit{\boldsymbol{X}}_t}} \right\|_2^2} $ (7)

式中,${\mathit{\boldsymbol{X}}}^{k}({\mathit{\boldsymbol{Y}}}_{t};{\boldsymbol{θ}})$代表输入为${\mathit{\boldsymbol{Y}}}_{t}$情况下,$k$层LISTA神经网络的输出结果,参数${\boldsymbol{θ}}=[{\mathit{\boldsymbol{B}}}, {\mathit{\boldsymbol{S}}}, λ]$的更新基于随机梯度下降方法。与传统方法相比,LISTA神经网络算法只需要少量矩阵向量的乘法加法操作,就可以得到与传统优化方法近似的结果,能够加速字典学习问题的收敛速度。图 2$k$ = 4时,LISTA神经网络算法的结构示意图。

图 2 4层LISTA神经网络结构
Fig. 2 The four-layer neural network structure of LISTA

1.3 字典学习在湍流烟雾中的应用

在提出基于字典神经网络算法解决烟雾的超分辨率问题之前,需要验证基于传统字典学习的迭代算法是否可得到高分辨率湍流烟雾速度块的完备字典,进而合成高分辨率的湍流烟雾。为此,首先通过直接仿真得到不同时刻的3维高分辨率湍流烟雾速度场数据,烟雾速度场的计算网格分辨率为200×400×200。烟雾速度场在空间3个维度上都有相应的速度分量,因此烟雾速度场的数据分辨率为200×400×200×3。遍历每个时刻的速度场数据,随机充分地采集大小为5×5×5×3的速度块,将每个速度块拉伸成大小为375的1维向量,最终采样得到1 000万个烟雾速度块样本的数据集合,因此数据集的大小为375×1 000万,这是一个庞大的数据集,包含了高分辨率湍流烟雾的各种细小结构信息。实验过程中,测试了不同大小的湍流烟雾速度块,范围在3 ~15(3×3×3×3, 5×5×5×3, …, 15×15×15×3)之间,发现湍流烟雾速度块大小为5×5×5×3的合成效果和效率都是最优。求解湍流烟雾速度块的完备字典时,选用的是传统的K-SVD方法,最终得到大小为375×400湍流烟雾细节的完备字典,通过烟雾细节的字典与相应的稀疏系数合成湍流烟雾结果,如图 3所示。

图 3 高分辨率湍流烟雾和基于字典合成烟雾结果
Fig. 3 High resolution smoke results and dictionary-based synthesis smoke results ((a) high resolution smoke; (b) dictionary-based synthesis smoke)

实验中基于传统字典学习方法合成的湍流烟雾结果与高精度数值仿真方法得到的高分辨率湍流烟雾结果几乎完全一致。数值仿真方法通过GPU(graphic processing unit)得到分辨率为200×400×200的高分辨率湍流烟雾需要约30 s/帧,传统字典学习方法基于CPU(central processing unit)合成分辨率为200×400×200的高分辨率湍流烟雾需要约10 min/帧。考虑到CPU和GPU的性能差异,以及基于传统字典学习方法很难实现GPU的版本,传统字典学习的湍流烟雾合成方法比通过数值仿真方法得到湍流烟雾更加耗时,但是从结果可以推断,只要得到合适的高分辨率湍流烟雾的细节字典,加上快速有效的稀疏系数求解方法,就能够快速高效地合成与高分辨湍流烟雾近似的结果。因此基于神经网络的字典学习可以解决这个问题,在保证准确度的情况下,大大加速这个过程。

2 基于字典神经网络的烟雾合成方法

使用数值仿真方法求解高分辨率湍流烟雾的结果需要大量计算资源和时间消耗,为了快速得到高分辨率湍流烟雾的结果,本文构造了基于字典神经网络的方法解决烟雾的超分辨率问题,能够从较低分辨率的烟雾数据中快速合成时间和空间上保持连续的高分辨率湍流烟雾结果,本文方法的核心包括:1)建立烟雾数据训练集;2)设计基于字典神经网络的架构;3)构造适用于烟雾数据的神经网络优化目标函数;4)设计并行化的算法合成高分辨率湍流烟雾结果。

2.1 建立烟雾数据训练集

通过高精度的数值仿真方法求解得到4种烟雾速度场,其计算网格分辨率分别为25×50×25、50×100×50、100×200×100、200×400×200。将25×50×25分辨率的烟雾速度场作为低分辨率的烟雾数据,其他分辨率的烟雾速度场数据作为目标合成对象。对不同计算网格分辨率的烟雾仿真结果,均设置相同的初始和边界条件,同时保证具有同等数值的雷诺数,确保高分辨率烟雾和低分辨率烟雾属于同种性质的烟雾。

在采集局部速度块之前,将低分辨率的速度场插值,得到与高分辨率速度场的空间分辨率一样的数据。然后在高分辨率烟雾速度场和低分辨率烟雾速度场的对应位置,分别充分采集大小为5×5×5×3的速度块,并拉伸为375的1维向量。显而易见,如果直接用速度信息作为输入输出,通过神经网络学习低分辨率烟雾速度块与高分辨率烟雾速度块之间的映射关系,不足以表达两者之间的关联,因为湍流烟雾的仿真模拟是一个随时间变化的过程。同时在局部细节上,湍流烟雾具有空间相似性,仅采用速度场的信息会丢失空间和时间的连续性。为此,本文提出烟雾数据的特征向量表达形式。

摩顿码(Morton code)是图形学领域广泛应用的一种编码方式,使用二进制编码,可以近似表示空间位置信息。对3维计算网格编码后,将编码的值做归一化处理,这样编码的值可以将烟雾速度场的空间结构信息加入到烟雾数据特征中。同时考虑烟雾模拟随时间变化的特性,将时间变量加入烟雾数据特征。因此对于神经网络的训练集$({\mathit{\boldsymbol{P}}}^{\rm L}$$_{i}, {\mathit{\boldsymbol{P}}}^{\rm H}$$_{i})^{n}_{i=1}$${\mathit{\boldsymbol{P}}}^{\rm L}$$_{i}$是一个501维的向量,由3种特征信息组成,375维的低分辨率烟雾速度块信息,125维的烟雾速度块的空间位置信息,1维的烟雾速度场块的时间信息。${\mathit{\boldsymbol{P}}}^{\rm H}$$_{i}$是一个375维的向量,包含高分辨率烟雾速度块信息。实验过程中,发现通过简单构造速度块的数据集,最终训练的网络难收敛,合成的烟雾效果也很差,因为它丢失了烟雾中重要的空间结构信息和时间信息。因此最终构造烟雾数据的特征输入,对于结果有重要的影响。

2.2 基于字典神经网络的架构

与传统的字典学习方法相比,LISTA神经网络能够解决字典学习问题,并且加速目前的优化过程,取得了不错结果,但是不能直接用于烟雾的超分辨率问题。因此,本文提出DBNN(dictionary-based neural network)神经网络结构,解决烟雾的超分辨率问题。DBNN的网络结构如图 4所示。

图 4 4层DBNN神经网络结构
Fig. 4 The four-layer neural network structure of DBNN

图 4可以看出,DBNN网络结构与LISTA神经结构相比,增加了一些分支结构,这是解决烟雾的超分辨率问题的关键部分。${\mathit{\boldsymbol{P}}}^{\rm L}$$_{i}$作为DBNN网络的输入,首先经过一个全连接网络层${\mathit{\boldsymbol{B}}}$,对输入的特征向量信息进行编码,然后经过迭代式的字典神经网络学习稀疏系数,同时更新优化神经网络中的高频成分字典${\mathit{\boldsymbol{D}}}_{\rm h}$,通过稀疏系数和字典${\mathit{\boldsymbol{D}}}_{\rm h}$合成高分辨率的湍流细节,加上输入特征中的低分辨率烟雾速度块信息,最后得到高分辨率湍流烟雾的速度块。DBNN神经网络层与层之间的连接是全连接神经网络,$β_{λ}$作为激活函数跟在每层全连接网络层后。全连接网络结构图如图 5所示。

图 5 全连接网络结构
Fig. 5 The fully connected neural network structure

在参数设置上,与LISTA神经网络中参数${\mathit{\boldsymbol{S}}}$是每层共享的设定不同,DBNN网络的参数${\mathit{\boldsymbol{S}}}=[{\mathit{\boldsymbol{S}}}_{1}, {\mathit{\boldsymbol{S}}}_{2}, …, {\mathit{\boldsymbol{S}}}_{k}]$是每层独立的,表明DBNN神经网络拥有更大的自由度,更强的学习能力,同时能够加速神经网络的收敛。

2.3 目标函数

一般的损失函数是均方误差(mean squared error,MSE)损失函数,通过计算神经网络的输出与参考值的均值平方误差,衡量神经网络学习的情况。但是烟雾数据中含有复杂的空间结构信息,单独的MSE损失函数不足以引导神经网络优化得到正确结果,因此加入烟雾速度块的梯度损失函数,使得DBNN神经网络能够学习烟雾的空间结构信息,另外为了防止出现过拟合现象,引入正则化的损失函数。通过联合上述3种损失函数,不仅可以学习烟雾速度块的信息,而且能够促使网络的结果包含高频的空间结构信息,从而保证合成的结果与高分辨率湍流烟雾足够近似。DBNN网络的优化目标函数为

$ \begin{array}{*{20}{c}} {{L_k}({{\mathit{\boldsymbol{\theta }}}}) = {\lambda _1}\sum\limits_{i = 1}^n {\left\| {DBN{N_k}\left( {{{\mathit{\boldsymbol{\theta }}}};{{\mathit{\boldsymbol{P}}}}_i^{\rm{L}}} \right) - {{\mathit{\boldsymbol{P}}}}_i^{\rm{H}}} \right\|_2^2} + }\\ {{\lambda _2}\sum\limits_{i = 1}^n {\left\| {\nabla DBN{N_k}\left( {{{\mathit{\boldsymbol{\theta }}}};{{\mathit{\boldsymbol{P}}}}_i^{\rm{L}}} \right) - \nabla {{\mathit{\boldsymbol{P}}}}_i^{\rm{H}}} \right\|_2^2} + {\lambda _3}||{{\mathit{\boldsymbol{\theta }}}}||_2^2} \end{array} $ (8)

式中,$DBNN_{k}({\boldsymbol{θ}};{\mathit{\boldsymbol{P}}}^{\rm L}$$_{i})$代表$k$层DBNN神经网络的输出结果,$\nabla DBNN_{k}({\boldsymbol{θ}};{\mathit{\boldsymbol{P}}}^{\rm L}$$_{i})$代表输出速度块的梯度,参数${\boldsymbol{θ}}$采用Adam算法进行反向传播更新优化。Adam算法调节参数简单,计算高效,所需内存少,适合解决大规模数据和参数的优化及包含很高噪声或稀疏梯度的问题,广泛用于神经网络优化。

2.4 并行算法快速合成高分辨湍流烟雾

DBNN神经网络输入是基于局部低分辨率烟雾速度场的信息,对于局部烟雾速度块的合成,相互之间没有影响,因此可以设计高效的GPU并行算法。并行化的算法步骤如下:

1) 对低分辨率烟雾速度场进行插值,使分辨率与目标烟雾速度场的分辨率一样;

2) 按照间隔为2的长度,保持相邻的速度块之间有重叠,依次选取大小为5×5×5×3的低分辨率烟雾速度块,同时记录每个速度块的位置${\mathit{\boldsymbol{P}}}$

3) 对于每个选取的速度块,按照2.1节的特征构造方式,加入当前速度块的空间时间特征信息,组成501维向量,作为DBNN神经网络的输入;

4) 将DBNN网络参数并行地作用于每个网络输入,得到375维的高分辨率烟雾速度块,然后将375维的向量按照烟雾空间结构信息,构造成5×5×5×3大小的烟雾速度块;

5) 根据步骤2)中记录的每个速度块的位置${\mathit{\boldsymbol{P}}}$,将合成的烟雾速度块存到相应的位置;

6) 对于相邻速度块边界可能出现的不连续现象,通过高斯平滑卷积滤波消除。

算法的整个流程,包括DBNN网络架构,全部基于CUDA(compute unified device architecture)平台在GPU上实现。与通过数值仿真方法得到高分辨率湍流烟雾相比,极大减少了计算资源和时间消耗。

3 实验

实验配置如下:CPU为Intel Xeon E5-2630v3,2.4 GHz,64 GB内存;GPU为NVIDIA GeForce GTX1080,8 GB显存;Windows10系统;编译环境为Visual studio 2015,CUDA 8.0;训练框架为TensorFlow 1.7(python2.7接口),对烟雾速度场利用粒子渲染的方式进行真实感绘制。

3.1 DBNN网络细节

数据集大小为1 000万对,80 %用做训练集,20 %用做验证集。${\mathit{\boldsymbol{P}}}^{\rm L}$$_{i}$是大小为501的向量,${\mathit{\boldsymbol{P}}}^{\rm H}$$_{i}$是大小为375的向量。${\mathit{\boldsymbol{B}}}$的大小是501×400,每层${\mathit{\boldsymbol{S}}}$的大小是400×400,${\mathit{\boldsymbol{D}}}_{\rm h}$的大小是400×375。目标函数中$λ_{1}$的值设为1.0,$λ_{2}$的值设为0.05,$λ_{3}$的值设为0.5。优化方法选择的是Adam算法,基础学习率为0.001,beta1的值设为0.9,beta2的值设为0.995,epsilon的值设为$1×10^{-8}$。各参数取值均是由大量实验总结获得。

3.2 实验结果

本文选取计算网格分辨率为25×50×25的烟雾速度场作为低分辨率烟雾速度场,分别合成分辨率为50×100×50、100×200×100、200×400×200的高分辨率湍流烟雾速度场,结果如图 6图 7所示。可以发现,即使低分辨率烟雾的计算网格分辨率大小非常低,依然能够通过本文算法快速合成高分辨湍流烟雾结果,且与数值仿真方法得到的高分辨率湍流烟雾结果非常接近。本文提出的DBNN神经网络算法能够合成高分辨率湍流烟雾的局部烟雾细节和重要结构信息。图 8是DBNN神经网络中部分高频字典${\mathit{\boldsymbol{D}}}_{\rm h}$在3维空间的一个截面图,字典中包含丰富的细小结构信息,辅助说明了DBNN神经网络的强大学习能力。

图 6 带有球的合成烟雾和仿真烟雾结果对比
Fig. 6 Comparison between synthesis smoke and simulation smoke results with ball ((a) low resolution smoke; (b) smoke animation frame = 199 (50×100×50);(c) smoke animation frame = 199 (100×200×100); (d) smoke animation frame = 199 (200×400×200))
图 7 合成烟雾和仿真烟雾结果对比
Fig. 7 Comparison between synthesis smoke and simulation smoke results ((a) low resolution smoke (25×50×25); (b) smoke animation frame = 135(50×100×50); (c) smoke animation frame = 135 (100×200×100); (d) smoke animation frame = 135 (200×400×200))
图 8 烟雾高频字典
Fig. 8 The high frequency dictionary of smoke

随着计算网格分辨率的增加,烟雾的仿真结果会出现完全不一样的形状结构,尤其是烟雾仿真过程中带有物体的情况。高分辨率的湍流烟雾会出现涡环的现象,低分辨率的烟雾不会产生涡环。但是基于DBNN神经网络的方法可以在低分辨率的烟雾中合成带有涡环现象的高分辨率湍流烟雾结果,如图 9所示。

图 9 带有球的高分辨率湍流烟雾和合成烟雾结果
Fig. 9 Results of high resolution smoke and synthesis smoke with balls (a) low resolution smoke (25×50×25); (b) high resolution smoke with ball (200×400×200); (c) synthesis smoke with ball (200×400×200))

3.3 实验分析

通过实验结果对比,本文算法合成的烟雾结果与高精度数值仿真方法得到的烟雾结果非常近似。同时为了验证提出算法的准确性,针对能量谱和相对误差等指标进行了定量实验。

在烟雾仿真领域,湍流细节合成一直是研究难点,基于湍流能量分析(Pfaff等,2009),虽然高分辨率湍流烟雾与低分辨率烟雾的能量谱表现形式不同,但是都满足特定的湍流性质,因此对高分辨率烟雾、低分辨率烟雾和本文算法合成的烟雾进行能量谱统计,如图 10表示,$E$($k$)代表频率为$k$的时候烟雾所具备的能量。可以看出,本文算法合成烟雾的能量谱更加贴近高分辨率湍流烟雾的能量谱。

图 10 烟雾能量谱图
Fig. 10 The energy spectrum of smoke

评估合成结果准确性的另一项指标是计算在相同分辨率下相对于数值模拟得到高分辨率流体,归一化速度场的均方误差(normalized MSE,NMSE)。图 11是随时间变化的流体速度场的相对误差图,计算的数据来源于合成带有球的流体速度场。灰色曲线代表插值后的低分辨率流体速度场与高分辨率流体速度场的相对误差,红色曲线代表本文方法合成的流体速度场与高分辨率流体速度场的相对误差。可以看出,本文合成的烟雾误差可以限制在相对较小的范围内,验证了本文方法的有效性。

图 11 相对误差
Fig. 11 Relative error

另外,由于本文方法是基于局部高度的并行算法,与通过在GPU上实现数值仿真方法得到的结果相比,效率有很大提升。随着计算网格分辨率的增加,本文方法的加速效果越明显。合成不同计算网格分辨率的湍流烟雾时间消耗如表 1所示,可以看出,使用本文方法合成分辨率为50×100×50、100×200×100和200×400×200的高分辨率湍流烟雾速度场的效率提高到数值仿真方法的2.28倍、6.29倍和11.36倍。

表 1 数值仿真方法与本文方法的效率对比
Table 1 Comparison of efficiency between numerical simulation method and ours  

下载CSV
/(s/帧)
方法 分辨率
50×100×50 100×200×100 200×400×200
数值仿真 1.92 8.75 34.35
本文 0.842 1.39 3.02
注:加粗字体为本列最优值。

4 结论

为了解决烟雾的超分辨率问题,提出了一种基于字典学习的神经网络算法。通过构造基于字典学习的神经网络结构和适应于烟雾数据的特征描述符,能够从非常低分辨率的烟雾仿真结果快速合成高分辨率湍流烟雾结果。本文算法合成的高分辨率烟雾结果不仅增加了足够多的烟雾细节,而且能够保持高分辨率湍流烟雾的重要空间结构信息。视觉感受和烟雾能量谱的实验分析结果表明,本文方法取得的结果都非常接近高精度数值仿真方法得到的高分辨率湍流烟雾结果,而且与传统数值仿真方法相比,极大减少了计算资源和时间消耗。

但是本文方法依然存在以下不足:需要的训练数据庞大,训练时间较长,针对湍流比较强的流体场,合成的结果并不能保证与高分辨率流体速度场足够接近。今后将进一步探索深度学习在烟雾和流体模拟过程中的应用,研究加速训练的方法,以及解决湍流情况下合成高分辨率流体速度场与真实流体速度场不够接近的问题,以期得到更加真实感的烟雾和流体仿真结果。

参考文献

  • Aharon M, Elad M, Bruckstein A. 2006. K-SVD:an algorithm for designing overcomplete dictionaries for sparse representation. IEEE Transactions on Signal Processing, 54(11): 4311-4322 [DOI:10.1109/TSP.2006.881199]
  • Chu M Y, Thuerey N. 2017. Data-driven synthesis of smoke flows with CNN-based feature descriptors. ACM Transactions on Graphics (TOG), 36(4): #69 [DOI:10.1145/3072959.3073643]
  • Daubechies I, Defrise M, De Mol C. 2004. An iterative thresholding algorithm for linear inverse problems with a sparsity constraint. Communications on Pure and Applied Mathematics, 57(11): 1413-1457 [DOI:10.1002/cpa.20042]
  • Donoho D L. 2006. For most large underdetermined systems of linear equations the minimal l1-norm solution is also the sparsest solution. Communications on Pure and Applied Mathematics, 59(6): 797-829 [DOI:10.1002/cpa.20132]
  • Fedkiw R, Stam J and Jensen H W. 2001. Visual simulation of smoke//Proceedings of the 28th Annual Conference on Computer Graphics and Interactive Techniques. New York, USA: ACM: 15-22[DOI: 10.1145/383259.383260]
  • Gregor K and LeCun Y. 2010. Learning fast approximations of sparse coding//Proceedings of the 27th International Conference on International Conference on Machine Learning. Madison, USA: Omnipress: 399-406
  • Kamilov U S, Mansour H. 2016. Learning optimal nonlinearities for iterative thresholding algorithms. IEEE Signal Processing Letters, 23(5): 747-751 [DOI:10.1109/LSP.2016.2548245]
  • Kim T, Thürey N, James D, Gross M. 2008. Wavelet turbulence for fluid simulation. ACM Transactions on Graphics (TOG), 27(3): #50 [DOI:10.1145/1399504.1360649]
  • Lentine M, Zheng W, Fedkiw R. 2010. A novel algorithm for incompressible flow using only a coarse grid projection. ACM Transactions on Graphics (TOG), 29(4): #114 [DOI:10.1145/1833351.1778851]
  • Lian Q S, Shi B S, Chen S Z. 2015. Research advances on dictionary learning models, algorithms and applications. Acta Automatica Sinica, 41(2): 240-260 (练秋生, 石保顺, 陈书贞. 2015. 字典学习模型、算法及其应用研究进展. 自动化学报, 41(2): 240-260) [DOI:10.16383/j.aas.2015.c140252]
  • Mairal J, Bach F, Ponce J, Sapiro G. 2010. Online learning for matrix factorization and sparse coding. Journal of Machine Learning Research, 11: 19-60 [DOI:10.1145/1756006.1756008]
  • McAdams A, Sifakis E and Teran J. 2010. A parallel multigrid Poisson solver for fluids simulation on large grids//Proceedings of 2010 ACM SIGGRAPH/Eurographics Symposium on Computer Animation. Goslar, Germany: Eurographics Association: 65-74[DOI: 10.2312/SCA/SCA10/065-073]
  • Pfaff T, Thuerey N, Selle A, Gross M. 2009. Synthetic turbulence using artificial boundary layers. ACM Transactions on Graphics (TOG), 28(5): #121 [DOI:10.1145/1661412.1618467]
  • Selle A, Fedkiw R, Kim B, Liu Y J, Rossignac J. 2008. An unconditionally stable MacCormack method. Journal of Scientific Computing, 35(2/3): 350-371 [DOI:10.1007/s10915-007-9166-4]
  • Tong R F, Chen L J, Wang G Z. 1999. A method for quick smoke simulation. Journal of Software, 10(6): 647-651 (童若锋, 陈凌钧, 汪国昭. 1999. 烟雾的快速模拟. 软件学报, 10(6): 647-651)
  • Tropp J A. 2004. Greed is good:algorithmic results for sparse approximation. IEEE Transactions on Information Theory, 50(10): 2231-2242 [DOI:10.1109/tit.2004.834793]
  • Xie Y, Franz E, Chu M Y, Thuerey N. 2018. tempoGAN:a temporally coherent, volumetric GAN for super-resolution fluid flow. ACM Transactions on Graphics (TOG), 37(4): #95 [DOI:10.1145/3197517.3201304]
  • Zhang X X, Li M C, Bridson R. 2016. Resolving fluid boundary layers with particle strength exchange and weak adaptivity. ACM Transactions on Graphics (TOG), 35(4): #76 [DOI:10.1145/2897824.2925910]