来自Github上的作者shaoanlu http://www.Sina.com/https://github.com/shaoanlu/face swap-gan
我最近在研究Faceswap。 随之而来的是,我们一定要了解GAN网络在工程中的使用方式。 谷歌也没有太多资料。 在Github上搜索优秀作者“shaoanlu”的工程,需要自己学习,很容易就了解了工程自述. MD。
faceswap-GAN
deepfake的auto编码体系结构中添加了Adversarial loss和Perceptual loss。 (第五章简要介绍网络是如何工作的。 关于变脸的解码-编码原理请看这里。 https://www.jiqi zhixin.com/articles/2018-05-04-2。 这篇博文介绍了学习人脸共性和个性特征的过程,其中运用了编码和解码器。
(“align”理解为校准。 可能是错的。 欢迎您的指正。 谢谢你)
链接:2018.6.6模型框架:已将SAGAN模型的自保护机制添加到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准备数据模块更新:添加了人脸视频预处理方法,即基于MTCNN的人脸检测和人脸定位。
2018.8.27提供了基于GAN v2.2的Demo
在33558www.Sina.com/Google浏览器中发表了可以训练模型的demo。 用户可以在浏览器中培训自己的faceswap-GAN v2.2。 (具体链接请用原文查看。 总之我的VPN没有打开。 ) )
http://www.Sina.com/http://www.Sina.com /
face swap _ gan _ v 2.2 _ train _ test.ipynb :
faceswap-GAN V2.2模型培训说明;
此文件还提供静止图像转换的代码;
如果需要额外生成训练图像,只需单击他提供的链接查看代码。
face swap _ gan _ v 2.2 _ video _ conversion.ipynb :
faceswap-GAN V2.2机型视频转换步骤说明;
其中介绍了“面联盟”(face alignment )使用的5点语言方法。
prep_binary_masks.ipynb :
faceswap-GAN V2.2机型培训数据预处理步骤说明;
的两个路径,由存在二进制掩码指示:/binary_masks/faceA_eyes和./binary_masks/faceB_eyes;
包含face_alignment模块。 另一种获得可选二进制掩码的方法位于名为MTCNN_video .的模块(链接)中。
mt CNN _ video _ face _ detection _ alignment.ipynb :
该模块展示了对输入视频的人脸检测和校准过程。
检测到的面部根据是否进行校准,分别存在于./faces/raw_facesa和./faces/aligned_faces两个文件中。
粗糙的二进制掩码也被生成并存在于./faces/binary_masks_eyes .中。 在上述模块之一的prep_binary_mask .ipynb中,使用这些粗糙的二进制掩码是最好的选择。
一、GAN v2.2 的更新过程的介绍:
1 .运行mt CNN _ video _ face _ detection _ alignment.ipynb从视频中分离(Extract )脸部。 手动将校准的面部移动/重命名为两个文件:/faceA/和./faceB/folders。
运行prep_binary_masks.ipynb为训练数据生成二进制掩码; 可以跳过这一步。
)1)将u
se_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)应用于Faceswap1.架构:
今天只是翻译一下,具体的原理还没看,不过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.这个网络是怎么工作的?
下面的插图显示了一个非常高级和抽象(但不是完全相同)的去噪自动编码器算法流程图。跟着的链接展示了这个算法的目标函数。
(来源: shaoanlu/faceswap-GAN)
图片中展示了文章开头提到的Adversarial loss 和 Perceptual loss,上方的MAE loss指的是GAN网络的Generator部分的auto-Encoding(自编码)网络的loss,loss越低说明自编码网络的Encoder训练的越好(一般情况下)。
2. 预览看起来是不错的,不知道转换为输出视频,效果会怎样?
当使用人脸校准方法对输入图像进行预处理后,模型效果还是不错的。
六、环境需求 keras 2.1.5Tensorflow 1.6.0Python 3.6.4OpenCVkeras-vggfacemoviepyprefetch_generator (required for v2.2 model)face-alignment (required as preprocessing for v2.2 model)