换脸方法之FaceShifter

2019年,国外论坛的,大表姐珍妮佛劳伦丝和史蒂夫布什密通过Deepfake技术的实时换脸视频。

链接:https://www.youtube.com/watch?v=iHv6Q9ychnA

论文:FaceShifter: Towards High Fidelity And Occlusion Aware Face Swapping

github:https://github.com/taotaonice/FaceShifter

论文提出了一个基于2阶段的GAN方式的换脸方法FaceShifter。整体网络结构包含,AEI-Net ,HEAR-Net两个网络。FaceShifter通过获取输入的2个图片中,第一张图片的ID特征,第二张图片的属性特征,来通过GAN生成最终的合成图片。合成的图片具有第一个图片的ID特征,第二个图片的属性特征,从而实现了换脸,并且取得了目前state-of-the-art的效果。

换脸的相关方法:

  1. 基于3d的方法,3D-Based Approaches

包括,3DMMFace2Face

     2. 基于GAN的方法,GAN-Based Approaches

包括,CageNetSwiftNetDeepFakesRSGANFSNetIPGANFSGAN

FaceShifter结构:

Adaptive Embedding Integration Network (AEINet)

网络输入图片为256*256,训练数据从CelebA-HQFFHQVGGFace3个数据集中获取得到。

AAD部分,加权attention方式融合了ID特征和Attributes特征。多个AAD+Relu+Conv堆叠,形成了AAD ResBlk模块。多个AAD ResBlk的组合,形成了最终的AEINet

AEINet包括3个部分,

  1. 身份ID编码模块,Identity Encoder

该模块是一个已经训练好的人脸识别模块,即Archface模块。在整个网络中,该模块只进行前向传递,不进行loss回传训练。

     2. 属性ATTRIBUTES编码模块,Multi-level Attributes Encoder,属性包括姿势,表情,光照,背景等(pose, expression, lighting and background)。

该模块的网络结构是一个U-Net形状的结构。有助于编码不同层的属性特征。

其中,n=8,一共编码了8个分支的特征。

该阶段的训练,不需要任何属性的标签进行监督训练,整个过程完全是无监督的方式进行训练学习。

那么问题来了,没有属性标签进行约束,那么这个模块是怎么按照作者设计的意愿,去学习人脸的属性特征呢?

这个问题讲到这里就回答,其实不合适,但是还是得提前剧透。

整个网络的训练过程是随机的输入2组图片进行,而这2组图片是从数据集中随机取到的。可能是同样的人,也可能不是。而采样中,作者控制了同样的人的概率是80%。不同人的概率只有20%。如果是网络的输入是2个同样的人,那么网络的输出肯定也还是同样的人。而ID编码网络部分是提前训练好的,不参与训练。也就是说ID编码模块肯定是学习的人脸的ID特征。假设人脸特征=ID特征+attributes特征,要保证最终合成的图片还是那个原来的人,那么attributes编码模块就只能学习属性特征。就是通过这样的方式,来实现无监督的让attributes编码网络自动学习属性特征。所以也需要80%这样相对大的概率,来保证该模块的收敛。这也就是本方法的一个亮点。试想,如果整个训练全部都是不同的人的组合,那肯定是学习不出这个网络模块的。这个可以自己训练的时候调节这个比例尝试。

     3. 融合IDATTRIBUTES,并且生成人脸的模块,也就是GAN的生成器部分,Adaptive Attentional Denormalization (AAD) Generator

AAD部分的输入包括2个部分,分别是ID部分和Attributes部分。

Attributes部分的输入为2个属性输出的加权,

ID部分的输入也是2ID输出的加权,

AAD部分进行了基于attention方式的IDAttributes的加权融合。

首先AAD模块对前一层的输入进行conv降维+sigmoid归一化操作,得到1个0-1的特征图,然后使用该特征图进行ID和Attributes的融合。

AEINetloss包括4部分,分别为

GAN的判别器的loss Ladv,也就是AAD生成的图片,判别器判断是真实图片还是造的图片的loss

ID模块的lossLid,也就是cos loss,将AAD生成的图片输入ID模块,得到输出特征,然后和之前的输入Xsource的输出特征计算cos距离,保证2个特征相似。

属性模块的lossLatt,也就是L2范数,将AAD生成的图片输入Attributes模块,得到输出的特征图,计算其和原始输入XtargetL2距离。

识别的lossLrec,该loss只有在输入的2张图片Xsource==Xtarget的时候,才会有loss,也就是AAD的输出和输入XtargetL2 loss。其余时刻,该loss0

最终AEINet模块的lossLAEI-NET

Heuristic Error Acknowledging Refinement Network(HEAR-Net)

HEAR-Net也是一个U-Net类型的网络结构。U-Net的取特征的分支n=5。

前面的AEINet生成的换脸图片虽然可以处理背景,光照,姿势,表情等问题。但是却处理不了遮挡问题。为此,论文引入了HEAR-Net。

同时,作者发现一个现象,当AEI-Net的连个输入图片都相同的时候,得到的生成图片也会吧遮挡部分给去掉。

we observe that if we feed the same image as both the source and target images into a well trained AEI-Net, these occlusions would also disappear in the reconstructed image.

为了恢复遮挡部分,可以使用原始的输入XtargetAEI-Net的生成图片作差,得到遮挡部分的特征图Yt

然后使用AEI-Net的输出Y^st和遮挡部分的特征Yt经过HEAR-Net生成最终的换脸图片Yst。

HEAR-Net的loss,包含3部分,

(1)ID部分的loss,同样还是cos loss

(2)第一个stage AEI-Net和第二个stage HEAR-Net的生成换脸照片的连续性保证的loss。

(3)只有输入的2个图片相同的时候Xsource==Xtarget,才会有的重建loss,保证重建的图片和输入的图片一样。

最终,HEAR-Net的loss为,

详细网络结构:

实验结果:

DeepFake vs FaceShifter

DeepFake

FaceShifter

模型结构

Encoder+Decoder生成模型

GAN,设计了属性提取器和身份提取器提取特征,设计了嵌入器去组合特征。

属性保持

较好

较好

图片质量

一般

较好

可拓展性

改进思路:

(1)判别器部分,增加随机归一化SN操作,参考,GitHub - godisboy/SN-GAN: pyTorch implementation of Spectral Normalization for Generative Adversarial Networks

(2)对人脸识别模块arcface的输出Yst进行人脸区域的mask操作,然后再与输入Xs进行相似度计算,参考,GitHub - zllrunning/face-parsing.PyTorch: Using modified BiSeNet for face parsing in PyTorch

总结:

  1. FaceShifter 可以对任意2个没有见过的人脸进行换脸。而DeepFakes只能对训练中已经“见过”的人脸进行合成,不具备外插能力。这也成了限制DeepFakes算法商用的重要原因。
  2. FaceShifter对保身份和保属性的能力不错,生成图片质量也还可以。
  3. FaceShifter设计了一些针对有遮挡、大角度的脸的处理方法,所以有不错的处理遮挡、大角度等极端情况的目标人脸的能力。

  • 11
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值