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

faceswap项目解析

  • 一、简介
  • 二、数据提取
  • 三、模型训练
  • 四、人脸转换
  • 五、总结

一、简介

faceswap是采用人脸encoder-decoder的方式进行换脸,先提取人脸,包括人脸分割的mask,然后将两个人的人脸用同一个encoder编码,再使用对方的decoder进行解码,从而实现换脸。具体过程参考下图:
深度学习换脸:faceswap项目实践_第1张图片
代码地址:https://github.com/deepfakes/faceswap

二、数据提取

我在网络上面找了wangwenbin和zhaolijian两个人的视频,使用opencv将视频保存为图片数据,放在两个文件夹中,原始图片路径~/faceswap/src_1。

# 提取图片中的人脸,提取人脸的过程包括检测、分割、对齐
python faceswap.py extract -i src_1/wangwenbin -o faces_1/wangwenbin
python faceswap.py extract -i src_1/zhaolijian -o faces_1/zhaolijian

完成后,提取的人脸数据保存在faces_1。
原工程支持视频和图片的人脸位置和mask提取,但是后期人脸转换只支持图片到图片,不支持视频到视频

三、模型训练

总共训练三个模型,两个人公用一个encoder模型,每人各自一个decoder模型。

python faceswap.py train -A faces_1/wangwenbin -B faces_1/zhaolijian -m models_1

模型每隔一段时间自动存储,按enter键停止并保存模型

四、人脸转换

使用encoder编码人脸并使用decoder解码zhaolijian的脸,转换后的人脸保存到converted文件夹中

python faceswap.py convert -i src_1/wangwenbin/ -o converted_1/ -m models_1

五、总结

  1. 工程代码更正
    亲测,git下来的faceswap.py需要把头部代码用如下代码替换
import sys
import os
import tensorflow as tf
import keras
from keras.backend.tensorflow_backend import set_session
from lib.cli import args
from lib.config import generate_configs
from tensorflow import ConfigProto
from tensorflow import InteractiveSession

# tf.compat.v1.disable_eager_execution()
os.environ["CUDA_VISIBLE_DEVICES"] = "0"

config = ConfigProto()
config.gpu_options.allow_growth = True
# session = InteractiveSession(config=config)
session = tf.Session(config=config)
set_session(session)
keras.backend.clear_session()

  1. faceswap不是一个前沿算法,效果也一般
    目前比较新的论文可以参考FSGAN: Subject Agnostic Face Swapping and Reenactment[4] (ICCV2019)、FaceShifter: Towards High Fidelity And Occlusion Aware Face Swapping[5] (arXiv2019)
  2. encoder-decoder在图片、视频压缩领域会不会有比较好的效果呢,不知道有没有人在研究这个方向。

你可能感兴趣的:(深度学习换脸:faceswap项目实践)