图二. DeepFaceDrawing 实现的人脸拼接结果 下面让我们来具体看看这种高度逼真的人脸生成究竟是怎样做到的。 在已有的研究中,往往将输入的草图作为条件生成网络的硬约束,生成效果受草图质量影响较大。也有将草图投影到 3D 空间然后用 3D 模型作条件生成人脸图形的方法,但这种全局参数模型不够灵活,无法容纳丰富的图像细节,难以支持局部编辑。受作者之前 SDM-NET [4]工作启发,并且通过验证发现,全局 - 局部结构的网络对于细节的合成非常有效。因此,这篇论文也采取了对人脸进行分块,然后在特征空间隐式建模的思路。 在这篇论文中,作者一方面将人脸关键区域(双眼、鼻、嘴和其他区域)作为面元,学习其特征嵌入,将输入草图的对应部分送到由数据库样本中面元的特征向量构成的流形空间进行校准。另一方面,参考 pix2pixHD [5]的网络模型设计,使用 conditional GAN 来学习从编码的面元特征到真实图像的映射生成结果。该方法核心亮点之一,便是以多通道特征图作为中间结果来改善信息流。从本质上看,这是将输入草图作为软约束来替代传统方法中的硬约束,因此能够用粗糙甚至不完整的草图来生成高质量的完整人脸图像。 DeepFaceDrawing 模型什么样 正所谓大道至简,本论文效果好,框架其实也不复杂。如图三所示,DeepFaceDrawing 系统由三个模块组成:内容嵌入模块(Component Embedding)、特征映射模块(Feature Mapping)、图像合成模块(Image Synthesis),在下文它们分别被简称为 CE、FM、IS 模块。
图三:DeepFaceDrawing 网络构架。 CE 模块采用自编码器结构,将人脸草稿分为五部分(左眼、右眼、鼻、嘴、其他部位)作为五个特征描述符,投影到局部线性的流形空间。每个部位的流形空间由数据库中大量样本编码的特征向量构成。输入的手绘草图样本特征向量则作为点样本投影到这个空间中寻找近邻,通过线性组合重构成来进行优化草图输入,如图四所示。
图四:流形空间中的投影示意图 FM 和 IS 模块一起构成另一个用于条件图像生成的深度学习子网络,并将组件特征向量映射到现实图像。FM 模块与 CE 模块的解码部分类似,然而所不同的是,FM 模块将特征向量映射到 32 通道的特征映射空间并非 1 通道的草图。由于草图只有一个通道,因此通过草图到图像的网络很难解决重叠区域相邻组件的不兼容性问题。FM 模块中的映射方法改进了信息流,从而提供了更大的灵活性来融合单个人脸部位,以获得更高质量的合成结果。 搭建好整体的框架之后,要想训练出好的生成结果自然需要大量的人脸与草图图片对。为了实现用稀疏线条便能抽象表示人脸,该论文基于 CelebAMask-HQ[6]人脸图像数据库,筛选无遮挡的面部图像后,利用 Photoshop 加草图简化的方法提取草图,构建了一个新的含有 17K 对人脸图像和相应草图的数据集。 数据集构建完毕之后,则开始对网络进行训练。在这里,训练分为两个阶段,如图三所示,阶段一先训练内容嵌入模块,将编码的草图重建后的 MSE loss 做为损失函数训练。阶段二则是固定好内容嵌入模块参数后,再以端到端方式对特征映射模块和图像合成模块网络进行训练。 用户怎么画 为了更方便用户轻松画好,DeepFaceDrawing 提供了数据驱动下预测的草图供用户参考。每次用户画下一笔后,系统就会根据更新的草图匹配出最接近 “真实人脸” 的草图作为背景阴影,供用户参考。 同时为了方便用户调整细节,DeepFaceDrawing 也提供了对细节的调整,如下图五所示,包括针对脸部五部分的五个参数(eyeL、eyeR、Nose、Mouth、Others)的控制滑条。每个滑条的值代表着原始草图特征和系统优化特征的混合权重,滑条值越高代表混合特征越接近原始草图特征。