1. 引言
材质建模是图形学研究与应用中的热点问题,是通过某种方法或手段对材质的粗糙度、漫反射率、高光反射率和法向等属性进行建模,以确定这些属性的值从而提高对物体渲染的真实感。传统的材质建模是通过人工的方式获得,为了节省成本并提高效率,目前已经有人使用深度学习的方法通过反复学习基于未知光照环境下的双向散射分布函数材质样本图片重建材质的属性。但利用深度学习进行材质建模的缺点是训练数据十分匮乏,影响重建的效果,同时也因为神经网络模型太过复杂,容易出现过拟合现象。本文基于文献 [1] 提出的方法对基于深度学习的材质建模方法进行研究,力图对训练数据匮乏及过拟合问题提出解决方案。论文的主要贡献如下:
1. 提出了一种自动化高效生成所需标记数据集的方法,通过控制渲染程序批量地渲染了用于训练的标记数据对。
2. 对文献 [1] 的网络结构进行改进,通过添加Dropout层和Inception结构,减少了过拟合现象的发生并提高了模型的预测精度。
3. 实验并讨论了自增强训练策略对卷积神经网络解决材质建模问题的有效性。
2. 相关工作
2.1. 材质属性获取方法
物体的材质参数建模是一个非常困难的问题,常见的方法是通过专业仪器多角度的测量获取,或是进行人工绘制,费时又费力。近年来出现了很多利用深度学习工具来解决材质建模的方法,并且效果都比较理想。Dror等人 [3] 第一个证明机器可以训练学习算法来对低级别的材料进行图片分类功能,从那时起利用深度学习工具解决相关问题成为了一个有效的方法。例如图像分解以及反射率和照明度估计,但是由于材料级别低,估计值很不理想。Zhu等人 [4] 采用了编码器-解码器架构来估计漫反射率和法线贴图。但是,他们的方法只能恢复材料样本上的均匀镜面反射参数并他们针对不同的材料只训练了一个通用的网络。Xiao Li等人 [1] 提出使用一个卷积神经网络(convolution neural network, CNN)去实现物体的表观建模,他们只需要一张在未知光照条件下拍摄的平面的材质样本照片,就可以通过它重建出样本图片中材质的表观特征。他们遇到的最大的障碍在于他们十分缺少标记数据对(未标记的普通图片及对应的表观参数)。
对照明条件的限制更好地显示了反射率属性的估计更依赖于主动照明。Wang [5] 等人使用阶梯边缘照明条件来推断空间变化的表面法线,以及均匀材料的反射率特性。Oxholm和Nishino [6] 依赖已知的照明来恢复形状并在自然光照下从物体的单张照片获得物体的表面反射率。Aittala等人 [7] 利用固定材料的相似性估计空间变化的法线和反射率特性,从闪光灯下的平面材料样品的一张照片中使用深层纹理合成框架,而不是依赖主动照明。所有这些方法要么需要主动照明,要么需要对照明有充分的了解,这就排除了它们对在非受控捕获条件下获得的输入照片的适用性。
2.2. 训练数据集获方法
许多深度学习方法的共同弱点是都要依赖大型的训练数据集。Wojciech Matusik等人 [8] 采样了100个不同材质球体的材质属性。他们制作了一个具有两个机械臂的采样所用的机械装置去采样得到这些材质属性特征,这个机械装置能够自动地在不一样的光照条件和相机视角下,去拍摄一个球体的模型的照片,以此来获得所需要的样本数据。但是这种方法不只要求制作巨大且昂贵的设备,还需要手动制作100个具有均匀材料的真实模型,在实际应用中不太可能使用这种耗时耗力的方法。
Jiaping Wang等人 [9] 将这个流程优化,即使用相机固定某一视角从而可以获取大量训练数据(样本图片),同时在图片数据的每个像素点上采集局部材质特征,并使用这些材质特征作为寻找材质物体表面相似特征像素点的参照对象。紧接着就是收集包含类似材质属性特征的所有像素点,最后他们就可以重建出材质图片对应的表观属性。尽管使用了数据之间的相关性减少了必须的图像数据数量,但是由于一开始的采集部分还是需要使用不少的人力物力,一组高质量的样本数据仍要花费很长的时间去完成其数据的采样过程。
为了减少需要获取的图像数据量,Zhiming Zhou等人 [10],提出了一个尽力精简的模型,使用具备代表性的材质来表现所关联的图片,从而达到简化网络复杂度的目的。相比与普通的简化网络模型,他们改进的模型对图片数据数量的需求进一步的缩减,对于某种材质,只需几分钟去采集若干张材质样本的照片,就可以对材质进行高质量的材质表观重建,但由于模型复杂度低,训练空间小,很难训练出有效的模型,导致预测出的结果非常不理想。
3. 改进的Pre-Net网络模型
利用深度学习工具解决图形学领域中的问题已经成为一种常见方法,构建何种结构的卷积神经网络才能更高效的完成材质建模是本文研究的重点。本文以Xiao Li的Pre-Net为基础,仔细分析了模型的重点和难点,提出了DISAPre-Net (改变了网络层结构并且经过自增强训练后的Pre-Net),改进后DISAPre-Net可以更好地应对网络训练中经常出现的过拟合现象同时可以提高模型的预测能力。
3.1. Pre-Net基础结构
Pre-Net由两子网络组成,分别是Spec-Roughness-Net和Albedo-Normal-Net。前者用于估计高光和粗糙度分量,后者用于估计漫反射和法向分量。Pre-Net结构如图1所示。
图2中蓝色和棕黄色部分是分析子网,由三部分组成,分别是卷积层(Convolution)、批量标准化层(BatchNormalization, BN)和激活层(ReLU)。卷积层作为特征提取层,将每个卷积核进行卷积计算,并将结果作为下一层的输入,是提取图片高纬特征的重要组成部分。模型在训练过程中不断更新权重参数,而每一层输入的数据分布和之前相比会有很大差异,需要模型不断去适应新的数据,导致训练过程异常艰难。BN层可以对上一网络层的输入进行标准化处理,让数据的分布强行回到正太分布,减少了数据分布对模型的影响。ReLU激活层可以通过ReLU激活函数(非线性函数)增加模型的非线性表达能力。
![](//html.hanspub.org/file/23-1541732x9_hanspub.png)
Figure 1. Spec-Roughness-Net
图1. Spec-Roughness-Net
两子网络中分析子网使用的填充都为0,但前者步幅为2,后者步幅为1。选择卷积核的尺寸大小为3 * 3,原因是较小的卷积核可以增强网络容量和模型复杂度同时减少了卷积参数的个数。此外,图中还给出了通过相应的卷积和汇合操作后网络的相关维度。可以形象的看到经过每一次卷积之后图像的大小以及每一次提取的特征数。
分析子网之后跟着两个不同的合成子网。对于Spec-Roughness-Net来说,分析子网后连接了一个具有1024个隐藏变量的全连接层以及六个输出节点(高光反射率和粗糙度对每个颜色通道的预测),通过这些来合成所需要的合成子网。而对于Albedo-Normal-Net来说,分析子网后面连接了一个双线性上采样层,用来扩大特征图。在这之后连接了一个卷积层、ReLU激活层和BN层,共同组成了合成子网。在图2中每一层的特征映像和与之对应的子网层次用红色箭头相连,可以弥补在特征提取过程中丢失的高频像素。
3.2. Pre-Net改进方法
当卷积神经网络模型太过复杂或训练数据集不匹配模型复杂度时会出现过拟合现象。分析层可以提取高维特征、对参数标准化和增加模型的非线性能力,在分析层后添加Dropout可以屏蔽某些节点,让经过分析层出来的特征符合样本材质的普遍特征。所以本文在Pre-Net网络基础上,在每个分析层后添加Dropout层来解决过拟和问题,同时为了提高模型的预测精度,在网络层加入Inception结构。
Albedo-Normal-Net以及Spec-Roughness-Net在一定层度上都属于复杂规模的神经网络,而且训练数据集相对较少,复杂度不能与模型匹配,所以在训练过程中模型对表观参数的预测会出现过拟合。过拟合现象是CNN训练过程中经常出现的一个问题,其表现在对训练数据预测较好,对交叉测试集预测先好后差。Dropout可以有效解决模型在训练过程中出现的过拟合问题。Dropout原理如图3所示。
图3上部分是添加Dropout之前,下部分是添加之后。Dropout的作用主要可以分为两点,第一点是取平均的作用即选择性的丢弃神经元,类似训练一些不同的网络。第二点是可以减少神经元之间复杂的共适应关系。简单来说,模型在前向传播过程中,Dropout会随机的丢弃神经元,使得权值的更新不再依赖某些神经元,即使这些神经元丢弃,也会在其他神经元中学习到共同的特征。本文使用的Dropout rate (神经元的丢弃比例)是0.5,模型在进行批训练时,Dropout程序可以产生不同的网络结构。而当dropout rate在0.5的时候,随机生成的网络结构最多。
传统提高模型预测能力的方法主要有两种,即增加模型的复杂度和扩大训练集。但这两种方法有很严重的缺陷,不仅增加了权重参数,而且非常耗时。“稀疏连接结构”可以从本质上提高网络性能,而Inception module即保持了网络结构的稀疏性,又能够使用密集矩阵的高效计算。Inception结构如图4所示。
当加入Inception结构后,可以将单个卷积层变成一个小型神经网络,不同层的特征会被组合到一起,一般来说同层间的高层特征和底层特征并不能结合,而inception结构恰好解决了这一问题。实现了不同尺度特征融合,提高了模型的预测精度。
4. 数据渲染及自增强策略
训练模型需要大量的图片数据,而每一种样本图片都需要随机的未知灯光,如果手动渲染则会大幅降低渲染效率,所以本文提出一种批渲染方法,通过脚本程序来完成渲染任务。同时,采用了一种利用未标记图片来增加训练数据的训练策略即自增强策略。
4.1. Ward模型
本文中对Albedo (漫反射)和Specalbedo (高光反射)建模是由Ward BRDF (双向反射分布函数)实现的,它由两部分组成。第一部分是漫反射部分ρd/π,由于本文的漫反射分量是基于空间变化的,所以用ρd(x)来代替ρd。另一部则是高斯各向异性反射模型,这一部分有三个参数ρs,αx与αy。其中ρs表示的是高光反射率,而αx与αy可以理解为样本材质表面在x轴和y轴方向上的粗糙度。Ward BRDF函数模型如公式(1)所示:
(1)
公式中的θi,θo和θh分别表示了入射向量,出射向量以及半角向量。其中θh是入射光向量与出射光向量求和后再标准化,即
。计算公式如(2)所示:
(2)
公式(2)中的u和v表示的是两个完全无关的随机数,取值范围是0到1。从上式可以看出为了得到θh,必须先计算出
,而在计算过程中需要注意一个地方,那就是v和
必须要在同一象限内。
4.2. Normal模型
实际生活中,我们观察到物体表面的凹凸感来源于光线在物体表面上的明暗变化。假如可以通过一幅贴图实现光照的明暗变化,就可以在视觉效果上模拟出平面物体表面的凹凸感。在计算机中可以通过改变物体的法线朝向,从而产生这种凹凸感,Normal函数模型如公式(3):
(3)
公式(3)中,R表示样本材质图片表观粗糙度,粗糙度取值范围是0到1,当R为1时表示图片表面粗糙度最高,即没有任何高光反射。当R为0是表示图片表面光滑。
4.3. 图片渲染
实验使用Maya搭建虚拟3D环境,使用mitsuba for Maya渲染单张图片,具体步骤如下:配置渲染设置,调整场景中的模型、灯光、摄像机等,调整并赋予模型材质,最后渲染,保存图片。由于本文提出的方法需要大量的图片数据,而且每一张样本图片都需要随机的未知的一种灯光,都具有不同的材质属性,每次渲染都需要调整,这种手动控制渲染图片的过程明显不适合,效率太低。本文提出使用脚本语言控制mitsuba for Maya完成实验中渲染任务。同时可以利用Python一些强大的功能,比如随机、循环、科学计算等来帮助完成调整材质参数、灯光参数,以及给予得到未知的或随机的材质参数或灯光参数的能力。
在使用脚本语言后,可以一次性用写好用来渲染一整个标记训练集的脚本语言文件,在需要标记训练集时只需要在mitsuba for Maya中运行这个脚本文件即可。而且,在需求改变后,只需修改脚本文件内的逻辑。以实验中的一次渲染任务为例,若想读取一个文件中列出的1000组材质参数,渲染1000张未知光照条件下的平面样本图片。首先,使用Python的文件读写库读入已知的1000组材质参数;使用脚本语言配置一些mitsuba必须的渲染设置(如默认渲染器、是否启用全局光照、采样方法、采样深度等等);然后启动渲染循环,在每一次循环中,随机改变光照环境并旋转随机的角度,赋予材质相应的材质参数;最后设置本次渲染循环的最终图片的保存位置及命名方式,保存当前必要信息,开启本次循环的渲染;整个过程是通过脚本语言文件内写好的逻辑控制的,在执行渲染任务时不需要进行人工干预,高效、快速,可扩展性强,可以随时根据实验进度修改渲染逻辑,既实现根据人工选择的材质集参数渲染初始的训练数据集和未知标记数据,又实现自动读入网络预测所得参数集去渲染出相应的图片集。
4.4. 自增强训练策略
本文受限于材质规模,当前可用材质库不具备如此全面的信息,并且整理后可以用来做训练数据的材质照片远远不够。为了完成文中空间变化的双向反射分布函数网络,需要借用普通的平面照片,制作出尽可能多的训练数据,并且这些训练数据要覆盖此类材质的尽可能多的空间变化特征。在制作训练数据的过程中,还需对每种空间变化模拟相机方向和光源方向,并对每种环境下的数据充分采样,以此来完成在后期训练完成的模型测试中,对未知光源环境下的同类材质做表面反射参数的预测。
为了使用未标记(没有表观参数)的平面材质图片作为训练数据,实验需要先使用有标记的材质图片作为初始训练数据,网络学习后会得到一个初始的CNN,即Pre-Net。对任一张未标记的平面材质图片,Pre-Net可以初步预测出材质对应的表观参数。接下来本文将未标记数据和标记数据各自分成多组,循环作为输入,用来提升初始网络的预测能力。本文将介绍这个循环改进网络的自增强的训练过程。自增强训练分为两个阶段(如图5所示)。
![](//html.hanspub.org/file/23-1541732x21_hanspub.png)
Figure 5. Self-augmented training process
图5. 自增强训练过程
第一阶段是使用已标记数据集训练CNN:使用带有表观参数的平面材料样本中的图片组合为标记数据集对网络进行训练,得到一个初始的网络(Pre-Net);该网络对训练图片的预测与其标签的误差被描述为loss,根据loss的变化,对超参数进行调整,或分析得到网络是否收敛或过拟合的信息。
第二阶段是使用未标记数据集训练Pre-Net:首先把一批未标记图片送入所得初始网络中进行正向预测,得到的预测标签;然后根据预测标签值渲染得到一组新的图片,与这组预测标签共同组成为一组新的标记数据集,使用它们对这个初始的网络继续进行训练,得到新的自增强过的网络(SAPre-Net);同样,其对训练图片的预测与其标签的误差被描述为loss;最后,把增强过的网络当作新一轮的初始网络,把这组渲染的图片当作新一轮的未标记图片,重复这一阶段的过程,直至网络收敛。未标记数据为网络上搜集的材质贴图,材质类型分别是塑料、金属和木头。
本文将经过自增强训练的Pre-Net称为SAPre-Net,改进后并经过自增强训练的PreNet-称为DISAPre-Net。
4.5. 超参选择
超参是卷积神经网络在训练之前需要设置的参数,而非训练所得,实验需要找到一组最优超参,用来提高卷积神经网络的性能和效果。
表中Learning rate,是模型训练中重要的超参,它监督学习并且决定模型的收敛情况(何时收敛或是否能收敛)。本文使用的初始learning rate为0.002,Policy表示的是学习率策略,Inverse表示随着迭代次数增加而减少,Gamma表示学习率每次的变化程度。Weight decay表示的惩罚权重参数的力度,从模型的复杂度角度来说,权重参数更小模型的复杂度也就越低,对数据的拟合性也更好。momentum是一个常量。Mini-batch-size表示选取样本的数量,如果数量偏大,会降低模型的泛化能力,反之,会导致训练速度过慢。经过实验多次对比,本文最终选取Mini-batch-size为16。
本文基于初始网络(Pre-Net)提出了自增强网络(SAPre-Net)和改进后的自增强网络(DISAPre-Net)。并对这三种网络进行了多轮的实验对比,分别进行了实验、训练和调参,并对得出的结论进行分析对比。此外,对改进后的DISAPre-Net,进行训练集的分类训练,超参列表如表1所示。
5. 实验结果与分析
5.1. 实验介绍
实验主要探究两个目的:第一个目的是探究自增强策略的有效性;第二个目的是探究经过优化后的卷积神经网络能否解决过拟合现象和提高网络模型的预测能力。
本文实验的三种网络分别是Pre-Net (Xiao Li提出的基本网络)、SAPre-Net (经过自增强训练的网络)和本文提出的DISAP-Net (优化后的自增强网络)。通过平面材质参数的预测情况来对比预测模型之间的性能差异。实验步骤为先以Pre-Net和SAPre-Net的参数提取的准确性证明自增强模式的有效性。之后做SAPre-Net和DISAPre-Net的参数提取,验证了Dropout层可以解决训练深度学习神经网络时经常会出现的费时(过慢收敛)和过拟合问题。Inception结构也会提升模型的学习能力,使预测精度进一步提升。
以上实验都是四个参数同时训练,本文在后面还会分别对漫反射和法向两个参数单独训练,判断训练过程中多个参数同时进行是否彼此限制。本文的实验均在Caffe环境(深度学习库,提供了多种网络模型)中完成。实验所用的训练数据集来自于Sean Bell等人 [2] 的在线材质库。
5.2. 三组对比试验
本文将进行三组实验的对比,第一组实验是Pre-Net和SAPre-Net之间的对比,用于验证自增强的有效性;第二组实验是SAPre-Net和DISAPre-Net之间的对比,用于验证后者是否避免了过拟合现象和能否提高模型的预测精度;第三组实验是DISAPre-Net预测所有参数和预测单个参数之间的对比,用于验证预测单个参数的可视化结果是否更加准确。
实验中的三轮训练均设置了128个时期(epoch,一个epoch表示将所有训练数据完整训练一次的过程),下面展示Pre-Net、SAPre-Net和DISAPre-Net对材质表观参数的预测以及模型的收敛情况。
图6~图8中,第三列表示材质样本图片,前两列与后两列分别表示由材质样本图片提取的漫反射贴图和法向贴图,其中左列为预测值,右列为参照值。
![](//html.hanspub.org/file/23-1541732x22_hanspub.png)
Figure 6. Pre-Net predicted results
图6. Pre-Net预测结果
![](//html.hanspub.org/file/23-1541732x23_hanspub.png)
Figure 7. SAPre-Net predicted results
图 7. SAPre-Net预测结果
![](//html.hanspub.org/file/23-1541732x24_hanspub.png)
Figure 8. DISAPre-Net predicted results
图8. DISAPre-Net预测结果
图6可以看出无论是漫反射贴图的纹理形状、颜色还是法向贴图的凹凸情况,预测结果都与参照值差异较大,此时的Pre-Net不能达到实验对模型的要求。图7中是SAPre-Net预测出的结果,对颜色和整体特征的把握有了很大的进步,纹理的大致信息都较为准确,但颜色细节没有完全回归。最后图8是DISAPre-Net预测出的结果,漫反射的颜色和纹理细节提取都很接近真实值,足以说明Inception和Dropout可以实现对模型预测能力的强化。
为了比较模型预测值和实际值,本文用MSEloss函数直观观察三个网络的性能。横坐标表示迭代次数,纵坐标表示loss值即预测值与实际数值的误差,曲线越平滑幅度越小说明模型的预测能力越好。Pre-Net、SAPre-Net、DISAPre-Net的loss曲线如下:
图9为Pre-Net的loss曲线,整体来看曲线波动较大,收敛较慢,因为第一阶段的训练是为了让模型
具备初步的预测能力。实验设置100 K次迭代,迭代完成后由图6知网络已经有了一定的参数提取的性能。图10为SAPre-Net的loss曲线,对比图11的DISAPre-Net,SAPre-Net也会出现了一定的过拟合现象,并且相对于添加Inception和Dropout后的DISAPre-Net,可以看出在第50 K次迭代的时候,前者的loss值在0.005,后者的loss在0.001,足以说明DISAPre-Net在开始阶段就已经表现出很好的收敛情况,并且曲线整体平滑。这就可以提前结束第一阶段进行第二阶段,从而缩短整体训练时间。准确来说,训练时间由12小时缩短到了9小时。
Loss曲线结合预测可视化的情况,也说明了Inception和Dropout在对模型性能和训练时间上的有效性。
5.3. 反射分量拆分训练
实验中默认同时训练四个参数,本文猜想多参数同时进行训练时是否参数间会有相互影响,考虑单个参数输入网络学习,本文尝试单独训练漫反射和法向。DISAPre-Net同样配置128个时期(epoch),其他参数也保持相同。图12(a)展示了漫反射的loss曲线,图12(b)为法向的loss曲线。
图12中两个训练参数均在0.001处收敛。与DISAPre-Net的多参数同时训练结果大致相同,并不能证明多参数同时训练存在相互影响。下面展示预测图:
(a)
(b)
Figure 12. Convergence of loss function in single parameter training
图12. 单参数训练的 loss函数收敛情况
![](//html.hanspub.org/file/23-1541732x30_hanspub.png)
Figure 13. Prediction of diffuse reflection alone
图13. 单独漫反射预测
![](//html.hanspub.org/file/23-1541732x31_hanspub.png)
Figure 14. Prediction of normal reflection alone
图14. 单独的法向预测
根据图13和图14预测结果和参照值之间的对比,能够看出几乎所有的特征提取值都与参照值近乎相同。对比四个参数同时训练的参数提取结果,虽然loss曲线收敛结果貌似并无不同,但从物理外观上看,预测的结果与实际基本一致。可以这样认为,单独训练一个参数,模型的性能会优于多个参数模型,但综合来说,在时间上单独训练一个参数超过了5个小时,四个参数单独训练完毕远超过共同训练的时间。并且第二组对比实验中模型的性能从预测结果来看已经足够好。所以还是建议多参数共同训练。
表2中roughness列为粗糙度的提取值,rough-ref列为粗糙度实际值。Spec列为高光的提取值,Spec-ref列为高光实际值。从数据上可以看出经过自增强训练后,网络性能有大幅度提升。并且模型经过Dropout和Inception优化后预测结果也更加精准。
![](Images/Table_Tmp.jpg)
Table 2. Prediction results of three kinds of networks for specular and roughness
表2. 三类网络对高光和粗糙度的预测结果
5.4. 反射分DISAPre-Net的材质特征提取结果
对于同一类材质,比如木头,已经包含了足够多的纹理信息,所以本文将材质分为木头、金属和塑料三类,使用最终网络DISAPre-NET分别学习并测试。
图15~图17中,第一列为训练数据,第二列开始,上半部分分别是为漫反射、法向、粗糙度和高光的参照值,下半部分分别是漫反射、法向、粗糙度和高光的预测值。实验中不能排除偶尔相差太大的高光预测的“脏”数据,总体来说三种材质类型的预测和参照是是比较准确的。
6. 结束语
本文在已有材质建模研究方法的基础上提出了一种基于Pre-Net的建模研究方法。首先建立渲染环境,将平面材质图片和对应的表观纹理属性在不同光照环境下渲染出来,组成新的标记训练对,用来扩充训练数据集,保证尽可能多的覆盖材质的空间变化特征。其次搭建一个能从单张未知光照环境下的平面样本材质图片中重建出材质表观属性的卷积神经网络,该网络是经过Dropout和Inception优化后可以提高预测精度和避免过拟合问题。最后通过实验对比,验证了自增强策略是一种有效策略。