摘要
神经渲染是以深度学习为基础的新型图形渲染方法,是实现时下热点概念“元宇宙”的关键要素。同时神经渲染也是深度学习的前沿方向,催生了许多新的深度学习方法与计算结构。本文以当前神经渲染中两个影响力较大的方法NeRF[1]和GauGAN[2]以及相关的拓展研究为基础,尝试整理分析神经渲染方法中一些比较有特色的计算结构与算子特征。需要指出的是本文并不是对神经渲染方法整体的算法分析,也不是对所有神经渲染特色算子的分析。事实上,神经渲染方法的主体结构还是主流深度学习中广泛采用的操作,如卷积、池化等,为大家所熟知。我们在之前的文章中也对这些神经渲染方法的整体结构及一般特点做了分析(神经渲染最新进展与算法(一):语义图像合成神经渲染最新进展与算法(二):NeRF及其演化)。因此,本文仅选取这些方法中一些关键的、但不常见的特色算子,以乘加为基本计算单位,评估了它们的计算特征。
NeRF方法的结构与计算分析
NeRF是一种深度容积渲染方法,其主要特点是场景的深度隐式表达与容积渲染。与一般渲染方法直接构建场景结构不同,NeRF训练一个神经网络表征三维场景,是一个典型三维重建过程。输入场景空间和视角坐标,场景表征网络输出对于空间体素的颜色等场景信息。进一步,NeRF按照volume rendering方法沿着成像面像素对应投影射线方向采样场景体素的颜色密度,然后对所有体素积分,即可在成像面产生图像。所以NeRF方法包括两部分:神经渲染场网络和容积投影积分算法。 
1. 3D场景隐式表征
Neural radiance filed是一个Implicit function,将三维场景间接表征为一个场景体素坐标与相机观察角度的函数F,而不是显示记录场景内容。
函数F是一个多层MLP网络,输入体素坐标与观察角度,输出对应位置体素在给定视角下的颜色与密度。其中体素位置输入60维向量,视角输入24维向量。NeRF模型是MLP网络,结构固定,一组网络权重对应一个场景。NeRF的具体细节可参见我们之前的公众号介绍。
图1 NeRF模型 ([1] 图7)
由上图可见NeRF方法的网络结构与计算特征不复杂,一次前向的乘加(MA)次数为:
60x256+256x256x4+(256+60)x256+256x256x4(256+24)x256+256x128 = 64,409 = 629K 
虽然单次计算量并不大,但用NeRF方法渲染图像的容积投影涉及多次采样,这使得全过程计算量巨大。
2. 容积投影
容积渲染假定3D场景的所有位置体素都可以由其色彩和不透明度(密度)来表达,沿着指定观察方向对空间体素积分即可实现渲染。
图2 容积积分的ray marching
如图,容积渲染是一个ray marching过程。具体实现可分为几步:
1) 根据视角和成像面分辨率确定投影射线位置
2) 射线上采样体素,逐点输入NeRF网络计算颜色密度
3D场景有效体素的分布是稀疏的。为提升采样效率,Nerf采用了二次采样方法。第一次粗采样64点,估计该射线体素的概率密度分布。第二次根据密度分布,再采样128点。
3) 射线上所有点积分,得到成像面一个像素的渲染值。
4) 扫描成像面所有像素,完成整幅图像渲染。
由此可见,NeRF渲染图像需要执行多次的采样和NeRF网络计算。如果产生一幅1024x1024的图像,我们可以估算其乘加次数为:
一个投影像素 192个采样:192x629K = 123,666,432 = 117.94M
一幅1024x1024图像:1024x1024x117.94 = 117.94T
GauGAN及其SPADE算子
GauGAN是神经渲染另一个影响较大的工作,以对抗神经网络为主体,主要应用于语义图像合成。自2019年发布以来,GauGAN在学界引起很大反响,许多后续工作借鉴和利用了它的算法。
GauGAN方法整体上是一种可控制的对抗生成网络,用语义图和自然图像训练网络。训练中自然图像由 encoder生成隐空间变量,与语义图一起在生成器产生真实感图像,并在判别器比较。训练好的生成器可以根据输入的语义图产生真实感图像。具体详情可参见我们之前的公众号文章。
图3 GauGAN基本架构 ([2] 图15)
GauGAN也称为SPADE网络。这是因为其Generator集成了特殊定义的激活归一化算子 spatial adaptive normalization(SPADE)。

1. SPADE

GauGAN的生成器采用了SPADE算子对卷积层激活做归一化。SPADE算子的提出是为了克服BN后语义信息丢失问题。SPADE算子中batch norm的控制参数与对应的语义图特征相关:
其中,m是语义图,i是网络层,h为输入feature,c,y,x分别为feature通道及二维坐标。由公式可知,归一化计算中控制变量γ和β是空间坐标和特征通道的函数,需要根据输入的语义图由卷积网络计算而得。
图4 SPADE算子([2] 图2和图10)
可以看出控制变量γ和β是与feature map尺寸相同的tensor,由语义分割图计算而来。对于nxnxk feature map,其计算量以乘加(MA op)衡量为:
完成一次SPADE norm的控制变量共需
次乘加运算。相应的网络参数量为:
GauGAN方法将经典的卷积残差模块中的BN用SPADE算子代替,构建了新的SPADE Residual Block并用于生成器网络。
图5 SPADE ResBlk([2]图11)
因此一次残差模块需三次SPADE norm控制变量的计算,共计:
整个生成器网络结构如下:
图6 SPADE生成器 ([2] 图12)
共计7层SPADE残差模块,输入feature map尺寸kxhxw由1024x4x4逐步增加到64x256x256。以图中列出的参数为基础,对应SPADE模型的参数及计算量如下表。其中第4列是SPADE norm的乘加数量,第5列是ResBlk中卷积算子部分的乘加数量。可以看到SPADE的乘加数远超过普通残差网络的计算量。

2. Spectral Normalization

Spectral normalization是在对抗生成网络中使用的权重处理方法,由Miyato等在Spectral Normalization for Generative Adversarial Networks一文提出。该归一化是对网络参数的处理,而非像batch norm一样对feature maps的处理。
与许多GAN实现一样,GauGAN也使用了Spectral Norm对网络权重归一化以保证收敛。具体来看,GauGAN方法对Generator和Discriminator中的卷积算子都作了归一化处理,将卷积核矩阵权重除以该矩阵最大奇异值来归一化。
矩阵奇异值一般需要通过矩阵奇异值分解获得。这是一个计算代价很大的过程,而在网络训练中更新权重还需要反复执行该操作。因为Spectral Norm仅需计算最大奇异值,我们可以通过幂迭代近似来计算,该操作通过多次矩阵乘迭代来逼近结果,减少了计算量。在原文中,作者更指出一次迭代即可达到精度要求。
一次迭代设定下,给定mxn的矩阵W和随机初始mx1向量u,谱归一化计算步骤如下:
然后计算最大特征值(谱范数)
。权重矩阵W除以该值即可得到归一化的权重矩阵。由此可知,矩阵谱归一化中二次向量更新需要的乘加计算量为2xnxm次(忽略分母中二范数的计算量)。
其它方法中的一些特色计算
1. ModLinear算子
GANcraft是2021年上半年提出的一项有影响力的工作[3]。它以MineCraft风格的语义像素块作为输入,输出的不仅仅是对应的单张真实感图像,而是任意视角的真实感图像。我们在之前的公众号曾经有详细的分析。
图7 GANCraft整体架构([3] 图3)
从算子特征角度来理解,GANcraft集成了NeRF和GauGAN两种结构。除了上述网络计算结构特征外,GANcraft的神经辐射场网络Per-sample Network加入了ModLinear算子来让风格特征调节网络输出风格。
图8 基于MLP的Volume radiance field模型with ModLinear Operator([3] 图6和图10)
从计算特征来看,ModLinear算子涉及运算较简单,主要是矩阵乘加、向量乘加的组合。风格特征向量经过linear产生系数和bias与输入特征乘加形成风格调制的输出。主要的乘加计算如上图红色标记,共计:
ModLinear算子与[4]中的Rendering-aware denormalization(RAD)算子的计算结构类似,此处不再赘述。值得一提的是[4]文研究了传统渲染与神经网络方法融合的方法,是一个很有价值的思路。
图9 RAD模块([4] 图8)
2. AutoInt[5]
与前面介绍的方法和算子结构不同,AutoInt并不是一种完成单一功能的方法、网络结构或算子,而是一种新型的网络计算与优化思路。
AutoInt将容积渲染中一条射线的投影看作是定积分,并定义对应的神经网络G代表积分过程,然后对该神经网络G求导得到对应的导数网络D。显然,神经网络G, D具有共同的网络参数。AutoInt首先训练导数网络D,然后将优化的参数代入积分函数网络G。给定投影线的起始点,容积投影可通过计算神经网络函数G在两点的差值来计算,即两次对G的前向计算就确定了投影值。图10很清晰地描述了该方法。
图 10 AutoInt流程([5] 图1)
具体实现上,AuoInt将神经网络表达为有向无环图DAG,通过自动微分,逐个节点递归调用构建梯度网络。众所周知,对积分函数网络求导是一个求偏导的过程,由于中间变量的原因,对应的导数网络存在多个分支。一般情况下,导数网络看起来像多支并行的神经网络结构。
图11 AuotoInt DAG实例 ([5] 附录图1)
AutoInt从整体上简化了前向积分,但从计算特征角度来看,训练是在导数网络上进行,网络结构与参数计算的复杂度似乎相对增加了。但实际上,各条分支的对应节点是相同的。一个节点的值计算一次即可多次复用。因此导数网络的前后向推导时总的计算量并没有增加。
AutoInt是从基本的微积分原理出发提出的新型计算方法,充分利用了学习框架的自动微分能力。它不仅仅适用于容积渲染,而是可以应用到任何沿输入积分的情况。对于深度PDE求解的mesh-free方法或其它以坐标为输入的深度学习网络都可以利用定积分和AutoInt方法。
小结
神经容积表达和对抗生成网络是神经渲染实现的两个重要工具。本文以GauGAN和NeRF为对象,简要分析了神经渲染中深度学习方法的一些有特色的结构和计算特征。由于神经渲染发展迅速,各种方法层出不穷,我们无法一一列举。希望我们的初步调研能够起到抛砖引玉的作用。我们后续会持续跟踪这些方面的进展,也欢迎有兴趣的朋友一起参与。
参考文献
[1] B. Mildenhall, et. al., NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis,arXiv:2003.08934v2.
[2] T.Park et.al., Semantic Image Synthesis with Spatially-Adaptive Normalization,  arXiv:1903.07291v2
[3] Z. Hao, et.al., GANcraft: Unsupervised 3D Neural Rendering of Minecraft Worlds, arXiv:2104.07659.
[4].S. Richter, H.AlHaija, and V. Koltun Enhancing photorealism enhancement, arXiv:2105.04619v1.
[5] D. Lindell, J.Martel and G. Wetzstein, AutoInt: Automatic Integration for Fast Neural VolumeRendering, arXiv:2012.01714v2.
关于壁仞科技研究院
壁仞科技研究院作为壁仞科技的前沿研究部门,旨在研究新型智能计算系统的关键技术,重点关注新型架构,先进编译技术和设计方法学,并将逐渐拓展研究方向,探索未来智能系统的各种可能。壁仞科技研究院秉持开放的原则,将积极投入各类产学研合作并参与开源社区的建设,为相关领域的技术进步做出自己的贡献。
扫码关注我们
继续阅读
阅读原文