论文阅读《Fine-Grained Face Swapping via Regional GAN Inversion》

【换脸】通过局部 GAN 逆向实现精细级换脸(CVPR2023)

论文地址
在这里插入图片描述

摘要这一段写作很值得借鉴。

先总述贡献:提出一个新颖的高保真换脸范式(paradigm)能可信地(faithfully)保留所需的(desired)微小(subtle)几何和纹理细节。
这个范式是什么?E4S。来源:从细粒度人脸编辑的角度重新思考换脸,editting for swapping。根据这个范式,提出基于人脸组件(facial components)的形状和纹理显示解耦的换脸框架。
E4S有什么用?1)既能全局换脸,也能局部换脸;能由用户控制交换部分的数量。2)更进一步,E4S天生(inherently)具有通过(by means of)人脸掩码处理面部遮挡的能力。
怎么做到的?(方法创新)(At the core of our system lies)新颖的区域GAN逆向方法(RGI),能实现:1)形状和纹理的显示解耦;2)在StyleGAN的latent space进行换脸。
具体来说:1)设计了一个多尺度的掩码引导的编码器,能将人脸组件的纹理映射为区域style codes;2)设计了一个掩码引导的注入模块,利用style codes操纵特征图。基于这些,换脸能简化为(reformulated as a simplified problem of)风格和掩码的交换。
最后,大量实验结果证明本文的方法在保持纹理和形状属性上优于现有方法。

由大到小阐述
思维创新-方法创新
点很明确:形状和纹理。配图也很能表现效果。

一、研究背景

A. 问题及动机

大的挑战(现有研究方法的问题):

  1. 换脸最首要的挑战是保持原始人脸的身份。
    (1)大多数现存的方法依赖一个预训练的2D人脸识别模型或3DMM来提取全局的身份相关特征,将其注入人脸生成步骤中。但这些人脸模型主要是为识别(classification)、而非为生成(generation)设计,这就导致一些能提供有用信息的、重要的、与人脸身份相关的视觉细节无法被捕获。【好独到的见解!】
    (2)且从单张图像构建的3D人脸模型往往无法准确恢复人脸形状,导致生成结果既像原始人脸又像目标人脸。比如肤色,现有的方法往往保留了目标人脸的肤色、或生成了介于原始和目标人脸之间的肤色,但肤色是表征原始人脸身份的一个重要的方面,有必要在换脸时被保留。
  2. 另一个挑战是处理面部遮挡。
    (1)FSGAN设计了inpainting子网络来估计原始人脸中的缺失像素(被遮挡部分),但是inpainted结果模糊。
    (2)FaceShifer精心设计了一个改良网络来保持目标人脸中的遮挡区域,但会导致生成结果保留部分目标人脸的身份信息。

解决方法:

本文从细粒度人脸编辑的新角度重新思考换脸:editting for swapping。

  1. 保持身份:
    (1)基于人脸各组成部分的形状和纹理都与身份相关,考虑显示解耦形状和纹理,以更好地保留身份信息;
    (2)受细粒度人脸编辑的启发,不使用人脸识别模型或3DMM来提取全局身份特征,而是利用component masks进行局部特征提取。
    -> 从而,将换脸转化为在两个给定人脸之间替换局部形状和纹理的问题。
    (3)再将局部重新组合的形状和纹理输入到一个mask-guided 生成器中,得到最终结果。
  2. 处理遮挡:
    Masks具有天然处理遮挡的作用:当前face parsing模型可以提供每个人脸区域的像素级标签。生成器可以根据这些标签自适应地用交换的纹理特征填补缺失的像素。与以前的方法FSGAN和FaceShifter相比,不需要额外设计网络。

实现上述解决方案的难点:
E4S的关键在于解耦人脸组成部分的形状和纹理。由于StyleGAN在生成高质量图像上有出色表现,作者想利用预训练StyleGAN进行解耦,但当前GAN反演方法仅关注StyleGAN全局style space中的全局属性编辑(年龄,性别,表情等),对于局部形状和纹理编辑没有任何机制。

解决方法:

提出了一种新颖的区域GAN反演(RGI)方法,它位于一个新的区域W+空间中,表示为Wr+。具体而言:

  1. 设计了一个mask-guided多尺度编码器,将输入人脸映射到StyleGAN的style space中。从而,每个人脸组成部分在StyleGAN生成器的不同层中都有一组style code。
  2. 设计了一个mask-guided注入模块,使用style code根据给定的mask来操纵生成器中的特征图。从而,每个人脸组成部分的形状和纹理能被完全解耦,其中纹理由style codes表示,而形状由mask表示。

由于Wr+支持对每个单独人脸组成部分进行形状和纹理的编辑,因此还能用来实现其他应用,如面部美化、发型转换和控制面部交换的范围。

B. 贡献

  1. 从细粒度人脸编辑的新角度来解决换脸问题:editting for swapping,并提出一个新颖的高保真换脸框架,能保持身份和处理遮挡。
  2. 提出了基于StyleGAN的区域GAN反演(RGI)方法(位于一个新颖的Wr+空间中),用于对形状和纹理进行显式解耦,从而将换脸简化为对应区域style codes和masks交换的问题
  3. 对换脸、人脸编辑和其他扩展应用的大量实验结果,证明了E4S框架和RGI方法的有效性。
PS:Introduction部分的写作逻辑也非常值得借鉴
  1. 先简明地指出换脸这个领域存在的两大挑战:保持身份和处理遮挡(当然实际上并不只有这些挑战,但这两个和本文的工作最相关)
  2. 然后分别针对这两个挑战,阐述现有研究方法如何解决以及存在的问题。
    (其中一些见解非常独到,比如通过注入人脸识别模型生成的身份特征实现的换脸,是为了人脸识别而设计而非为生成设计,这就导致视觉上一些特征处于原始和目标人脸中间,像第三个人。)
  3. 接着阐述本文如何更有效地解决这两大挑战:ideas
  4. 实现ideas的难点
  5. 如何解决这些难点
  6. 最后还扩展了本文方法的应用领域。

二、相关工作

A. GAN Inversion

GAN反演旨在:将图像映射到其相应的GAN latent code,以尽可能忠实地重建输入图像。通过这种方式,可以将反演后的latent code经过编辑、再发送给生成器,以完成预期的对图像的编辑。
目前已经有许多用于人脸操纵的StyleGAN反演方法,可以大致分为三类:
(1)基于学习:训练一个编码器,将图像映射到latent space;
(2)基于优化:直接优化latent code,以最小化与给定图像的重构误差;
基于优化的方法通常在反演性能方面表现更好,但基于学习的方法时间成本较低。
(3)混合方法:上述两者的权衡,使用反演的code作为起始点进行进一步的优化。

现有的GAN反演方法能实现特定的人脸编辑,但它们都以全局方式工作(如变老、姿势改变、男变女),不能对局部面部组件进行精确控制。本文的区域GAN反演通过基于预训练StyleGAN的新型Wr+潜在空间,填补了高保真的局部编辑的空白。

B. 换脸

现有换脸方法大致分为两类:
【原始人脸:提供身份;目标人脸:提供表情、姿态等】

  1. 以原始人脸为导向(source-oriented):从原始人脸开始,将目标人脸的属性转移至原始人脸上。最早:利用3D形状和相关的场景参数(我理解为渲染参数),使原始和目标的姿态和光照一致;后来:认为3D形状估计是不必要的,提出人脸分割网络来完成换脸;近期:FSGAN,两阶段pipline,reenactment和inpainting来分别解决姿态对齐和遮挡问题。(reenactment:人脸重演,将A的表情和姿态编辑得和B一致;inpaining:遮挡部位绘制人脸)
  2. 以目标人脸为导向(target-oriented):从目标人脸开始,将原始人脸的身份转移至目标人脸上。通常用一个预训练人脸识别模型或3DMM来保持原始人脸身份。但正因人脸识别模型是为了分类而训练,以及3DMM模型不够精确和鲁棒,在生成阶段,与身份有关的细节不能被完全捕获,会带来中间效应(既像又像)。

另外又特别提了基于StyleGAN的换脸:
MegaFS利用预训练的StyleGAN的先验知识,将人脸分辨率提升至1024。
StyleFusion在S空间将隐码融合,实现了对局部语义区域的可控生成。但每个面部区域的形状和纹理仍然在 S 空间中纠缠在一起。
除了全局潜在融合外,[40] 设计了一个区域感知的投影器,以自适应方式将原始人脸身份转移到目标人脸。HiRes 以多尺度方式采用了额外的编解码器,用于目标特征的聚合。然而,这两种方法都不支持细粒度和有选择性的换脸。

本文的E4S属于以原始人脸为导向。受mask-guided人脸编辑启发,作者从人脸编辑的角度重新思考换脸——对于所有人脸组件的形状和纹理进行编辑,也就是细粒度换脸。
和以往利用人脸识别模型或3DMM不同,本文基于提出的RGI方法,提出显示解耦人组件的形状和纹理,从而更好地保留原始人脸身份。

三、方法

A. E4S框架

在这里插入图片描述
包含两个阶段:

  1. Reenactment(人脸重演,即编辑人脸表情和姿态)
    (1)裁剪原始和目标人脸,得到Is和It,利用dlib裁剪人脸区域、检测关键点;
    (2)依照StyleGAN的方法对齐裁剪后的人脸,并将分辨率转换为1024x1024;
    (3)为了使Is具有和It相似的姿态和表情,作者利用一个预训练的人脸重演模型FaceVid2Vid,得到一个编辑姿态和表情后的人脸Id(如图,Id和It具有相同姿态和表情、和Is具有相同身份);
    (4)利用现成的人脸解析模型,得到It和Id的masks:Mt和Md。现有人脸解析模型划分了19个语义类别,基于换脸任务作者简化为12个:背景、眉毛、眼睛、鼻子、嘴巴、嘴唇、脸部皮肤、脖子、头发、耳朵、眼镜和耳环。

  2. Swapping & Generation
    (1)将(Id, Md)和(It, Mt)分别输入mask-guided多尺度编码器,以提取各人脸部位的style codes:St和Sd,来表征纹理:
    在这里插入图片描述
    (2)换纹理: 将St中几个人脸部位的style codes与 Sd 中对应的进行交换,得到重组的style codes: Sswap。进行交换的部位:眉毛、眼睛、鼻子、嘴巴、嘴唇、脸部皮肤、脖子和耳朵。【注意这里特意将脸部皮肤纳入考虑,因为其与身份相关,而大多数现有的换脸工作忽视了这一点】
    (3)换形状: 因为形状由人脸masks表征,我们从一个空的mask Mswap作为画布开始,然后按下列步骤完成mask的重组:a)保持目标mask Mt的脖子和背景布局,将它们的masks缝合在Mswap上;b)将Md的内脸区域缝合在Mswap上,包括脸部皮肤、眉毛、眼睛、鼻子、嘴唇和嘴巴;c)将Mt的头发、眼镜、耳朵和耳环的masks缝合在Mswap上。
    注意Md和Mt可能无法完美对齐,导致Mswap上有一些缺失的像素(通常是由遮挡导致的)。我们观察到这些缺失像素的区域通常在人脸皮肤和头发之间、或在人脸皮肤和脖子之间,所以我们用人脸皮肤来填充这些遮挡区域,这也是本文方法的一个独特的优点。与现有的FSGAN和FaceShiter相比,我们的方法不需要额外训练一个子网络和解决遮挡问题。

在获得了重组的Mswap和Sswap之后,我们将其送入StyleGAN生成器G中,配合一个mask-guided style注入模块,合成交换后的人脸。最后我们将交换后的人脸和目标人脸T进行融合(我理解为换背景)来生成最终的换脸结果。

B. 解耦形状和纹理

E4S框架的核心在于如何精确地编码每个人脸区域的纹理,将其从形状特征中解耦出来。先前的mask-guided人脸编辑方法利用masks作为生成器的输入,将纹理style注入其中来引导人脸生成,但它们在编辑过程中很难保持身份和面部细节。此外,它们生成的人脸分辨率有限,最高达到512,大部分都是256.

为了追求更好的形状和纹理解耦以及高分辨率和高保真度的生成,我们借助了强大的生成模型StyleGAN,它可以生成1024分辨率的图像。与从头开始训练StyleGAN不同,我们探索了开发GAN反演方法的可能性。具体而言,我们使用预训练的StyleGAN进行解耦,避免了大量的计算资源和训练不稳定性。
当前已经提出了许多在W或W+空间进行人脸编辑的GAN反演方法,但它们都聚焦于全局人脸属性的编辑,如人脸、姿态和表情,而无法用于局部编辑的形状和纹理解耦。
为解决这一不足,我们提出了一种新颖的区域GAN反演(RGI)方法用于解耦,它将人脸masks融入到style嵌入和生成过程中,从而填补了基于GAN反演的局部人脸编辑的空白。
RGI概述如图3所示。
在这里插入图片描述

Mask-Guided Style Extraction

在这里插入图片描述
j:不同的人脸区域有不同的语义分割类别,一共C个类别
要得到vij:第j个人脸区域的第i层特征
给定一张图像I和其相应的语义分割掩码M,

  1. I输入一个多尺度编码器,得到不同层次的特征图Fi;
  2. M下采样至与Fi相同的空间尺寸,计算==j:是否为第j个人脸区域,是则为1,不是则为0,然后与Fi矩阵相乘(Hardarma乘积);
  3. 执行平均池化操作,来聚合每个人脸区域的特征;
    在这里插入图片描述
  4. 将vij连接起来,输入一个多层感知器,来得到style codes,sj是第j个人脸区域的style codes;
  5. 将style codes和M输入StyleGAN的生成器得到交换的人脸,这里称s为Wr+空间。

Mask-Guided Style Injection

在这里插入图片描述
如图4(a):原始的StyleGAN生成器从一个空间尺寸为4x4的常数特征映射开始,由一系列的style blocks组成。每个style block包含一个调制(modulation)层、一个解调制(demodulation)层和一个3x3的卷积层。此外,引入了一个噪声层B以增加多样性。每个块中的可学习卷积核权重和偏差分别表示为W和b。在卷积层之前,W会基于其对应的style codes进行缩放。在每两个style blocks之间,还使用了一个2倍的上采样层,以增加特征图的分辨率。
原始StyleGAN中style codes控制全局的外观,而本文的style codes控制每个人脸区域的外观。因此本文将原始的style block扩展为mask-guided style block,如图4(b)。
在这里插入图片描述
对照这个公式就很好理解了,由于style codes从sj变成了sij,所以将style blocks分成了C个,每个style block和原始StyleGAN的style block执行相同的操作,得到的特征图再与M做矩阵乘积(同一类别为1不同为0),和公式(2)中一样,最后加起来,输入下一层。
注意,mask只注入前K层的StyleGAN中,也就是最后的(18-K)层不使用mask-guided style blocks,这是因为:
(1)我们进行了K值为11、13、15、18的实验,并经验性地发现,当K大于13时,重建的图像几乎没有视觉差异;
(2)训练负载会大幅降低,因为最后的(18-K)层分辨率很大(512~1024)。
所以本文在实验部分都默认K=13。

C. 训练目标

在训练过程中,我们只使用重建作为代理任务,无需像大多数现有的面部交换方法那样交换成对的面部,这使得我们的方法更加高效和容易训练。
一旦训练完成,纹理编码器F可以用于生成任意人脸每个人脸区域的纹理codes,这样就能很简单地实现Wr+空间的换脸(如Sec3.1,E4S框架,所述)。
我们采用了GAN反演文献中常用的损失函数,详细描述在我们的补充材料中。

四、实验

A. 实验设置

数据集。
CelebAMask-HQ,包含30K张高质量人脸图像,被分成28K和2K分别做训练和测试。此外还包含19个人脸语义分割类别。
FFHQ,包含70K高质量人脸图像,但没有给官方的人脸语义分割掩码。本文采用一个预训练的人脸解析网络 [49] 来提取人脸语义分割掩码。
[49] zllrunning. face-parsing.pytorch. https://github.com/zllrunning/face-parsing.PyTorch, 2019.

实现细节。
Pytorch。训练:8块NIVIDIA A100卡。训练中设置每块卡batch_size为2,起始学习率为10e-4,优化器:Adam(beta1=0.9,beta2=0.999).
对于CelebAMask-HQ和FFHQ数据集,分别训练200K和300K次迭代。起始学习率
分别在100K次和150K次迭代时按0.1的因子衰减。此外,我们以0.5的比例随机翻转图像。

B. 消融学习

在这里插入图片描述
在这里插入图片描述

  1. 验证E4S中reenactment步骤的必要性:
    如图5的第一列所示,在禁用重演时,交换的结果与目标面部不对齐(请参见圈出的红色区域),这表明姿态信息也嵌入在由风格代码表示的每个区域纹理中。

  2. SEAN与RGI的对比。
    我们的E4S框架是通用的。具体来说,那些包含提取每个区域style codes的编码器和控制每个区域style codes以及分割masks的生成器的方法,都可以适应我们的E4S框架。为了验证这一点,我们用SEAN [47] 替换了我们的RGI,扮演了图2中F和G的角色。从图5的第二列可以看到,SEAN可以生成整体视觉上愉悦的结果,而我们的结果保留了更多细节(眼睛和面部皮肤)。此外,SEAN只能生成256分辨率的人脸,而我们的能够生成1024分辨率的人脸。这也显示了我们提出的RGI的优越性。

  3. 有无id loss
    从表格1中的配置(A)可以看出,当我们不应用身份损失时,性能与基线相媲美。然而,没有身份损失会导致一些身份信息丢失,这在图5的第三列中得到了证实。

  4. 预训练的StyleGAN和微调StyleGAN对比
    尽管预训练的StyleGAN就可用于面部交换,但头发的纹理细节并不总是能够被很好地保留。为了在头发等外观上实现更稳健的性能,我们对StyleGAN的前K = 13层进行了微调。表格1中的配置(B)表示我们冻结了StyleGAN生成器的参数,只训练纹理编码器F以及我们RGI中的后续MLP层。尽管(B)可以获得更好的SSIM、PSNR和RMSE,但FID较差。图5的最后一列展示了一个示例。如图所示,微调可以提高头发质量,同时保持其他内脸部分的纹理。

C. 换脸结果

对比方法:
先前的换脸工作:FSGAN、SimSwap、FaceShifter、Hififace
其他基于StyleGAN的换脸方法:MegaFS、StyleFusion、HiRes
在FFHQ上进行训练,然后从CelebAMask-HQ上随机取500张原始-目标人脸对,得到换脸结果。

定性结果

在这里插入图片描述与之前的换脸工作对比:
与FSGAN相比:更清晰;
SimSwap和Hififace的换蓝结果有瑕疵和变形(第2行);
我们的E4S和FaceShifter能生成视觉上满意的结果,但我们的E4S在保留纹理细节上更胜一筹;
在遮挡存在的复杂案例上,我们的方法填补原始人脸缺失的皮肤,并且能保留目标人脸的眼镜(第3行);
尽管FSGAN精心设计了inpainting子网络,但inpainted结果很模糊;
FaceShifter提出一个微调网络来保留目标人脸的遮挡,但会在假脸上留下目标人脸的身份信息,导致换脸结果和目标人脸很相似;
我们是唯一能保留原始人脸皮肤颜色的换脸方法,而肤色是与身份息息相关的一个属性;
缺点:由于不同的光照条件导致原始人脸的肤色不能完全适应于目标人脸,可以事先为原始人脸添加一个光照转移步骤。我们将在将来的工作中考虑将光照与纹理进行解耦。

在这里插入图片描述与基于StyleGAN的方法对比:
MegaFS:是原始和目标人脸的混合,模糊而且缺少纹理;
StyleFusion:过于平滑;
HiRe:虽然能达到1024分辨率的,但换脸结果仍有瑕疵;
我们的方法能实现生成更真实、高质量的人脸。

定量结果

原始人脸身份保留:首先用CosFace提取所有原始人脸和换脸结果的身份特征。
对于每一个换脸结果,我们从原始人脸中搜索最相似的人脸,来计算身份召回率。相似度用cosine距离度量。
计算了Top-1和Top-5的身份召回率。

目标人脸属性保留:使用HopeNet和一个3D人脸重构模型来分别估算姿态和表情。
对于每个换脸结果,计算与目标人脸之间姿态和表情的l2距离。

在这里插入图片描述
身份召回率:E4S最佳,表明我们的换脸结果基本上保留了原始人脸的身份,图6的视觉效果也支持这一结果;
目标属性保留:E4S和SOTA方法相当。一般来说,以目标为导向的方法在保持姿势和表情方面表现更好,因为它们是从目标开始,而我们的以原始人脸为导向的方法需要从源头生成这些信息。然而,以目标为导向的方法的一个副作用是它们只会轻微地修改目标脸部的形状和纹理,不能完全保留身份(见图6中的FaceShifter和图7中的HiRes)。也就是说,在这些方法中,身份和属性保留之间存在权衡。需要注意的是,我们的E4S框架中面部重演方法的准确性是影响姿势和表情保留的关键因素。我们的E4S框架是通用的,性能可以通过使用更先进的重演模型来进一步提高。

D. 人脸编辑结果

除了实现换脸,我们的RGI方法也能用于细粒度人脸编辑。可以通过编辑特定区域的mask或者交换特定区域的style来得到想要的人脸编辑结果,使得我们的RGI可以支持各种各样的应用,如人脸美化、发型迁移、控制换脸的交换区域。详细结果在补充材料中。

在这一部分,我们与当前领先的细粒度人脸编辑工作进行对比:SPADE、SEAN、MaskGAN。为了公平对比,我们在CelebAMask-HQ的训练集上训练RGI网络,并在CelebAMask-HQ的测试集上验证。
我们用这些方法的官方预训练模型得到它们的推理结果。

定性结果

在原始人脸mask上做了一些修改,如头发、眉毛和下巴。
在这里插入图片描述可以观察到我们的结果更自然、高保真,其他的人脸区域的细节和总体的身份都保留得很好。

定量结果

度量人脸重建质量。指标:SSIM、PSNR、RMSE、FID。
我们还与SofGAN方法进行对比,这是一个StyleGAN类似的生成模型,重建过程依赖于style code的优化。为了公平对比,我们将优化阶段同样应用于RGI(RGI-Optim)。
在这里插入图片描述
可以看出我们的方法打败了所有的方法,表明了我们方法视觉效果的优越性。
我们发现SEAN方法有时会在头发区域产生瑕疵,而我们的RGI能生成更高保真的重建结果,更好地保留身份、纹理和光照。
此外,我们的RGI-Optim能更好地保留面部细节,如头发的卷度、胡须的厚度、酒窝和背景。更详细的比较参照补充材料。

五、结论

总结

本文提出了一个新颖的换脸框架E4S,通过显示解耦每个人脸部位的形状和纹理,以及将换脸重构为一个简单的交换纹理和形状的问题,来实现换脸。
为了达到这样的解耦,以及实现高分辨率和高保真的换脸结果,我们提出一个新颖的RGI方法。具体而言,一个多尺度mask-guided编码器将输入人脸映射为每区域的style codes。然后一个mask-guided注入模块利用style codes,在生成过程中根据给定的masks操纵特征图。
充足的换脸、人脸编辑、和其他拓展应用的实验结果,都证明了我们方法的优越性。

我学到了什么

写作,真的很值得借鉴。
不管是动机、方法还是实验都阐述得一清二楚,我什么时候能达到这种写作水平。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值