刘洋,樊养余,郭哲,吕国云*,刘诗雅
1.西北工业大学电子信息学院, 西安 710072; 2.虚拟现实内容制作中心, 北京 101318
人脸纹理图像的生成是3维人脸重建中一项重要的环节,人脸纹理图可以将图像中的像素信息映射到对应的3维人脸模型上,从而使3维模型呈现出更逼真的显示效果,纹理图像的重建结果可以直观影响到3维人脸模型的真实感。
人脸纹理的获取方式主要有两种:1)基于人物的扫描信息;2)基于人物的2维图像信息。人物的扫描信息一般通过专用扫描设备利用红外或结构光对人物进行360°扫描,这种扫描在可控环境下进行,精度非常高,可以很好地捕获到人脸的外观信息,多用于人脸数据库的样本采集(Ploumpis等,2019;Booth等,2018;Ma等,2015;Cao等,2014)。基于2维图像的纹理生成可以细化为两种表示方式:1)基于图像本身的UV(ultraviolet)贴图表示,通过图像在UV空间中利用对应的逐顶点像素值来表示纹理信息;2)在3维人脸重建过程中的外观信息统计学表示,人脸外观信息统计学表示是3维人脸重建的一部分,根据输入图像的外观信息进行统计学分析,利用纹理模型得到对应人物的纹理信息。外观信息统计学表示需要足够多的数据样本作为基础,与扫描信息的获取方式类似,对于实际应用非常不便,因此本文的主要研究内容是利用单幅人脸图像生成对应的UV纹理图。
传统的人脸纹理图是对目标人物头部在不同视角下的拍摄图像通过简单拼接得到,这种方法在实际中不易实现,并且不同视角下的图像在面部光照和拍摄参数上有差异,会引起图像像素的非连续变化,获取到的纹理图在实际显示时效果欠佳。但这些不同视角图像可以有效获取到人脸在各区域的真实特征,创建的纹理图更完整(Liu等,2019)。基于该优势,Li等人(2017)从人物不同的视图中记录面部图像序列,利用基于主成分分析(principal component analysis,PCA)的线性子空间模型在UV空间建立纹理模型,并对纹理图像进行建模。Dai等人(2017)使用环绕头部不同视角下的5个原始纹理图像来生成头面部全景纹理图,通过像素嵌入的方式为整个头部定义UV空间外观表示。还有一些基于面部视频的纹理生成方法(Tewari等,2019;Gao等,2019;Ichim等,2015),从视频中捕获不同视角下的面部图像,然后再用固定角度的图像进行面部纹理拼接。这些方法均以多个互补视角下的原始纹理图像为输入,通过像素嵌入的方法来生成信息较为完整的面部纹理图。这种像素嵌入的方法可以保持纹理图与原始图像相同的像素特征,但需要输入条件可控,无法应用于实际情况。
在实际中,人脸正面图像易于获取,但从固定环境下获取人脸其他角度的图像较为困难(Zheng等,2019)。对于单幅人脸图像恢复面部UV纹理图,最直接的方式是基于3维人脸在UV空间的像素分布进行纹理映射,但生成的结果在原始图像中未显示的区域会出现纹理缺失。常规的解决方法通过图像平滑(Fan等,2018)和像素插值处理的手段对纹理缺失区域进行补全,但获得的像素分布与原图差距较大,最终显示效果差,如图1所示。
图1 常规方法获得的面部纹理图Fig.1 Face texture map generated by conventional method ((a)original images;(b)initial texture;(c)texture after pixel interpolation)
基于3维可变人脸模型(3D morphable model,3DMM)原理,一些方法利用统计学分析对纹理模型拟合求解,加入光照和反照率估计,从而恢复出对应的人脸纹理图。这种人脸纹理模型的研究属于3DMM技术的一部分,最早由Blanz和Vetter(1999,2003)利用PCA的方法对统计学模型中的纹理信息进行压缩降维作为纹理模型的表示。类似的方法还有,Huber等人(2016)使用基于PCA的逐顶点外观变化模型定义一个UV映射,可以基于给定的面部图像进行纹理处理。Ploumpis等人(2021)提出一个鲁棒的矩阵分解来学习纹理样本中的面部UV属性。这些方法通过拟合3维人脸模型对初始输入图像进行采样,创建出来的面部纹理图对人脸参数保持较好。对于不受限条件下获取的人脸图像,由于光照情况和相机参数未知,面部反照率无法通过图像进行分析,直接恢复人脸纹理模型非常困难(Hu等,2017;Liu等,2015),同时对于皮肤色素的复杂变化及层次鲜明的纹理细节(如雀斑、痣及毛发等)处理能力有限。
随着深度学习技术深入地应用到人脸图像和人脸3维模型处理上,在高性能的渲染引擎和足够的数据支持下,一些模型的面部纹理图在细节上也恢复得很好。Saito等人(2017)利用深度卷积神经网络(deep convolutional neural networks,DCNN)提取中间层特征,并通过迭代优化从2D图像中合成3D面部模型的纹理图。Deng等人(2018)提出了一个基于DCNN的训练框架,来学习一个保持身份特征的UV补全网络模型,从人脸图像中提取较为完整的UV纹理图。最近的研究中,可微渲染器应用于学习面部身份特征和3DMM人脸参数之间的关系,纹理模型可以由3维模型来重构。例如Gecer等人(2019)通过对抗生成网络(generative adversarial networks,GAN)和DCNN从单个图像中重建人脸的纹理和形状,并通过端到端的可微分渲染器,在身份特征的监督下对参数进行优化。Lin等人(2020)使用一个GCN(graph convolution network)优化器和GCN解码器构成一个纹理优化模型,结合PCA模型中的姿势和光照等系数进行面部重渲染。
总体而言,目前基于单幅人脸图像的纹理生成研究中,3DMM相关的方法在多参数拟合的过程中存在病态问题,缺乏表现面部细粒度纹理特征的能力。基于数据驱动的方法受限于可控条件下纹理数据样本的获取,且容易出现局部优化和梯度爆炸的问题。基于GAN的方法训练过程不可控,同时数据成本较高,在非线性空间无法处理人脸的特征耦合。最重要的是对于单幅人脸图像,由于角度和姿态遮挡的问题,目前方法所生成的UV纹理图不完整,尤其在侧脸、头顶及脖颈区域,纹理信息缺失明显。
为了解决上述方法中存在的问题,本文提出了一种利用单幅人脸正面图像生成全景纹理图的方法。主要设计了一个网络框架,利用已有数据的先验知识从有限输入中获取人脸的约束特征,从而直接生成人脸全景纹理图。此外,本次工作收集了一定数量的人脸UV纹理图样本,经过训练的网络可以很好地补全单幅人脸图像中不可见区域的信息。经实验测试,在同等输入条件下,本文方法获得的纹理图对头面部恢复更完整,生成的像素纹理与原始输入更相似,整体效果更好。
对于输入的人脸图像,人物的面部姿态与角度已经确定,无法获取在图像可视角度外的纹理信息,因此难以从单幅面部图像中直接生成全景纹理。但人脸图像可以通过统计学模型的参数拟合与3维人脸模型建立对应关系,面部UV纹理图可以由拟合的3维人脸模型对输入人脸图像进行采样来生成。人脸模型参数的拟合是一个病态求解问题,需要以统计学模型为先验信息,而统计学模型要在严格可控的条件下获得。同时,3DMM方法并不能很好地分离出模型的光照和反照率,照明系数和表面反照率(Cao等,2018)一般通过光照模型来近似估计(Li等,2017),因此仅用3DMM方法对输入图像进行不可见区域的纹理信息恢复仍然具有难度。Yao等人(2021)基于GAN网络通过学习自适应参数将输入图像中的外貌信息整合到人脸生成器中。此类方法表明,GAN网络可以很好地对未知区域的纹理信息进行泛化补全,在当前分布未知的情况下直接采样数据,继而从网络的训练过程中近似生成新的纹理信息。但此训练过程不可控,生成器生成的样本通常与真实图像不符,特别是对于像素复杂且特征耦合度高的人脸纹理图像。
变分自编码器(variational auto-encoder,VAE)是自编码器的一种改进模型,利用无监督算法进行数据降维和特征提取(Bagautdinov等,2018;Bao等,2017)。变分自编码器是在自编码器的基础上引入了变分的思想,即引入重参数构建变分边界,使自编码器可以通过对隐层特征的修改实现对数据生成过程的微调。在这种思路下,人脸图像可以是变分自编码器模块的输入信息,经过卷积和池化之后获得输入图像降维后的隐层数据,并将人脸的身份、表情和纹理参数作为重构参数加入到隐层矢量中,用于表示输入图像与约束参数的隐层分布。一方面,变分自编码器的这一特性可以为生成对抗网络增加参数约束,在此过程中,变分自编码器服从隐层空间下的单位高斯分布;另一方面,由于输入噪声和损失函数均方误差不准确,变分自编码器模块生成的输出图像会变得模糊,生成对抗网络的无监督对抗训练又可以用来改善变分自编码器的泛化效果,从而在生成器中创建更逼真的实例。
基于上述模型特性,本文设计了一个改进的GAN网络框架,该网络结构包括一个变分自编码器模块、一个生成器模块和两个不同性质的鉴别器模块。具体方案是通过变分自编码器将输入人脸图像投影到隐层矢量,使用生成器模块重构与隐层分布相匹配的输入人脸原始像素,人脸条件参数和输入图像之间的关系通过变分自编码器的概率分布建立。
根据本文设计,利用单幅人脸图像生成全头部纹理的过程,需要参考对应的3维人脸模型来获取与输入人脸相关的形状、表情及纹理参数作为GAN网络的生成约束。
对于3维人脸模型,假设其拓扑结构相同,每个顶点排列所代表的语义属性也相同,如果将人脸模型各顶点的3维坐标转换为向量形式,则对于新的人脸形状,可以由一定数量的人脸形状的线性组合近似表示,线性组合的形式如图2所示,ζi为线性组合系数。
图2 子空间下人脸基向量的线性组合表示Fig.2 Linear combination representation of the face basis vectors in subspace
利用PCA方法对这些人脸模型进行压缩降维,找出人脸变化最明显的方向分量作为基向量。将人脸的形状变化限制在由基向量组成的子空间内。对人脸样本按照形状、纹理的分布排列为样本矩阵并去中心化,求解协方差矩阵后进行特征值分解,得到特征值与特征向量作为主成分保留,人脸形状模型和人脸纹理模型可以表示为
(1)
(2)
实际中,人脸图像通常带有一定的表情,而人脸PCA模型没有考虑人脸形状和表情特征的内在关联。为了将输入图像可能附带的表情信息加入到网络的约束性输入特征中,本文在PCA求解的基础上将人脸用身份特征、表情特征及纹理特征来进行表示,构成人脸的多线性模型(Jiang等,2018)。
根据人脸模型中不同的轴向特征排列面部样本,在第1维度即顶点轴向,将人脸样本按照坐标顶点进行排列;在第2维度即身份特征轴向,将人脸样本按照身份特征进行排列;在第3维度即表情特征轴向,将人脸样本按照表情特征进行排列,由此构成了人脸样本数据的3阶张量形式,如图3所示。人脸数据的张量形式反映了面部形状变化不同因素的内在联系,经多线性模型压缩处理,人脸形状由3阶张量的多线性组合表示为
S*=C×idωid×exωex
(3)
式中,C是对应样本数据的3阶张量核,×id和×ex分别表示身份和表情的模乘,ωid和ωex为人脸样本的身份特征向量和表情特征向量,S*表示任意的人脸形状。式(3)的数学意义是任意一个人脸形状S*可以由对应的张量核C和身份、表情的模乘与特征向量进行多线性表示。
图3 人脸多线性模型在3阶张量下的分布表示Fig.3 Distribution representation of multilinear face model under third order tensor
(4)
PCA模型获取的输入图像纹理参数,与多线性模型中的身份特征参数和表情特征参数将作为变分自编码器的输入特征向量,这些人脸特征向量被添加为变分自编码器的输入条件属性,用于重构隐层向量,约束GAN网络的生成过程。
网络模型由单幅人脸图像生成对应个体的人脸全景纹理图,网络框架基于GAN,如图4所示,包括一个变分自编码器模块,一个生成器模块和两个不同用途的鉴别器模块。其中,变分自编码器模块用于将输入的人脸图像映射到隐层矢量;生成器模块根据隐层矢量生成对应的人脸纹理图像;鉴别器模块包括全局鉴别器和人脸特征点分类器,其中全局鉴别器用于识别生成器模块所产生的纹理图的真实性,人脸特征点分类器用于检测生成纹理图与原始输入图像的局部人脸特征点是否保持一致。网络对选取的人脸图像进行预处理,将网络输入尺寸调整为256×256像素。
图4 人脸全景纹理图生成网络构架Fig.4 Framework of the face panoramic texture map generation network
变分自编码器的卷积层和池化层会对输入的人脸图像进行卷积和二次采样处理,将数据压缩成低维向量X,对第2节中的身份特征参数ωid、表情特征参数ωex和纹理参数β做归一化,令C=(ωid,ωex,β)作为变分自编码器的条件向量同步输入。数据采样后的低维向量与条件特征向量进行多元高斯分布处理,得到多元高斯分布向量的均值和标准差,通过重参数化(标准正态分布乘以标准差再加均值),借助一个符合标准正态分布的随机噪声eiN(0,1)来构造重构参数的正态分布。最后从重构参数的正态分布中采样并与条件参数进行拼接,得到隐向量Z,如图5所示。隐向量是一组符合标准正态分布的不限定数据,由输入数据和条件参数的联合高斯分布采样生成,满足P=(Z|C,X)N(μ(i),1)。实质上,变分自编码器通过一个可学习分布P=(Z|C,X),将数据集样本映射到一个具有特定表征的潜在向量,相当于求解输入与条件参数互相匹配的隐层数据的概率分布,概率函数Eμ,σ2可表示为
(5)
变分自编码器的末端级联两个全连接层,与生成器模块采用全卷积的级联形式建立阶跃连接。
图5 变分自编码器对输入图像与条件参数的处理过程Fig.5 Process of the input image and conditional parameters in variational auto-encoder
生成器将处理后的混合参数向量作为输入,生成全景纹理图。本次工作在生成器部分设置6个上采样的反卷积层和滤波器结构,其中卷积层包括256、128和64个通道数。生成器模块的优化过程是通过最小化生成纹理与隐层参数相对应的样本纹理之间的逐像素欧氏距离实现的,即通过逐像素二范数作为生成模块的损失函数,即
(6)
式中,I(x,y)为训练过程中的样本纹理图的像素,I*(x,y)为生成器生成纹理图的像素,fC是全局鉴别器网络的中间层特征,fD是人脸特征点分类器网络的中间层特征。
本文将鉴别器模块设计为全局鉴别器和人脸特征点分类器两部分,利用两个鉴别器不同的判别属性对输出纹理进行检测,其中全局鉴别器用于评价生成器模块生成的全景纹理图的真实性,人脸特征点分类器用于验证面部区域的人脸特征是否与输入图像保持一致。
对于全局鉴别器,本文基于已公开的AlexNet框架(Krizhevsky等,2017)进行优化,输入大小设置为256×256像素,并在卷积层之后执行批归一化操作。全局鉴别器的真实性评估标准是,根据输入条件参数所生成的人脸全景纹理图完整无缺,像素分布连续且真实有效。全局鉴别器的损失函数表示为
LD=-Ex~Pd(x),y~Pd(y)[logD(x,y)]-
Ec~P(c),y~Pd(y)[1-logD(G(c,y),y)]
(7)
式中,Pd(x)为输出纹理图的参数分布,Pd(y)为面部区域的UV纹理参数分布,P(c)是人脸纹理模型的参数分布。D(x,y)是像素值为真的概率值,G(c,y)是生成器生成的像素值为真的概率值。
对于人脸特征点分类器,本文基于已公开的人脸识别网络ArcFace(Deng等,2019)进行设计,该网络经预训练后可直接获取面部区域特征点,在角度空间最大化分类界线,用于检测生成纹理图的中心人脸区域是否与输入人脸保持一致。人脸特征损失函数表示为
(8)
式中,m为批处理大小,n为训练样本的数量,xi∈R512为输入图像的特征向量,yi∈R512为生成纹理图的特征向量。cyi是第yi类的特征中心,λ是中心损失的权重,本实验中设置为λ=0.1。
本文的全头部纹理生成网络的完整损失函数为上述式(6)—(8)所表示的各模块损失函数的总和,具体表示为
L=λGLG+λDLD+λidLid
(9)
式中,λG、λD、λid为平衡各模块对完整损失函数的权重,实验设置为λG=1,λD=5×10-2,λid=10-3,权重值可根据网络参数及最终生成结果进行调整,网络的训练过程即为最小化损失函数式(9)的优化求解过程,网络结构基于Tnesorflow框架实现。
实验从输入图像中获取人脸约束特征,作为变分自编码器的条件属性在对抗生成网络中进行生成与反馈训练。用于网络训练的人脸纹理样本一部分来源于WildUV数据集(Deng等,2018),此数据集包含近2 000幅具有不同身份个体的纹理图像和5 639个面部UV纹理图。同时,本文利用专业扫描设备获取了一定数量的面部纹理样本,包括200位测试人员的1 600幅不同表情的面部纹理图。此外,在已有样本中筛选出质量较高的面部纹理图进行数据增广,最终获得的有效数据共计10 143个面部纹理图像样本,整体数据量充足。
实验在符合硬件测试环境的设备上(内存64 GB,CPU4.0 Hz,GPU NVIDIA 2080TI)进行网络模型的训练和测试,批处理数为16,学习率设置为0.001,对网络训练了200个epochs。从CelebA-HQ(Karras等,2018)和LFW(labled faces in the wild)(Huang 等,2008)数据集中随机选取正面人脸图像进行测试,生成结果在图6中显示。本文方法可以生成与输入人脸保持一致的全景纹理图,保留了人脸原有细节,在原图中不可见区域(如侧脸、耳朵及头发处)纹理重建效果真实自然。将测试图像分别扩展到MVF-Net(multi-view 3D face network)(Wu等,2019)、OSTeC(Gecer等,2021)和UVGAN(Deng等,2018)方法中,在相同输入条件下得到的结果如图6所示。可以发现,MVF-Net方法生成了面部纹理,但无法推广到全头部区域。此外,由于输入图像中的阴影和自遮挡,生成结果中会出现一些缺失点和纹理变形。OSTeC方法在面部纹理像素上恢复良好,但在侧面和周围区域严重失真。UVGAN方法恢复出侧脸及耳颈处纹理信息,生成了与本文结果相似的全景纹理图,但丢失了头顶及头发区域的像素内容。同时,UVGAN方法在预测过程中缺少面部纹理参数,皮肤表面反照率不准确,生成纹理图的皮肤颜色与原始输入不一致。
图6 人脸纹理图生成结果可视化对比Fig.6 Visual comparison of the generated face texture map results ((a)input images; (b)MVF-Net; (c)OSTeC; (d)UVGAN; (e)ours)
为了更直观地比较生成纹理图的显示效果,本文将各类方法的结果在3维模型上进行纹理的投影展示,进行实际应用层面的对比。本实验中使用的头面部3维网格模型由3DMM方法进行生成,将生成的纹理图逐像素映射到统一标准的3维模型上,在渲染条件一致的情况下进行立体展示,结果如图7所示。从模型显示的完整性及像素真实性上进行比较,其中PRNet(Feng等,2018)与Facegen(https://facegen.com)的纹理结果仅在正面区域有效(MVF-Net与OSTeC的结果无法应用于本测试模型),UVGAN的结果缺失了头顶及颅后区域,且纹理显示效果与原图差别较大。本文生成的纹理图可以完整地覆盖整个头面部,像素实际显示效果更好。
图7 生成纹理图3维映射显示效果对比Fig.7 Comparison of generated texture map 3D mapping effect ((a)original images; (b)PRNet; (c)UVGAN; (d)Facegen; (e)ours)
为了量化评估上述方法的性能,本文使用峰值信噪比(peak signal to noise ratio,PSNR)和结构相似性指数(structural similarity index,SSIM)两个指标对生成结果进行比较,如表1所示。其中,PSNR(UV)和SSIM(UV)是对生成的全景纹理图进行度量,表示对原始图像中不可见区域恢复的可靠性(MVF-Net生成的纹理图仅有面部区域,对全景纹理的度量结果为空);PSNR(面部)和SSIM(面部)表示输出纹理图对面部区域的保持效果。由表1的量化结果可见,本文方法要优于MVF-Net、OSTeC和UVGAN方法。
表1 各方法平均PSNR和SSIM值比较Table 1 Comparison of the average PSNR and SSIM values from different methods
综上所述,本文生成的全头部纹理图很好地保持了身份和表情的准确性,并恢复出原始图像中不可见区域的纹理信息。与已有方法相比,本文生成的全景纹理图更完整,尤其是在原图不可见区域,像素信息恢复自然连贯,人脸纹理细节更加真实。
针对从单幅人脸图像中恢复人脸纹理图不完整和像素准确度不高的问题,本文提出一种从单幅人脸图像中生成全景纹理图的方法,此方法结合变分自编码器和生成对抗网络的特性,将2维图像中的人脸特征转换为纹理生成模型,根据人脸参数的随机噪声分布来生成全景纹理图,并利用不同特性的鉴别器来提升纹理的真实性与有效性。通过对结果的可视化对比、映射应用对比和量化指标的评估,本文方法很好地保持了生成纹理中人物的身份和表情的准确性,对原图不可见区域,恢复出细粒度的纹理特征,头面部纹理信息更加完整。
本文方法也存在一定的不足,需要在后续的研究中继续改进,主要包括:
1)对于输入人脸图像中的头发和脖颈区域,网络生成模型对原图中不可见区域的像素变化敏感(例如原图中存在的光照变化和头发颜色变化),很容易导致此区域的预测纹理与原始图像产生较大差异,例如图6中第6行的本文结果中,对应女性角色头发颜色的变化,第5行、第10行的本文结果中,对应男性角色衣领处的像素改变,在后续的工作中,可以尝试在训练过程中增加一些特定的噪声输入,减弱模型对预测区域的像素敏感度。
2)主要对单幅的人脸正面视图进行纹理重构,对于一些小的面部角度改变也可以恢复出较好的效果,例如图6中第8行、第10行的本文结果。但对于一些大偏角甚至是侧脸角度的图像,由于在人脸参数拟合过程中能够获取的参数信息较少,此方法对此类图像无法进行很好地处理,可以尝试加入人脸姿态估计和人脸对齐的方法进行改进。