Faceswap开发(一) GAN网络的基本了解

       来自 Github上 作者 shaoanlu   链接: https://github.com/shaoanlu/faceswap-GAN

       最近在研究Faceswap,随之就一定要了解GAN网络在工程中的使用原理,就算是Google上资料也并不多,检索到Github上优秀作者"shaoanlu"的工程,自己学习的需要,简单理解了一下工程的 README.md。

       faceswap-GAN

       在deepfake的auto编码架构中,添加了 Adversarial loss 和 Perceptual loss(在第五章网络是怎么工作的会简单介绍)。关于变脸的解码-编码原理建议可以在这里看:https://www.jiqizhixin.com/articles/2018-05-04-2。这篇博文介绍了学习人脸共性和个性的特征的过程,其中运用了Encoder和Decoder。

       (“align”我都理解为校准,可能会不对,欢迎指正,谢谢)

一、GAN v2.2 的更新过程的介绍:

       2018.6.6 模型架构:将SAGAN模型中的self-attention机制添加到了GAN v2.2中。

       2018.6.25  新版本: faceswap-GAN v2.2 被发布,这个版本的主要贡献就是:它能够生成逼真且一致的眼球运动,而且人脸对齐(face alignment)的视频质量更高。

        2018.6.29  模型架构: faceswap-GAN v2.2 的输出会支持不同大小的分辨率,包括:64*64,128*128,256*256.在配置参数里修改对应位置即可。

       2018.7.25 准备数据模块的更新:增加了人脸video的预处理方法,即利用MTCNN进行人脸检测和人脸对齐。

       2018.8.27 提供了一个基于GAN v2.2的Demo

二、Google的支持:

发布了一个可以在Google浏览器上训练模型的demo,用户可以在浏览器上训练自己的 faceswap-GAN v2.2(具体链接请去原文看,反正我的VPN没打开....)

三、Description:

faceswap-GAN v2.2的介绍

FaceSwap_GAN_v2.2_train_test.ipynb :

       faceswap-GAN V2.2 模型训练的说明;

       这个文件也提供了静态图像转换的代码;

       如果你需要额外的生成训练图像,点击他给的链接进去看代码即可。

FaceSwap_GAN_v2.2_video_conversion.ipynb:

       faceswap-GAN V2.2 模型进行视频转换步骤的说明;

       脸部校准(face alignment)运用的5 point landmarks的方法,在其中有所介绍。

prep_binary_masks.ipynb:

       faceswap-GAN V2.2 模型进行训练数据预处理步骤的说明;

       输出的二进制掩膜被存在所示的两个路径下    ./binary_masks/faceA_eyes   和  ./binary_masks/faceB_eyes;

       包含face_alignment模块。还有一个可选的另一种获得二进制掩膜的方法,存在  MTCNN_video...这个模块(链接)中。

MTCNN_video_face_detection_alignment.ipynb:

       这个模块展示了 对于输入视频的人脸检测和校准过程。

       被检测的人脸根据是否进行校准,分别存在了./faces/raw_faces a和 ./faces/aligned_faces 这两个文件中。

       粗糙的眼睛二进制掩膜也被生成了,被存在 ./faces/binary_masks_eyes.  之中。在prep_binary_mask .ipynb(上面介绍的模块之一)中,使用这些粗糙的眼睛二进制掩膜可以作为一个次优选择。

Usage(使用方法):

       1. 运行 MTCNN_video_face_detection_alignment.ipynb从视频中分离(Extract)人脸。手动的将已经校准的脸,移动/重命名进 ./faceA/ 和 ./faceB/ folders两个文件中。

       2. 运行 prep_binary_masks.ipynb 为训练数据生成二进制掩膜;这一步骤是可以被跳过的:

              (1)把use_bm_eyes参数设置为False

              (2)使用步骤1中生成的低质量二进制掩码

       3. 运行 FaceSwap_GAN_v2.2_train_test.ipynb  来训练模型。

       4.运行  FaceSwap_GAN_v2.2_video_conversion.ipynb,运用训练出来的模型进行转换。

Demo应用:

       faceswap-GAN_colab_demo.ipynb 它说是一个demo,实际上和上面介绍Google所支持的那个demo是一个东西。

训练数据的格式:

       Face的图像都应存在 ./faceA/ 和 ./faceB/中。

       训练的话,图像大小resize为256x256。

四、将生成的对抗性网络(GAN)应用于Faceswap

1.架构:

       今天只是翻译一下,具体的原理还没看,不过Generator的部分(Encoder+Decoder),如果看了最上面我推荐的博客,应该算有初步了解,至于下面的Discriminator,就涉及到了GAN的"对抗“”原理。(起到了一个监督Generator的作用)

2.Result:

(1)Adversarial loss提高了生成的图片的重建质量,也就是提高了输出质量。如下图:

(2)额外的Result:

        文章中 This image 这个链接点进去是这个工程生成的160个生成结果(利用GAN v2.2 结合self-attention机制)。

(3)一致的眼球运动:

        上文介绍GAN的更新过程时提到过,把眼球检测加了进来。这就是说GAN v2.2在较短时间内生成了更为真实的眼睛(输入的gif是根据DeepWap这个工程生成的)

       第一行是v2版本的GAN的效果,第二行是v2.2.版本的效果(其中第1.3.5列为输入的gif,2.4.6为效果)

(4)评估:

       这里给了一个传送门,点 here 里面有他们关于 Trump/Cage 这个训练集的输出质量的评估结果。

3.Features:

(1)VGGface 的 perceptual loss: 
       perceptual loss 改善了眼球的方向,使其更加真实,与输入的人脸更加一致。它还平滑了分割掩模中的工件,从而提高了输出质量。(还不太明白)

(2)Attention mask: 

       模型预测了一种Attention mask,可以帮助处理遮挡,消除人为干扰,并产生看起来自然的肤色。下图是Hinako佐(佐野ひなこ)对Emi武井(武井咲)的转换的结果。

       下图:从左到右:  原始图、转换后的图(没有Attention mask),转换后的图(有Am)

               

       下图:从左到右:  原始图、转换后的图(有Am),转换后的掩膜热图

       

(3)输入输出分辨率是可以配置的:

       支持64*64,128*128,256*256分辨率的输出

(4)在视频转换过程中使用MTCNN和卡尔曼滤波器进行人脸跟踪/校准:

       引入MTCNN进行更稳定的检测和可靠的人脸校准。

       利用卡尔曼滤波器取平滑每一帧上的边界框位置,消除脸部的抖动。(Kalman Filter是进行运动模型检测研究的经典方法)

       

       

(5)训练的时间建议:

       给的demo提供了一个预定义的训练时间表。以上展示的Trump/Cage换脸的模型是经过设置迭代次数为30000的同时实际迭代21000次之后的结果。

       (训练技巧:在训练后期交换解码器,减少极端面部表情造成的伪影。例如,使用这个技巧可以更好地转换(上面结果的)一些失败案例)(在尝试)

(6)Eye-aware的训练:

       在眼周区域引入reconstruction loss 和 edge los,引导模型生成逼真的眼睛。

五、常见问题和故障排除

1.这个网络是怎么工作的?

       下面的插图显示了一个非常高级和抽象(但不是完全相同)的去噪自动编码器算法流程图。跟着的链接展示了这个算法的目标函数。

 

Faceswap开发(一) GAN网络的基本了解_第1张图片

        (来源: shaoanlu/faceswap-GAN) 

       图片中展示了文章开头提到的Adversarial loss 和 Perceptual loss,上方的MAE loss指的是GAN网络的Generator部分的auto-Encoding(自编码)网络的loss,loss越低说明自编码网络的Encoder训练的越好(一般情况下)。

2. 预览看起来是不错的,不知道转换为输出视频,效果会怎样?

      当使用人脸校准方法对输入图像进行预处理后,模型效果还是不错的。

      

六、环境需求

  • keras 2.1.5
  • Tensorflow 1.6.0
  • Python 3.6.4
  • OpenCV
  • keras-vggface
  • moviepy
  • prefetch_generator (required for v2.2 model)
  • face-alignment (required as preprocessing for v2.2 model)

你可能感兴趣的:(Deepfakes)