基于GAN的人脸图像三维重建
作者: 罗健 郝泳涛
摘要:人脸图像的三维重建是计算机视觉领域一个长期的难题。文章提出一种基于GAN 的人脸图像三维重建方法。在这种方法的总体思路中,生成器网络从一张给定的人脸图片中提取三维特征信息,并以此生成人脸的三维模型。判别器网络则负责将生成的 3D 模型重新投影到正确的像平面并叠加输入图像中的背景部分,得到一张图片并判别是否与输入图像相同。通过生成器和判别器交替训练,不断提升生成器生成3D人脸结构的效果。
关键词:人脸重建;生成对抗网络;GAN;三维重建
中图分类号:TP18 文献标识码:A
文章编号:1009-3044(2022)23-0071-03
1引言
人脸图像三维重建的意义主要可以从两个方面来考量:在实际应用方面,在许多与人们生活密切相关的领域中,人脸三维模型都有着极其广泛的应用和十分旺盛的需求。例如在游戏影音这样的传统娱乐领域,人们需要更逼真的三维模型来提升沉浸感以期获得良好的体验,在公共安全领域,高精度的人脸模型也能够帮助获得更详细的外貌信息从而在一定程度上减小人力物力的损耗。在这些情况下,人脸图像三维重建能够获得人脸三维模型的难度和成本,从而更加拓宽人脸三维重建技术的应用范围,并通过降低需要获取人脸模型行业成本的方式促进其发展。另一方面,从科学研究的角度来看,人脸图像三维重建不是一门孤立的技术,而是与图像处理、特征提取等多个研究领域都息息相关。对于人脸图像三维重建的研究能够对当下诸多的热门领域例,如人脸关键点检测、人脸识别、人脸编辑等方向的研究提供一些启发和经验,在一定程度上促进这些方向研究的发展,提升其应用能力,以便更好地造福人类的生活。
1.1 相关工作
基于图像人脸三维重建方法,总体上来说可以分为基于从运动恢复结构、基于明暗恢复形状、基于三维形变模型三种方法。
1) 基于从运动恢复结构的三维人脸重建方法
这种方法的主要原理是通过多幅图像中与运动视差信息中隐含着被测物体的三维结构信息,通过这些信息来进行三维人脸的构建。其中有两个具有代表性的方法。Sun等在文献[1]提出的算法是利用非线性最小方差模型和约束的独立成分分析(Constrained Independent Component Analysis,CICA)模型估计人的正脸和非正脸图像中一些重要特征点的深度值;Dai等在文献[2]提出一种基于块的SFM算法,首先利用稀疏的人脸特征点重建粗糙的三维人脸模型,接着采用核偏最小二乘算法,根据人脸轮廓优化弥补基于稀疏人脸特征点的SFM 算法的局限性,细化粗糙的三维人脸模型。
2) 基于从明暗恢复形状的三维人脸重建方法
这种方法源自由 Horn 等在文献[3]提出的仅需输入的单幅图像就可以获得人脸的三维信息算法。主要原理是通过坐标变换和敏感信息计算出人脸各个点位所对应的深度值,并以此为依据,构建人脸重建模型。Liao 等在文献[4]中将 SFS 算法与局部形变模型相结合,首先利用SFS算法快速获取人脸的三维轮廓线,接着通过局部形变模型恢复精确的三维数据,最后在得到的人脸三维轮廓线和精确三维数据上,不断迭代平滑从而获得高质量的三维人脸模型;Maurer 等在文献[5]中将SFS算法与双目视觉算法相结合,为能量函数添加保留细节的各向异性二阶平滑项,通过这种方式扩展结果模型,使其可以估计深度、反射率和照度,从而使该方法适用于反射率不均匀的物体以及光照条件未知的场景。基于从明暗恢复形状的三维人脸重建算法能够更好地对低纹理人脸图像进行三维重建,但这类方法在处理人脸五官时可能会存在变形问题。因此在效果上存在一定的不稳定性。
3) 基于三维形变模型的三维人脸重建方法
这种算法的核心在于三维形变模型(3DMM),它的本质是一个通用的三维人脸模型,用固定的点数来表示人脸。核心思想就是人脸可以在三维空间中进行一一匹配,并且可以由其他许多幅人脸正交基加权线性相加而来。Blanz等人1999年在文献[6]中提出了三维形变模型。规模面部模型(LSFM)—一种由 9663 个不同的面部身份自动构建的3D可变形模型(3DMM)是由Booth等人在文献[7]中提出的一个能够适应不同人种、肤色等情况的模型。除此之外,还有许多效果比较好的非线性3DMM模型陆续被提出,例如由Tran等人在文献[8]中提出的非线性3DMM模型,作者提出了一种新的框架,在不采集三维人脸扫描数据的情况下,从大量无约束的人脸图像中学习非线性3DMM模型,它比传统的线性模型具有更大的表示能力。本文的方法中就用到了3DMM 模型从单张图片获取粗糙的人脸模型。
但是对于人脸图像三维重建这一具体问题来说,需要考虑问题与宽泛概念下的三维重建有着很大的区别。首先,人脸一般都是对称结构,不需要考虑重建不对称的情况,如果使用和一般三维重建相同的方法,就意味着会增加一部分不必要的开销。其次,人脸有着明显的特征区域(如眼睛、嘴巴、鼻子等),如果在这些区域内的细节处理可以达到很好的效果,那么在方法中即使存在对其他区域的粗放处理,对于最终呈现效果的影响也可以被降到较低水平的。因此,将GAN与人脸图像三维重建的具体情景相结合,进行因地制宜的调整和优化,并吸纳其他人脸三维重建方法的优点和成果,将它们结合起来共同作用,来取得更好的生成效果,是笔者工作的重点。
2 网络模型
2.1 生成器
首先是用于从输入的图片中提取出三维结构形状和粗糙纹理的模块,这一部分采用了一个 CNN 网络,从输入图片中提取出表示光照和面部姿势的矢量,和3DMM模型中必要的参数向量,然后把这些向量作为输入,来获取人脸三维立体结构的形状和面部的粗糙纹理贴图。
其次是从文献[9]中提取出的网络结构 FaceNet。它的作用也是提取输入图片中的特征向量,其目的有两个,一是提供给下一部分的纹理细化网络作为输入,二是用来衡量身份距离,用来计算网络的身份距离损失函数。
最后是采用了图卷积网络(GCN)的技术,共使用Decoder、Refiner、Combiner三个图卷积网络的纹理优化模块,把接收第一部分中的结果作为输入,输出细化后的纹理结果。其中,Decoder部分接收并处理FaceNet的结果,Refiner接收3DMM的结果并细化模型数据中的顶点颜色,最后的Combiner负责综合其他两部分的输出,得到最终结果的模型中每个顶点的颜色,结合原来的顶点坐标、法线、面等信息,作为生成器最后的结果输出。
2.1 判别器
判别器工作的原理是将生成的人脸三维模型重新投影到输入图片的像平面上(姿势监督数据和光照信息数据都在第一个模块中获得)之后得到一张新的图片,进而通过判别这两张图片是重投影得到的,还是自然输入的原始图片,来和生成器网络进行对抗训练,提升人脸三维模型生成的效果。在重投影的策略上,笔者选择参照了文献[10]中的可微渲染层。在该文献中,Genova 等人提出了基于一种延迟着色模型的泛用性较强的可微光栅化器。这种光栅化器利用三角形的ID和像素的重心坐标来计算屏幕空间缓冲,模型网格结构中的颜色和发现都会在像素间进行插值。在训练中,顶点法线会使用邻近的三角形的法线的平均值替代。笔者应用这个文献中的可微渲染层来完成三维模型到输入图片像平面的重投影工作。然后将生成图片和输入图片一起送入判别器网络。网络一共包含6个核大小为3的卷积层,同时每个卷积层之后都有一个最大池化层。训练中笔者遵循带有梯度惩罚的 Wasserstein GANs中描述的流程进行处理和训练。
2 损失函数
2.1 逐像素的损失
考虑到在输入的图片中人脸部分可能被各种物品遮挡(如头发、眼镜、口罩等),而笔者的模型生成时却并不会生成这些结构,因此在计算像素损失时这些区域不能够被计算进去,只需要计算能够生成区域的损失,设这个区域为[Mface],包含面部、眼睛、嘴巴、鼻子、眉毛等部位,笔者使用了预训练的一个人脸识别网络来进行这些部位的分辨。Pixel wise loss定义如下, 其中[x]和[x']分别代表输入图片和重投影出的图片结果,[Mproj]表示面部三维模型可以被投影到的区域。
2.2 身份保留损失
在使用像素级别损失的情况下,一般的情景已经可以产生比较良好的结果了,但是这样产生的人脸模型可能还与输入的二维图片有明显差异,尤其是在一些极端的情况下。因此笔者在模型中应用了所谓的身份保留损失,这是一种面部特征级别的损失函数,它要求将输入图片和生成的图片使用FaceNet提取到的特征信息向量应该尽可能地接近。如公式(2),它的定义是输入图片和重投影图片通过FaceNet得到的特征信息之间的余弦距离,其中<>代表内积,F()代表FaceNet得到的输出。
2.3 逐顶点损失
在图卷积网络训练的早期过程中,图像中面部的遮挡物可能还会导致其无法正确地判断顶点的颜色数据的情况出现,造成模型的效果下降,因此在第一个三维形状和粗糙纹理提取模块提取出的粗糙纹理的基础上,在网络中使用了一个逐顶点的损失,并在训练过程中逐步降低这一损失的权重。除此之外还要考虑到,为了获取人脸的细节特征,还需要将面部顶点投影到2D图片上来取回顶点颜色,然后将其和3DMM模型的纹理颜色一起送入Refiner中。综合考虑下逐顶点损失的定义为式(3),其中N表示顶点个数,[xi]表示由三维形状和粗糙纹理提供模块提取出的粗糙问题反照率值T或者取回的顶点颜色[Tp],[x'i]则表示Refiner得到的颜色[']。
2.4 对抗损失
对于对抗学习中的对抗损失GAN loss来说,笔者采用了参考文献[11]中的改进的 Wasserstein GAN范式,将对抗损失定义如公式(3),其中[x]和[x']分别代表输入图片和重投影出的图片结果,[x]是沿输入图像分布[PI]和渲染图像分布[PR']采样的点之间的直线均匀采样的随机样本。
2.5 最终损失
综合上述四种需要计算的损失,网络整体上的损失函数可以定义如公式(5):
在训练过程中,控制身份保留损失与对抗学习损失的权重[α2],[α3]均为固定值,分别为[α2=0.2],[α3=0.002]。[α1]和[α4]的初始值设定分别为0和1,每经过一轮训练,就下调[α1]的值并上调[α4]的值,但始终保持[α1+α4=1],直至最后一轮[α1]和[α4]变为1和0。
2 实验结果与讨论
该数据集的原始图片是由文献[12]中的 CelebA 数据集中挑选而来的。并且通过文献[13]中的方法进行了分割,生成了不同部位的mask图片。通过这些 mask 图片可以很简单地挑选需要的部位进行实验。数据集中包含有:30000张分辨率为1024×1024的原始图片,每个原始图片的每个分割部位的mask图片,其分辨率为512×512,以黑白二值图的形式储存。除此之外还包含有:每个图片与CelebA数据集中图片的对应关系,每个图片的人脸包含的属性信息,每个人脸的姿势信息(以欧拉角形式存储)。
接下来,将本文的模型生成三维结构的效果与其他几个常见的人脸三维重建模型进行了对比,实验如图3所示。可以看出,本文的方法生成的三维模型的效果具有更贴近原图片的纹理信息和三维结构,具有更好的表现。
3 结束语
基于GAN的人脸图像三维重建算法在试验中取得了比较好的表现,但是仍然存在着一些问题,最明显的一个问题就是,尽管人脸部分的生成已经具有很高的质量,但是头发部位的生成却很难进行,一方面,头发部位不同于人脸这样的基本一致结构,因为发型等的不同,其立体结构很难找到共同点,无法使用类似于3DMM这样的思路来解决其生成问题;另一方面,头发的加入会导致集合上的遮挡关系快速复杂化,现有的思路下,在训练中处理这些遮挡关系可能需要花费十分高昂的代价,因此需要新的思路来解决这一问题。如果仅有人脸部模型而没有其他区域,那么这项技术的应用领域就会受到极大限制,获取其他部位模型的难度也会降低人脸图像三维重建技术在降低三维模型获取成本上的作用。