给大家介绍最近超级火的黑科技应用deepfake,这是一个实现图片和视频换脸的app。前段时间神奇女侠加尔盖朵的脸被换到了爱情动作片上,233333。我们这里将会从github项目faceswap开始一步一步实现一个视频换脸的教程。

注意:

本技术存在一定的使用风险,本教程仅做技术交流,请不要用在其他不应该被使用的地方。

技术分析

faceswap 项目是一个学习重建脸部特征的深度学习算法。你给它一堆的图片,它学习几个小时后,通过分辨哪些是合成的图片最终。但是它并不是仅仅把相似的图片替换,而是通过对不同的表情进行学习分析,最后可以对给出的图片进行模型替换达到以假乱真的效果。详细分析可参考Reddit

假设你可以连续12小时盯着一个人看,观察他的表情并记在大脑里面。然后他跟你说画个我微笑的样子,悲伤的样子,你瞬间就可以完成这个要求并且能够达到高清的图片效果。这就是深度学习的威力。

换脸针对训练的是脸部特征,因此对于输入的图片应该也是只有脸部的图片,所以如果是非脸部的图片需要提取脸部再来进行替换,这也是后面一开始出错的原因。

AI换脸详细步骤

拷贝项目到本地并开始训练模型

首先需要安装git,使用git clone拷贝faceswap项目到本地。从本站上传的文件下载测试数据,faceswap项目地址https://github.com/deepfakes/faceswap

git clone https://github.com/deepfakes/faceswap
cd faceswap
pip install -r requirements.txt
wget https://www.bobobk.com/wp-content/uploads/2019/01/input.zip
unzip input.zip

解压后可以看到目录下有了input_A和input_B训练数据文件夹。

由于训练耗时较长,如果GPU不强的话会更久,建议使用screen运行,本教程训练使用GTX1080ti训练。代码如下:

screen -S faceswap
python faceswap.py train

模型将会保存在model文件夹下。这里我运行到损失函数小于0.03就没有继续训练了。

输入文件准备

模型训练好了就是大家喜闻乐见的换脸环节了,由于我们的测试数据是川普和尼古拉斯凯奇,所以首先我们找一张最新的一小段视频。视频来源https://www.youtube.com/watch?v=S73swRzxs8Y,由于模型只是用来进行图片替换的,这里需要首先将视频转换为图片,项目文件中toos.py可以进行此项工作,用法:

mkdir input
mkdir output python tools.py effmpeg -i cage.mp4 -o input -s 00:0148 -e 00:0156
####视频1分48秒可以到1分56秒结束。

运行失败,为什么,因为没有安装FFmpeg,其中一个功能就是将视频里面的图片提取出来,图片合成会视频。安装可看https://cloud.tencent.com/developer/article/1027379,这里直接给出centos7安装代码

yum install -y vim
yum install -y epel-release
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
yum repolist
rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm
yum repolist
yum update -y
yum install -y ffmpeg
ffmpeg -version

 

安装后就可以了,切割后的图片存在于input文件夹中,接下来就是转换了。

运行报错  

python faceswap.py convert -i original -o modified

 

原因是没有比对的文件,想想也是,我们的输入是一张人脸图片,给的确实一整个电影的一帧,比对就是先把脸部给提取出来以用来替换,所以这里需要先做脸部比对。这在项目里就是使用extract命令(一开始我以为extract是解压文件呢,233333)

把前面从视频中提取的图片文件进行脸部提取,使用方法

python faceswap.py extract -i original -o input

运行训练好的模型换脸

继续运行convert命令

python faceswap.py convert -i input -o output

可以看到已经在逐步输出换脸后的图片,想想还有点小激动呢。

将换脸后的图片重新合成回视频

代码:

python tools.py effmpeg  -i output -r input/cage.mp4 -o modified/cage.mp4 -a gen-vid

生成的mp4在modified文件夹下,下载播放即可。播放时还真的是乐趣多多。

应用

该技术自开发一来就有各种声音,恐惧其威力,想想别人使用你的样子发表一段根本不是你自己录制的视频是什么情景。

个人认为这是一个非常好玩的东西,你可以把自己换到自己喜欢的角色身上,比如哈利波特什么的啊。想想就很有意思。像这篇文章作者把妻子换到节目主持人身上,他妻子得多激动,啊哈哈哈。

总结

本文一步一步地从模型训练,到视频文件的处理,再到图片换脸并重新根据原始视频合成生成的视频。是一个完整的使用faceswap 深度学习AI实现视频换脸教程,理论上可以运用于任何的视频和想替换的人脸,只需要给与足够的目标模型和训练模型的图片即可,这也是很多明星被换到小电影上的原因。

这项换脸技术相信会在未来产生大量好玩的视频,应用,敬请期待!!!

另:由于使用的是深度学习,在训练模型上需要耗费大量的计算资源,因此最好使用GU或者TPU训练较好。

转载地址:https://www.bobobk.com/258.html

faceswap深度学习AI实现视频换脸详解的更多相关文章

  1. 深度学习——优化器算法Optimizer详解(BGD、SGD、MBGD、Momentum、NAG、Adagrad、Adadelta、RMSprop、Adam)

    在机器学习.深度学习中使用的优化算法除了常见的梯度下降,还有 Adadelta,Adagrad,RMSProp 等几种优化器,都是什么呢,又该怎么选择呢? 在 Sebastian Ruder 的这篇论 ...

  2. 深度学习之卷积神经网络(CNN)详解与代码实现(一)

    卷积神经网络(CNN)详解与代码实现 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/10430073.html 目 ...

  3. 【转载】 深度学习之卷积神经网络(CNN)详解与代码实现(一)

    原文地址: https://www.cnblogs.com/further-further-further/p/10430073.html ------------------------------ ...

  4. go微服务框架go-micro深度学习 rpc方法调用过程详解

    摘要: 上一篇帖子go微服务框架go-micro深度学习(三) Registry服务的注册和发现详细解释了go-micro是如何做服务注册和发现在,服务端注册server信息,client获取serv ...

  5. 深度学习之卷积神经网络(CNN)详解与代码实现(二)

    用Tensorflow实现卷积神经网络(CNN) 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/10737065. ...

  6. go微服务框架go-micro深度学习(五) stream 调用过程详解

        上一篇写了一下rpc调用过程的实现方式,简单来说就是服务端把实现了接口的结构体对象进行反射,抽取方法,签名,保存,客户端调用的时候go-micro封请求数据,服务端接收到请求时,找到需要调用调 ...

  7. 使用函数计算三步实现深度学习 AI 推理在线服务

    目前深度学习应用广发, 其中 AI 推理的在线服务是其中一个重要的可落地的应用场景.本文将为大家介绍使用函数计算部署深度学习 AI 推理的最佳实践,  其中包括使用 FUN 工具一键部署安装第三方依赖 ...

  8. Java学习-007-Log4J 日志记录配置文件详解及实例源代码

    此文主要讲述在初学 Java 时,常用的 Log4J 日志记录配置文件详解及实例源代码整理.希望能对初学 Java 编程的亲们有所帮助.若有不足之处,敬请大神指正,不胜感激!源代码测试通过日期为:20 ...

  9. Python学习一:序列基础详解

    作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7858473.html 邮箱:moyi@moyib ...

随机推荐

  1. git如何配置邮箱和用户名?

    答: 1. 配置邮箱 git config --global user.email "jello_smith@163.com" 2. 配置用户名 git config --glob ...

  2. 用jeecg做个项目第三讲(自定义导入导出)

    1.导入 前端js和跳转页面 <t:dgToolBar title="导入单一模板" icon="icon-put" funname="Impo ...

  3. Eclipse的视窗

    PackageExplorer 显示项目结构,包,类,及资源 Outline 显示类的结构,方便查找,识别,修改 Console 程序运行的结果在该窗口显示 Hierarchy 显示Java继承层次结 ...

  4. faster-rcnn 测试自己数据集训练的模型

    python demo_2019051601.pyTraceback (most recent call last): File "demo_2019051601.py", lin ...

  5. Mask_RCNN

  6. 简单了解sshd_config配置文件

    OpenSSH(即常说的ssh)的常用配置文件有两个/etc/ssh/ssh_config和sshd_config.,其中ssh_config为客户端配置文件,设置与客户端相关的应用可通过此文件实现: ...

  7. Consul 随记

    consul 包含多个组件,但是作为一个整体对外提供服务发现和服务配置工具: 提供的关键特性有: 服务发现:发现的是服务对应的IP地址和PORT端口号 健康检查:检查服务节点状态 Key/Value存 ...

  8. python进阶-mock接口

    setting.py MYSQL_HOST='192.168.127.139' PASSWORD=' PORT=3306 USER='root' DB='stu' tools.py import py ...

  9. PHPNamespace命名空间

    命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误.这种情况下只要避免命名重复就可以解决,最常见的一种做法是约定一个前缀. 例:项目中有两个 ...

  10. mysqlslap 性能测试

    --create-schema=name 指定测试的数据库名,默认是mysqlslap --engine=name 创建测试表所使用的存储引擎,可指定多个 --concurrency=N 模拟N个客户 ...