程序员体验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公共安全视频监控数字视音频编解码技术要求》进行安全加固,才算有效了。
程序员体验AI换脸就不要用ZAO了,详解Github周冠军项目Faceswap的变脸攻略的更多相关文章
- 解决C#程序只允许运行一个实例的几种方法详解
解决C#程序只允许运行一个实例的几种方法详解 本篇文章是对C#中程序只允许运行一个实例的几种方法进行了详细的分析介绍,需要的朋友参考下 本文和大家讲一下如何使用C#来创建系统中只能有该程序的一个实例运 ...
- Delphi程序调用C#.Net编译的DLL并打开窗体(详解)
Delphi程序调用C#.Net编译的DLL并打开窗体(详解)最近用C#.Net写了一个公用模块, 本以为仅提供给.Net程序使用, 但是领导要求把这些功能提供给旧系统使用, 天啦, 几套旧系统全是D ...
- 人才需求之Java程序员与AI程序员
据100offer报告显示:2018年Java人才市场「高开低走」的动荡局势.整体求职难度变大,且全年波动更剧烈,淡旺季区别明显.企业发出的Java面邀总数几个季度连续下跌,Q4 甚至比去年同期下降了 ...
- 【2019.10.17】十天Web前端程序员体验(软件工程实践第五次作业)
结对信息.具体分工 Github地址:https://github.com/MokouTyan/131700101-031702425 学号 昵称 主要负责内容 博客地址 131700101 莫多 代 ...
- 全球最火的程序员学习路线!没有之一!3天就在Github收获了接近1w点赞
大家好,我是G哥,目前人在荆州办事,但是干货还是要安排上! 国外有一个爆火的开发人员学习路线,目前已经在 Github收获了 131 k+ star,Star 数量在 Github 所有仓库中排名第 ...
- C/C++程序内存的各种变量存储区域和各个区域详解
转自 https://blog.csdn.net/jirryzhang/article/details/79518408 C语言在内存中一共分为如下几个区域,分别是: 1. 内存栈区: 存放局部变量名 ...
- C#程序员的春天之从零开始学习unity3D游戏开发入门教程二(创建项目及基本面板介绍)
一项目创建: 创建项目是开发的第一步. 运行untiy之后如果是第一次运行会弹出 我们这里随便创建一个项目. 二Untiy面板介绍: 三代码编辑器的切换: 这里我安装了vs2012. 到这里开发环境基 ...
- 关于微信小程序发布新版本后的提示用户更新的方法详解
当小程序发布新的版本后 ,用户如果之前访问过该小程序,通过已打开的小程序进入(未手动删除),则会检测新版本,提醒用户更新新的版本 话不多说,上代码 App({ onLaunch: function ( ...
- 我的第一个Python程序,定义主函数,eval、format函数详解,
程序实例: #第一个py小程序 def main(): f = eval(input("输入一个数值:")) p=f*(5/9) print("现在的值为:{0:3.3f ...
随机推荐
- obj + mtl 格式说明
OBJ(或 .OBJ)是一种开放的几何定义文件格式,最初由Wavefront Technologies公司开发,用以描述其Advanced Visualizer动画包.该格式已被其他3D图形应用供应商 ...
- Linux命令——modprobe
参考:5 UNIX / Linux modprobe Command Examples Linux modprobe command 简介 modprobe用于向Linux Kernel添加 或 移除 ...
- Python itchat模块的使用,利用图灵机器人进行微信消息自动回复
一.下载安装itchat模块 二.小实验:获取微信好友头像信息 这需要用itchat模块中的一个方法 itchat.get_friends()#获取微信所有微信好友信息 现在我们导入itchat,打印 ...
- 利用ssh的用户配置文件config管理ssh会话
通常利用 ssh 连接远程服务器,一般都要输入以下类似命令: ssh user@hostname -p port 如果拥有多个 ssh 账号,特别是像我这种喜欢在终端里直接 ssh 登陆,不用 PuT ...
- js基础知识3
系统对话框方法 警告框 window.alert('mcw'); 效果显示 确认框 var a = window.confirm('你确定要离开网站?'); console.log(a); 如果点击确 ...
- Windows下通过SSH无密码连接Linux服务器
一.配置环境 1.本机系统:Windows 10 Pro(64位) 2.服务器:CentOS 6.10(64位) 3.SSH连接软件:SecureCRT 二.配置SSH无密码登录步骤 1.在个人PC机 ...
- React系列,jsx
<script type="text/babel"> var name = "kimoo"; var fn = ()=> "kimo ...
- redis问题解决 Caused by: io.lettuce.core.RedisException: io.lettuce.core.RedisConnectionException: DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specifie
1找到redis的配置文件 redis.conf vim redis.conf 修改 protected-mode yes 改为 protected-mode no 注释掉 #bin 127.0.0 ...
- linux系统编程之信号(四)
今天继续探讨信号相关的东东,话不多说,正入正题: 信号在内核中的表示: 下面用图来进一步描述这种信号从产生到递达之间的状态(信号阻塞与未诀): 那是怎么来决定的呢?下面慢慢来举例分解: 所以,通过 ...
- (三)WCF之契约
自从我们接收ITOO项目之后,就必须跟WCF打交道,既然必须直面WCF,我就对WCF进行了研究(还不是很深入,是自己目前的理解).之前对WCF的一些基础知识进行了简单的介绍,本篇重点来介绍WCF的契约 ...