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

article/2025/10/7 4:48:33

       来自 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.架构:

enc_arch3d

dec_arch3d

dis_arch3d

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

2.Result:

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

trump_cage

(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为效果)

  • v2_eb
  • v2.2_eb

(4)评估:

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

3.Features:

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

(2)Attention mask: 

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

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

       mask2        mask2

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

       mask_vis

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

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

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

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

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

       dlib_vs_MTCNN

       comp_FA

(5)训练的时间建议:

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

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

(6)Eye-aware的训练:

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

五、常见问题和故障排除

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

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

flow_chart

 

        (来源: shaoanlu/faceswap-GAN) 

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

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

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

      readme_note001

六、环境需求

  • 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)

http://chatgpt.dhexx.cn/article/sr3ur1eB.shtml

相关文章

faceswap 安装使用详情

最近对AI换脸比较感兴趣,就看了一下faceswap的使用。 1.下载代码: https://github.com/deepfakes/faceswap 2.安装python 3.xx版本,之前是2.x不能正常工作 3.运行setup.py wudi:faceswap xiepengchong$ python setup.pyWARNING Running …

Windows安装faceswap

一、安装python3.7版本的anaconda3 下载地址 : Anaconda3-2020.02-Windows-x86_64.exe 然后安装,一路下一步安装,下边两个勾选上 二、在.condarc文件中写入如下内容 ,配置Anaconda的国内镜像地址 channels:- defaults show_cha…

3D FaceSwap换脸

3D FaceSwap 一、算法原理二、实验过程1.实验代码2.配置环境 一、算法原理 FaceSwap是基于图形学的换脸方法,首先获取人脸关键点,然后通过3D模型对人脸关键点位置进行渲染,不断缩小目标形状和关键点定位间的差异,最后将渲染模型的…

faceswap模型训练过程准备——提取人脸

我使用录屏工具获得视频,并命名为.mp4格式 提取帧 ffmpeg -i /Users/hehui/Documents/video.mp4 /Users/hehui/faceswap/src/cage/video-frame-%d.png 从照片中提取人脸: #-*-coding:utf8-*- import os import cv2 import time import shutildef getAl…

faceswap的正确安装步骤

第一步下载项目 faceswap项目地址:https://github.com/deepfakes/faceswap,下载后解压 第二步,环境配置 安装anaconda并换上清华源或阿里源;安装CUDA,可以不装cuDNN conda create -n faceswap python3.8 创建一个名…

AI换脸项目faceswap研究报告

缘起 deepfakes是利用AI技术换脸的开源项目,目前基于deepfakes的开源项目很多,而faceswap认可度很高,到目前为止有28.5千Star,可以说是换脸这类项目最火的了。小弟在当下有换脸需求,选取了这个项目进行研究尝试&#…

faceswap安装教程图文详解

Faceswap是一种人脸识别技术,可以将一个人的面部特征与另一个人的面部特征进行交换,从而创建出一个看起来像是两个人融合在一起的图像或视频。这项技术可以用于各种目的,包括艺术创作、电影制作、虚拟现实、安全监控等领域。Faceswap的实现方…

faceswap使用记录

1、没有显示.fs_cache文件夹 当时我是使用云gpu来运行文件代码的,里面提示我安装两个配置文件放置到.fs_cache文件夹,但是当前文件夹里面并没有显示.fa_cache文件夹 虽然不知道是什么原因,但这个文件夹其实是存在的,你下载好两个…

faceswap 工程搭建及测试

目录 1. 前言2. 2种搭建思路3. 写在前面的坑(1)版本一定要严格遵守要求;(2)下载faceswap的github源码(3)Anacoda也不是万能的(4)tensorflow 与cuda、cudnn、python、kera…

Faceswap文档之---部署安装

前言 本篇博客,记录了部署github上的明星项目faceswap的过程,和一些踩坑记录。这个项目可以很好的实现视频换脸,感兴趣同学可以试一下。 说明:本篇文章我将项目部署在linux操作系统进行使用的,因为我们公司服务器性能更…

DeepFake技术--win7下faceswap环境配置(一)(二)(三)

win7下faceswap环境配置(一)- 软件安装 By admin Deepfakes 24 Comments Deepfakes环境配置 以下以64位Win7环境下Faceswap为例,零编程基础学习deepfakes的环境搭配。 Faceswap 简介 由于Win7用openfaceswap会出现错误,所以…

深度学习换脸:faceswap项目实践

faceswap项目解析 一、简介二、数据提取三、模型训练四、人脸转换五、总结 一、简介 faceswap是采用人脸encoder-decoder的方式进行换脸,先提取人脸,包括人脸分割的mask,然后将两个人的人脸用同一个encoder编码,再使用对方的deco…

Windows下faceswap的安装

在Windows上安装Faceswap是一件轻而易举的事。除图形驱动程序外,Windows安装程序会安装您需要的所有内容。如果您使用的是显卡(强烈推荐。CPU上的换脸的速度非常慢),然后确保您的驱动程序是最新的。 下载(访问github可…

Faceswap文档之---使用手册

前言 本篇博客,记录了使用github上的明星项目faceswap的过程,和一些踩坑记录。这个项目可以很好的实现视频换脸,感兴趣同学可以试一下。 说明:本篇文章我将项目部署在linux操作系统进行使用的,因为我们公司服务器性能更…

STFT filter bank

STFT filter bank STFT根据公式不同的写法,可以推导出overlap-add和filter-bank两种不同的实现方式 X(w)∑nx(n)w(n−mR)e−jωn X ( w ) ∑ n x ( n ) w ( n − m R ) e − j ω n 先暂时讨论R 1的情况 filter bank可以用以下流程表示 分析下以上步骤&…

短时傅里叶变换(STFT)及matlab

笔记~自用版~ 短时傅里叶变换的基础理论 短时傅里叶变换(Short-Time Fourier Transform, STFT)是一种时频分析方法,它将信号在时间域上分成若干个短时段,对每个短时段进行窗函数加窗后再做傅里叶变换,得到每个时刻的频…

Revertable STFT

最近在做利用深度学习去噪的工作,大部分的工作都是利用spectrogram特征来做的,这就需要用到STFT, 本次利用的是python的scipy.signal模块。 在做去噪的时候,首先需要先将输入信号x利用stft转换成spectrogram: ff, tt…

时频分析之STFT:短时傅里叶变换的原理与代码实现(非调用Matlab API)

1. 引言 在信号分析中,傅里叶变换可称得上是神器。但在实际应用中,人们发现它还是存在一些不可忽视的缺陷。 为了便于叙述考察以下两种情形: Case 1 考察这样一个函数: fs 1000; t 0:1/fs:1 - 1/fs; x [10 * cos(2 * pi *…

C语言版本STFT/ISTFT

接上一篇:https://blog.csdn.net/SPESEG/article/details/101672559 注意:寡人的stft是有前提条件的,并不是完全与librosa.stft一一对应【我的版本参数是固定的,不可变,其他是一样的】,因为我的hop_length…

stft isar成像 matlab,基于STFT和FRFT的运动目标雷达三维成像方法与流程

本发明属于数字信号处理技术领域,特别涉及一种运动目标雷达三维成像方方法,可 用于对运动目标识别时,雷达ISAR对其三维成像。 背景技术: 逆合成孔径雷达ISAR是一种全天候、全天时的远程探测手段,具有对运动目标进行 成像的能力,被广泛应用于目标跟踪、目标识别、机场监视…