system: [SYSTEM]

user: 4. 数据渲染及自增强策略 训练模型需要大量的图片数据，而每一种样本图片都需要随机的未知灯光，如果手动渲染则会大幅降低渲染效率，所以本文提出一种批渲染方法，通过脚本程序来完成渲染任务。同时，采用了一种利用未标记图片来增加训练数据的训练策略即自增强策略。 4.1. Ward模型 本文中对Albedo (漫反射)和Specalbedo (高光反射)建模是由Ward BRDF (双向反射分布函数)实现的，它由两部分组成。第一部分是漫反射部分ρ d /π，由于本文的漫反射分量是基于空间变化的，所以用ρ d (x)来代替ρ d 。另一部则是高斯各向异性反射模型，这一部分有三个参数ρ s ，α x 与α y 。其中ρ s 表示的是高光反射率，而α x 与α y 可以理解为样本材质表面在x轴和y轴方向上的粗糙度。Ward BRDF函数模型如公式(1)所示： f r ( i ， o ) = ρ s 4 π α x α y cos θ i θ o e − tan 2 θ h ( cos 2 ϕ h α x 2 + sin 2 ϕ h α y 2 ) (1) 公式中的θ i ，θ o 和θ h 分别表示了入射向量，出射向量以及半角向量。其中θ h 是入射光向量与出射光向量求和后再标准化，即 θ h = ( θ i + θ o ) / | θ i + θ o | 。计算公式如(2)所示： θ h = a r c t a n − log u cos 2 ϕ h / α x 2 + sin 2 ϕ h / α y 2 ϕ h = arctan ( α x α y tan ( 2 π v ) ) (2) 公式(2)中的u和v表示的是两个完全无关的随机数，取值范围是0到1。从上式可以看出为了得到θ h ，必须先计算出 ϕ h ，而在计算过程中需要注意一个地方，那就是v和 ϕ h 必须要在同一象限内。 4.2. Normal模型 实际生活中，我们观察到物体表面的凹凸感来源于光线在物体表面上的明暗变化。假如可以通过一幅贴图实现光照的明暗变化，就可以在视觉效果上模拟出平面物体表面的凹凸感。在计算机中可以通过改变物体的法线朝向，从而产生这种凹凸感，Normal函数模型如公式(3)： N = R 2 π ( cos 2 θ h ( R 2 − 1 ) + 1 ) 2 (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所示)。 图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所示。 Table 1 Hyper-paramete Learning rate Weight decay Momentum Mini-batch size Inital Policy Gamma 10-4 0.9 16 0.002 Inverse 10-4 表1. 超参数