本文链接: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公共安全视频监控数字视音频编解码技术要求》进行安全加固,才算有效了。

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

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

    解决C#程序只允许运行一个实例的几种方法详解 本篇文章是对C#中程序只允许运行一个实例的几种方法进行了详细的分析介绍,需要的朋友参考下 本文和大家讲一下如何使用C#来创建系统中只能有该程序的一个实例运 ...

  2. Delphi程序调用C#.Net编译的DLL并打开窗体(详解)

    Delphi程序调用C#.Net编译的DLL并打开窗体(详解)最近用C#.Net写了一个公用模块, 本以为仅提供给.Net程序使用, 但是领导要求把这些功能提供给旧系统使用, 天啦, 几套旧系统全是D ...

  3. 人才需求之Java程序员与AI程序员

    据100offer报告显示:2018年Java人才市场「高开低走」的动荡局势.整体求职难度变大,且全年波动更剧烈,淡旺季区别明显.企业发出的Java面邀总数几个季度连续下跌,Q4 甚至比去年同期下降了 ...

  4. 【2019.10.17】十天Web前端程序员体验(软件工程实践第五次作业)

    结对信息.具体分工 Github地址:https://github.com/MokouTyan/131700101-031702425 学号 昵称 主要负责内容 博客地址 131700101 莫多 代 ...

  5. 全球最火的程序员学习路线!没有之一!3天就在Github收获了接近1w点赞

    大家好,我是G哥,目前人在荆州办事,但是干货还是要安排上! 国外有一个爆火的开发人员学习路线,目前已经在 Github收获了 131 k+ star,Star 数量在 Github 所有仓库中排名第 ...

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

    转自 https://blog.csdn.net/jirryzhang/article/details/79518408 C语言在内存中一共分为如下几个区域,分别是: 1. 内存栈区: 存放局部变量名 ...

  7. C#程序员的春天之从零开始学习unity3D游戏开发入门教程二(创建项目及基本面板介绍)

    一项目创建: 创建项目是开发的第一步. 运行untiy之后如果是第一次运行会弹出 我们这里随便创建一个项目. 二Untiy面板介绍: 三代码编辑器的切换: 这里我安装了vs2012. 到这里开发环境基 ...

  8. 关于微信小程序发布新版本后的提示用户更新的方法详解

    当小程序发布新的版本后 ,用户如果之前访问过该小程序,通过已打开的小程序进入(未手动删除),则会检测新版本,提醒用户更新新的版本 话不多说,上代码 App({ onLaunch: function ( ...

  9. 我的第一个Python程序,定义主函数,eval、format函数详解,

    程序实例: #第一个py小程序 def main(): f = eval(input("输入一个数值:")) p=f*(5/9) print("现在的值为:{0:3.3f ...

随机推荐

  1. Linux环境变量$PATH

    3. 使用env命令显示所有的环境变量 # env HOSTNAME=redbooks.safe.org PVM_RSH=/usr/bin/rsh Shell=/bin/bash TERM=xterm ...

  2. git如何删除已经提交的文件夹

    在上传项目到github时,忘记忽略了某个文件夹.idea,就直接push上去了, 最后意识到了此问题,决定删除掉远程仓库中的.idea文件夹 删除前: 删除后: 在github上只能删除仓库,却无法 ...

  3. 【HICP Gauss】数据库 数据库高级语法(数据类型函数)-3

    SQL高级语法:整型:   integer 2(-31) ~2(31)-1 4字节 intger unsigned 2(0)~2(32)-1 4字节 bigint 2(-63)~2(63)-1 8字节 ...

  4. 大数据技术之Hadoop3.1.2版本完全分布式部署

    大数据技术之Hadoop3.1.2版本完全分布式部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.主机环境准备 1>.操作系统环境 [root@node101.yinz ...

  5. robot framework 笔记(二),web ui 元素定位

    背景: 元素定位的方式很多,有通过 id.name.class等等,有感兴趣的同学可以参看相关文档,本文介绍 跟过文字定位的方法,在工作中一直使用这一种 no bb 方法如下: 1.根据"我 ...

  6. 结构型模式(四) 组合模式(Composite)

    一.动机(Motivate) 在我们的操作系统中有文件夹的概念,文件夹可以包含文件夹,可以嵌套多层,最里面包含的是文件,这个概念和"俄罗斯套娃"很像.当然还有很多的例子,例如我们使 ...

  7. Exec Maven插件

    1.为什么使用exec? 现在的工程往往依赖 众多的jar包,不像war包工程,对于那些打包成jar包形式的本地java应用来说,通过java命令启动将会是一件极为繁琐的事情,原因很简单,太 多的依赖 ...

  8. npm安装模块没有权限解决办法

    直接加上unsafe的参数即可 sudo npm install --unsafe-perm --verbose -g sails

  9. RCNN,Fast RCNN,Faster RCNN 的前生今世:(4) Fast RCNN 算法详解

    继2014年的RCNN之后,Ross Girshick在15年推出Fast RCNN,构思精巧,流程更为紧凑,大幅提升了目标检测的速度.在Github上提供了源码. 同样使用最大规模的网络,Fast ...

  10. 使用Fiddler抓包抓取不了数据包的问题

    一:(我)抓包遇到的问题. ①:抓包一直出现这个问题 解决办法:  如果你遇到上面的问题,就可能是证书的问题(我的本地证书是用系统生成证书的一个软件生成的个人证书,所以出现了问题,我抓的所有数据都出现 ...