GithubHelp home page GithubHelp logo

faceswap's Introduction

Faceswap

​ 最近刚好接触深度学习的一些项目,又比较清闲,所以研究了一下faceswap的使用。faceswap可以用来实现换脸,由于并非专业学习,具体原理没有做深入研究,仅仅做了两天,了解了一下使用过程,在这里做个记录。

写在前面

​ 我这里用的是linux云服务器,个人windows笔记本、台式机也可以,大同小异。个人亲测阿里云学生服务器1核2GB运行不了,训练过程中总会终止。服务器这一块大家自行准备,这里仅供参考。如果有人阿里云学生服务器成功了可以评论交流一下。

​ 现在时间是2020.11.29。faceswap会不断更新,可能不同时间略有差异。

faceswap安装

这里没什么好说的,直接github下载就可以了:

git clone https://github.com/deepfakes/faceswap

下载后放到faceswap目录下。如果太慢可以考虑手动下载。

准备数据集

人物图像收集

​ 这里用了个简单的python爬虫爬取的百度图片。代码网上很多,可以自行搜索。我这里用的是

https://blog.csdn.net/qq_40774175/article/details/81273198 这位作者的代码,表示感谢。我这里爬取了两个人的图像,每人1000张左右,分别放在两个/data/liu 和 data/ma下。

人脸提取

# 提取人物A的人脸
python faceswap.py extract -i ../data/liu/ -o ../data/liu/face
# 提取人物B的人脸
python faceswap.py extract -i ../data/ma/ -o ../data/ma/face

# -i -o 后分别为输入图片的相对路径和对应的输出人脸的相对路径

这里可能会报错,提示你缺少各种包,总之缺什么装什么就可以了。

人脸提取完后会在data/liu和data/ma下会生成一个face文件夹和一个alignments.fsa文件。

  • face存放提取到的对应人物的人脸。
  • alignments.fsa保存了人脸的各种信息

这里注意:

​ 提取完后需要将alignments.fsa文件移动到或者复制face文件夹下才可训练,否则训练会提示缺少文件。

​ 至此,数据集准备完毕。

训练模型

切换到下载的faceswap文件夹下,会发现很多文件,不需要管,执行以下命令开始训练

python faceswap.py train -A ../data/liu/facet -B ../data/ma/face -m ./models/
# -A -B 后为人脸A和人脸B的相对路径,-m后为模型保存的相对路径

这里注意:

  • 以上命令的顺序为将A的脸换为B。
  • 训练所用数据为提取后的人脸,并非原人物图片。

​ 模型训练过程中会不断输出loss值,一般在0.03左右效果不错。我这里仅仅达到了0.05左右基本不降了,具体原因还没找到,效果的话大概能看出更换之后的样子,只是有点模糊。

​ 训练过程中每隔一段时间会保存一次模型,程序中断后再次执行会在上次的模型基础上训练,具体操作可以看他的提示。训练需要手动停止,一般看loss下降到合适的值或者基本不降了之后就可以手动停止了,训练完后模型保存在上面指定的路径下。

模型测试

​ 训练完后,可以用模型换一下试试效果,可以给图片换脸,也可以给视频换脸。

图片换脸

假定在data/liu_test目录下有几张人物A的图片用以测试。

python faceswap.py extract -i ../data/liu_test/ -o ../data/liu_test/face
# 首先提取测试集人脸
pthon faceswap.py convert -i ../data/liu_test/ -o ../data/liu_test/output/ -m ./models/
# 转换人脸参数分为别为输入测试集图像路径、输出图像路径和所用模型路径

这里注意:

  • convert转换人脸命令输入的图片为测试集原图(但仍需先提取人脸),而train训练需要提取后的人脸图像。至于convert为什么不能用提取的人脸图像,目前尚未研究,如果大家知道,欢迎在底下评论留言。

转换完之后在/data/liu_test/output后会看到换脸后的效果图。

视频换脸

​ 视频换脸的本质仍然是图片,只是将视频抽帧成许多图片,将图片换脸,再合成视频。

  • 视频抽帧:
python tools.py effmpeg  -i ./liu.mp4 -o ./video_output -s 00:0148 -e 00:0156
参数分别为:视频路径、输出抽帧图片路径、需要抽帧的时间段

​ 抽帧后会在video_output目录下看到抽帧的后的图片,然后将其按上述图片换脸方法处理得到换脸后的图片。

  • 图片合成:

    图片合成也有一条命令,不过我这里没有运行成功。所以我直接用了windows自带的视频剪辑器将

图片合成了视频,只是没有配置。关于怎么合成视频,网上有很多方法,可以自行搜索,如有好的方法欢迎留言。

​ 至此这个记录就结束了,不能算个教程,因为没有涉及任何原理,仅仅学习了如何使用,记录一下两天做的事情。后续如有其他研究会继续更新。

faceswap's People

Contributors

ywonchall avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.