换脸-入门

目前深度学习的应用已经深入各个方向,涌现了很多有意思的技术,尤其是最近很火的面部互换很有意思,本文将结合原理与代码来进行一个比较简单的入门介绍,分为以下两个部分:

原理
代码

原理

Autoencoder

首先来看autoencoder结构,见下图所示:
在这里插入图片描述
图1. autoencoder结构

输入(图像)-网络层-隐向量-网络-输出(图像),即将输入图像通过网络(encoder)编码为一个向量,然后再通过网络(decoder)将向量解码为图像,训练的时候通常采用重构loss(l1l_1l2l_2 loss).

Training

在这里插入图片描述
图2. 训练过程

网络结构可以看成包含两个并列的autoencoder,只不过它们的encoder是参数共享的。训练时,分别从A人物与B人物中取N张图像,先将N张A人物人脸图像输入进网络,得到A人物的输出;再将B人物的N张人脸图像输入网络,得到B人物的输出。进行loss计算时,分别对人物A与人物B的输出与输入进行l1l_1或者l2l_2重构loss的计算即可。训练若干次epoch之后即能看出效果。

Inference

在这里插入图片描述
图3. 测试(使用过程)

测试的时候比较取巧,分为以下四种情况:

  • A===>A. 组合方式为: 输入A人脸图像 + encoder + decoder A 的方式即可得到A的重构图像
  • B===>B. 组合方式为:输入B人脸图像 + encoder + decoder B 的方式即可得到B的重构图像
  • A===>B. 组合方式为:输入A人脸图像 + encoder + decoder B 的方式即可得到A与B的换脸图像
  • B===>A. 组合方式为:输入B人脸图像 + encoder + decoder A 的方式即可得到A与B的换脸图像

代码

使用的代码为:https://github.com/Oldpan/Faceswap-Deepfake-Pytorch

里面包含了很详细的使用说明,抽帧+提取人脸+训练+测试,这些操作都有。代码写的也很简单易懂,这里就不再详细展开。贴一些训练中的过程,可以有个直观的感受。

在这里插入图片描述
0次迭代

在这里插入图片描述
100次迭代

在这里插入图片描述
10000次迭代

在这里插入图片描述
30000次迭代

在这里插入图片描述
50000次迭代

在这里插入图片描述
99900次迭代

每张图像中由12列四组构成(每3列构成一组),分别表示不同的人脸,其中每一组的第一列表示输入人脸图像,第二列表示本人人脸重构(即输入人物与decoder对应),第三列表示换脸结果。可以看出,随着训练次数的增加,本人人脸重构越来越精确,在达到一定训练次数之后,换脸结果也较为逼真。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章