程序员体验AI换脸就不要用ZAO了,详解Github周冠军项目Faceswap的变脸攻略

本文链接:https://blog.csdn.net/BEYONDMA/article/details/100594136
       上个月笔者曾在《银行家杂志》发文传统银行如何引领开放银行时代潮流,就曾指出AI换脸等技术的兴起将会我们未来的身份认证手段造成一定的麻烦。而最近ZAO换脸软件再次爆红社交媒体,而且其接近于霸王条款的使用协议也将对于用户隐私造成一定的风险,虽然后来ZAO公开致歉,不过这波热点效应也让Faceswap这个开源的AI换脸项目登顶Github周排行的榜首。

AI换脸历程简介       
         AI换脸首次走进国人视线是在19年3月,一名叫做换脸哥的网友,就上传了一段轰动全网的视频,将扮演94版射雕中黄蓉的演员由朱菌换成了杨幂,而且几乎真假难辩。

而AI换脸在学界早就有所涉及,在18年年中人工智能替换人脸面部特征的技术在科研学术研究领域和开源社区两个方向上都获得了不小的发展,首先是在SIGGRAPH(暨国际计算机图形学会)的18年年会上一个由斯坦福大学、慕尼黑技术大学、巴斯大学等科研究机构联系研发的”Deep Video portrait”系统横空出世,该技术不但能让被替换的人脸完全模板原视频中人物的表情,甚至在放大对比时,两个视频在发丝和睫毛的表现上都能做到极度的精确,后来描述该技术的论文被发表在了《ACM图形交易上》,不过所幸的是研发”Deep Video portrait”技术的几家机构并没有公开其项目的源代码。

而在开源社区中“AI换脸技术”也是得到了相当多的关注,先是一种叫做Reddit上的deepfakes论坛发布多款使用AI换脸技术生成的不雅视频,使多名女星中招,后来Reddit被迫直接关闭了deepfakes的板块,后来在Github由deepfakes衍生而来的开源项目数量不下十几个,其中以faceswap、Openfaceswap等开源项目为代码的换脸技术在github上的更新与讨论十分热烈,极快的推动了开源换脸技术的迭代速度。

Faceswap安装教程
       而在之前AI换脸软件还一般只能安装在LINUX平台,而有算力不低于1.0的N卡、装有PYTHON、CONDA环境及CUDA和CUDAN等苛刻要求,这一番操作下来至少不是专业的IT人员还真是难以搞定,不过笔者亲测了一下最新的Faceswap for windows版本的程序,其安装布署的简单快捷程度出乎我的意料,下面我就来详细介绍一下安装步骤。

1.下载Faceswap安装程序

首先到Githhub上下载最新的Release版本目前最新的链接如下https://github.com/deepfakes/faceswap/releases/latest/download/faceswap_setup_x64.exe

特别揭示:deepfakes相关软件在github被限制使用,必须登陆用户才可以访问,所以如果出现以下页面,请登陆Github:

2.双击安装程序进行安装

只需要在开始界面选择安装路径,在以下界面选择显卡类型,其余就不需要关心了,安装程序会自行配置好Git和conda,还会自行配置环境变量。

Faceswap使用教程
      首先需要明确一下AI换脸的基本概念,我在之前的博文终于把AI换脸的原理搞清了曾经介绍过AI换脸的基本原理,AI换脸当中两大最重要的技术就是人脸检测和人脸对齐。其中人脸检测顾名思义就是在图像中将人脸的部分检测出来,人脸对齐其实就是要把从不同角度、光照、遮挡等情况下得到的人脸信息还原同标准场景下。

虽然安装步骤比之前简单了,不过Faceswap使用起来还是相对比较麻烦的,其基本流程如下:

获取人脸A的信息:首先对于含有人脸A信息的视频进行处理,侦测所有人脸并及人脸的对齐信息,然后需要用户确认对于人脸A的侦测结果正确,如果含有其它人脸不属于人脸A的信息则进行删除,当然如果其它视频中也包含人脸A的信息你也可以将上述文件合并,形成更大的人脸、人脸对齐信息

获取人脸A的信息:重复上述步骤得到人脸B的侦测和对齐信息

模型训练:使用人脸A和人脸B的侦测及对齐信息进行训练。

视频转换:使用刚刚训练好的模型就可以进行视频转换了。

接下来咱们分步介绍Faceswap的一般使用流程

1、启动程序

在上面安装成功后桌面上会自动多出一个“Faceswap"的图标,双击程序会自动调起对应的Python及conda版本进行启动

首次启动大概需要几分钟,然后就可以进入相关图像界面了。

2、处理视频获得人脸A的信息

进行图型界面后直接在EXACT页进行视频的处理,其中

Input Dir: 如果是使用视频则需要选定一个文件,如果使用一组图片则选定一个文件夹。

Output Dir: Faceswap会把处理得到的人脸图像放在output文件夹中

Alignments:不需要填写,使用默认即可,注这里的对齐文件实际是指眉、眼、鼻子、嘴等68个

Serializer: 使用默认即可。

Detector:S3FD的效果的确比较不错。

其余选项不需要更改均使用默认即可。

点击Exact按扭即可开始。

揭示:这项操作非常吃内存,我这边的经验值是每1G内存可以处理40张1280*768的图像,以此类推。

具体如下:

3.删除不必要的信息

我们除了人脸的图像外,还会得到一些如杂志封面的图像,那么接下来我们就要把我们不需要处理的图像删除。

选择tools标签的sort选项,这时的input是实际是我们刚刚解压完成的output文件压,确保Final process选为rename选项,其余按默认可。

然后点击Sort即可完成排序。

接下来将Sort完成的结果进行处理,删除不需要的对齐信息。

选择tools标签的Alignment选项,job选项Remove-Faces具体如下:

其中Alignments files是步骤2生成的对齐文件,Face Folder是我们刚刚sort后的输出目录。设置完毕后点击Alignments 即可。

4.重复2、3步获得人脸B的相关侦测及对齐信息

5.训练模型

获得了人脸A和B的信息后就可以训练模型了,其中

Input A:人脸A的图像文件。

Alignments A:人脸A的对齐文件

Input B:人脸B的图像文件。

Alignments B:人脸B的对齐文件

选定完成之后点击Train按扭即可,不过这个时间一般比较长,笔者的2080处理的图像数量在1000张左右,截止目前已经运行了接近一天,还未结束。

6.正式换脸

训练完成后,就可以进行换脸了:

Input Dir: 要转换的包含有人脸A的视频。注意如果Input Dir中输入的视频不是步骤2中提取人脸A特征的视频,也需要对于此视频按照步骤2生成对齐文件。

Output Dir: 转换后视频的位置

Alignments:对齐文件位置

Model Dir:我们在步骤5中生成模型的位置。

配置完成后点击convert即可完成转换。

但是笔者的模型尚未训练完成,且为了避免侵权,就放一个Github已训练完成的模型效果图吧(把詹尼佛.劳伦斯换成史蒂夫·布西密吧:

写在最后 
      首先对于IT人员来说Faceswap的代码质量上乘,值得一读,重点推荐https://github.com/deepfakes/faceswap/tree/master/lib/alignments.py这个有关对齐的代码质量不错,找时间可以给大家详细解读一下。

其次目前尚没有可靠的技术能够鉴定视频的真伪,虽然目前脸书、微软t联合麻省理工学院等一票大学共同发起了Deepfake挑战赛,但是我之前的博客中也介绍过AI假新闻满天飞,打假神器GROVER帮你看清一切中利用AI去鉴定假新闻的尝试,不过其鉴定成功率和可靠率还很低,而且从目前AI换脸的原理来看,其技术破破绽更少,鉴定难度比NLP会更大。所以不排除今后实时的监控视频都需要按照《GB/T 25724-2017公共安全视频监控数字视音频编解码技术要求》进行安全加固,才算有效了。

原文地址:https://www.cnblogs.com/Ph-one/p/11748669.html

时间: 2024-09-29 18:04:51

程序员体验AI换脸就不要用ZAO了,详解Github周冠军项目Faceswap的变脸攻略的相关文章

【黑马程序员】第8课:Request与Response详解

<pre> day08 昨天内容回顾 (1)servlet三种实现的方式 (2)servlet的生命周期 *三个方法 init service  destroy (3)URL-Pattern的配置有三种 (4)路径的问题 *绝对路径 /day09/.... *重定向和转发 (5)ServletConfig对象 *初始化参数的配置 <init-param> <param-name> <param-value> ..... (6)ServletContext对象

【黑马程序员】第9课:Cookie与HttpSession详解

<pre> day09 昨天内容回顾 (1)response *response里面对应http协议里面的对应的方法 *在response里面做了四个案例(不包含验证码)代码至少写三遍 *验证码的案例,看懂就可以了. *重点掌握看不清换一张实现 *Response向页面输出中文乱码解决(****) (2)request *获取客户机信息和头信息的方法 *获取表单提交的数据 *获取表单提交中文数据乱码问题解决(****) *request域 *重定向和转发的区别 思维导图 1.JSP入门(代码位

C/C++程序内存的各种变量存储区域和各个区域详解

转自 https://blog.csdn.net/jirryzhang/article/details/79518408 C语言在内存中一共分为如下几个区域,分别是: 1. 内存栈区: 存放局部变量名:2. 内存堆区: 存放new或者malloc出来的对象:3. 常数区: 存放局部变量或者全局变量的值:4. 静态区: 用于存放全局变量或者静态变量:5. 代码区:二进制代码.知道如上一些内存分配机制,有助于我们理解指针的概念. C/C++不提供垃圾回收机制,因此需要对堆中的数据进行及时销毁,防止内

解决C#程序只允许运行一个实例的几种方法详解

方法一:使用线程互斥变量. 通过定义互斥变量来判断是否已运行实例.把program.cs文件里的Main()函数改为如下代码: using System; using System.Windows.Forms; using System.Runtime.InteropServices; namespace NetTools { static class Program { [DllImport("user32.dll")] private static extern bool Flas

程序员简历应该怎么写?

作者:ThoughtWorks中国链接:https://www.zhihu.com/question/25002833/answer/158108028来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 大家伙让一让,这个问题让老司机先答!作为一个潜入IT圈五年之久.看过数万份简历的HR,在这个问题上还是有点发言权的.HR在筛选简历时主要从公司需求出发,重点不一,不过还是有很多"通用"的套路,为了在30秒内判断出这份简历是否值得跟进,我认为程序员写简历的正确

程序员到项目经理:从内而外的提升

转自:http://www.cnblogs.com/watsonyin/archive/2012/09/10/2679528.html 目录 从程序员到项目经理(一):为什么要当项目经理 从程序员到项目经理(二):升职之辨 从程序员到项目经理(三):认识项目经理 从程序员到项目经理(四):外行可以领导内行吗 从程序员到项目经理(五):程序员加油站,不是人人都懂的学习要点 从程序员到项目经理(六):程序员加油站 — 懂电脑更要懂人脑 从程序员到项目经理(七):程序员加油站 — 完美主义也是一种错

如何提升你的能力?给年轻程序员的几条建议

收藏自腾讯开发平台:http://gad.qq.com/article/detail/7151319 一转眼工作已有8年,前两天公司一位初入职场的同事希望我给一些建议与经验.我觉得这个话题很有价值,这里以个人的想法与经历写成此文,希望给年轻的开发者们一些启发. 我工作过的公司有4家,NVIDIA, Google, Slide和Glow.其中两家是知名的大公司,Slide我是D轮过后加入的,那时约150人.Glow则是从它第一天创立,一直走到现在.个人的工作也从Developer,Tech Lea

做到这一点,你也可以成为优秀的程序员

转自 http://kb.cnblogs.com/page/575829/ 作为一个程序员,我经常会问自己一个问题: 优秀的程序员都具备哪些特质? 我总结过很多特质,例如: 有解决问题的能力 有独立思考的能力 有好奇心.有探索精神 逻辑清晰,能够用通俗的语言把技术问题讲清楚 有良好的英文阅读能力 数学好,算法好 经过一段时间的观察,我发现这上面的所有特质,都可以由一种行为习惯衍生出来,也就是如果你有以下习惯,那么你可能拥有且不限于以上所有的特质 观察大多数程序员的行为,朝相反的方向走 这句话也可

程序员这样优化简历,一投制胜

本文转载于: (http://mp.weixin.qq.com/s?__biz=MzAxMzUzNzYyNA==&mid=402350606&idx=1&sn=c356b88f22d9277534aeee773f07d6ca&scene=23&srcid=02256Zn4PnYzdQ8M8WyTj5BG#rd&ADUIN=3024665621&ADSESSION=1456446961&ADTAG=CLIENT.QQ.5467_.0&A