编者按: 本文由图普科技编译自 Exploring DeepFakes https://www.kdnuggets.com/2018/03/exploring-deepfakes.html .
2017 年 12 月, 一个名为 "DeepFakes" 的用户在 Reddit 上发布了一个 "假视频", 视频中的艺人其实是后期加上的, 但是看起来几乎毫无破绽. 他利用了深度学习和 AI 新技术, 在成人电影中把演员的脸替换成某个艺人的脸, 从而制作成了这个看上去以假乱真的视频.
从视频发布以后的好几个星期, 网络上不断有人发表文章和报道, 抨击这一 "换脸" 技术, 称这种技术将会对社会产生很多负面的影响. 比如说, 这个 "换脸" 技术会给很多无辜清白的人 (像那些无故出现在成人电影中的艺人) 造成困扰;"假视频" 会加剧虚假新闻的散播, 进而将大大损坏视频作为证据的可信度.
确实, 心怀不轨的人会利用这项技术做危害社会的事情. 但是我们不能够因此完全否定这项技术的价值, 我们应该好好思考, 如何把它用上正道, 发挥它的积极作用.
所以, 在这篇文章中, 我将会介绍这项 AI 换脸技术的功能和原理, 并且阐述其有发展前途的应用领域.
首先我们要先清楚什么是 DeepFakes? 它能够做什么?
什么是 DeepFakes?
DeepFakes 实际上是一种人脸交换技术, 顾名思义, 也就是在图像或视频中把一张脸替换成另一张脸. 事实上, 人脸交换技术在电影制作领域已经不是个新鲜词了, 但是之前电影视频中的人脸交换非常复杂, 专业的视频剪辑师和 CGI 专家需要花费大量时间和精力才能完成视频中的人脸交换.
DeepFakes 的出现可以说是人脸交换技术的一个突破. 利用 DeepFakes 技术, 你只需要一个 GPU 和一些训练数据, 就能够制作出以假乱真的换脸视频.
这可以说是一个非常了不起的突破了, 因为你只需要把上百张人物的样图输入至一个算法, 就能完成人脸交换, 制作出非常逼真的视频效果. 就算你是个对视频剪辑一窍不通的外行, 也能做到这样.
DeepFakes 的出现还意味着我们可以在视频中进行大规模的 "换脸". 我们大多数人都曾经把自己的照片上传到网络上, 因此, 我们大多数人的脸都能够轻易地被替换到一些视频中, 成为视频的 "主角". 不得不说, 这是件非常可怕的事情, 但这也并不那么值得恐慌, 毕竟我们大家早已接受了 "照骗"(照片造假).
"面部定制" 已经不是什么新鲜事了: 在星球大战中, CGI(计算机图像生成)技术根据一名女演员的脸塑造了年轻时期的 Carrie Fisher 的形象. 女演员脸上的点是用来进行精准的面部绘制的.,
DeepFakes 能够让你在没有任何技巧的情况下完成这样的 "面部定制", 但 DeepFakes 可不是 "面部定制".
DeepFakes 究竟能做些什么?
在讨论如何使用 DeepFakes 之前, 我想先解决这样的问题: DeepFakes 究竟能够做些什么? 它的技术原理是什么?
为了了解其工作原理, 我选了 Jimmy Fallon 和 John Oliver 主持的节目视频作为分析案例. Jimmy Fallon 和 John Oliver 是两位非常受欢迎的晚间节目主持人, 网络上有大量他们的节目视频. 这些视频的亮度变化差不多, 主持人在视频中的动作和姿势也很相似, 这些相似性有利于降低分析的受干扰程度. 但视频同时又存在大量的变化(例如主持人嘴唇的变化), 这样又能够保证分析的趣味性.
很幸运, 我找到了一个包含了原始 DeepFakes 编码和很多 DeepFakes 改进版编码的 GitHub. 这个 GitHub 使用起来相当简单, 但是目前还处于训练数据收集和准备的阶段.
为了让我们的分析实验更简单, 我写了一个能够直接在 YouTube 视频上运行的脚本, 这样一来, 数据的收集和预处理工作就变得轻松多了, 视频转换也只需一步就能完成. 点击此处 https://github.com/goberoi/faceit 查看我的 GitHub 报告, 看看我是如何轻松地制作下面这个视频的(我还分享了我的模型数据).
简单来说, 这个脚本需要你给需要进行人脸交换的人各自准备一个 YouTube 视频集, 然后运行命令来对视频进行预处理 (从 YouTube 下载视频, 提取各个视频的帧, 找出视频中的人脸) 和训练, 并将其转换为音频和可调整大小的选项等.
从 Jimmy Fallon 到 John Oliver 的 "换脸" 结果
下面的视频是经过了大约 30000 张 (Jimmy 和 Oliver 每人各约 15000 张) 图片的模型训练制作完成的, 我从 6-8 个时长分别在 3-5 分钟的 YouTube 视频中过滤掉了那些不含 Jimmy 和 Oliver 的脸的帧, 留下了含有他们的脸的一些帧 -- 每个视频每秒大约 20 帧. 以上这些操作全部都是自动完成的, 我只是提供了一个 YouTube 视频集.
在 NVIDIA GTX 1080 TI 的 GPU 上训练的总时长大约是 72 小时. 训练时间主要与训练的 GPU 有关, 而下载视频并将其划分成帧的时间与 I/O 相关, 这两步是可以同时进行的.
尽管我截取到的 Jimmy 和 Oliver 的人脸图片有几万张, 但是达成完美的人脸交换大概只需 300 张图片. 我选择 "视频截人脸" 的方式是因为, 视频中出现的人脸很多, 从视频中截取人脸图片非常方便, 但如果在网上找这么多人脸图片可就麻烦得多了.
为了避免 GIF 动画的文件过大, 下面的这张图片被设置成了低分辨率. 下面的 YouTube 视频分辨率更高, 声音更大.
https://giphy.com/gifs/fo23NLu9hCqAZYi4Eh?utm_source=iframe&utm_medium=embed&utm_campaign=Embeds&utm_term=https://www.kdnuggets.com/2018/03/exploring-deepfakes.html
视频中的 Oliver 正在演唱 Iggy Azalea 的fancy, 视频中虽然有麦克风的干扰, 但算法最后呈现的效果还算不错.
https://giphy.com/gifs/3JNJb4qjDaCeMDvrlZ?utm_source=iframe&utm_medium=embed&utm_campaign=Embeds&utm_term=https://www.kdnuggets.com/2018/03/exploring-deepfakes.html
这个视频是 Oliver 正在主持 "吉米秀"(Jimmy 主持的晚间节目). 我们发现视频中 Oliver 的脸上多了一副眼镜, 但他的头发和脸型基本没有影响, 整个视频看上去非常自然和谐, 几乎看不出换脸的痕迹.
到目前为止, DeepFakes 还没到完美的程度, 但其呈现出的效果已经相当令人满意了. 关键是我事先并没有对视频做过任何改动, 全是算法的功劳 -- 算法通过观察大量的图片数据, 学会制作出这样以假乱真的换脸视频. 你一定也觉得非常神奇吧? 那么接下来, 让我们一起看看 DeepFakes 究竟是怎么做到的.
DeepFakes 的技术原理
DeepFakes 的核心是一个 "自动编码器", 这个 "自动编码器" 实际上是一个深度神经网络, 它能够接收数据输入, 并将其压缩成一个小的编码, 然后从这个编码中重新生成原始的输入数据.
在这个标准的自动编码器设置中, 网络将尝试学习创建一个编码, 从中网络能够重新生成输入的原始图片. 只要有足够多的图像数据, 网络就能学会创建这种编码.
DeepFakes 让一个编码器把一个人脸压缩成一个代码和两个解码器, 一个将其还原成人物 A(Fallon), 另一个还原成人物 B(Oliver). 下面的图能够帮助你理解:
在这个案例中, 使用的编码器是一样的, 但是 Fallon 和 Oliver 的解码器是不同的. 在训练的过程中, 输入的人脸会被扭曲, 从而模拟一个 "我们希望得到这样的人脸" 的概念.
下面我将介绍算法训练的三个步骤:
1. 首先, 我们给编码器输入了一张 Jimmy 扭曲脸的图片, 并尝试用解码器 A 来重新还原他的脸, 这就使得解码器 A 必须要学会在纷繁复杂的图片中识别并且还原出 Jimmy 的脸.
2. 然后, 把 Oliver 扭曲脸的图片输入至同一个编码器, 并用解码器 B 来还原 Oliver 的脸.
3. 我们不断重复上面的操作, 直到两个解码器能够分别还原出两个人的脸, 同时编码器也能够学会通过抓取人脸关键信息, 从而分辨出 Jimmy 和 Oliver 的脸.
等到以上的训练步骤都完成以后, 我们就能把一张 Jimmy 的照片输入至编码器, 然后直接把代码传输至解码器 B, 将 Jimmy 的脸换成 Oliver 的脸.
这就是我们通过训练模型完成换脸的全过程. 解码器获取了 Jimmy 的脸部信息, 然后把信息交给解码器 B, 这时候解码器 B 会作出这样的反应:"这又是一条干扰信息, 这不是 Oliver 的脸, 那么我就把你换成 Oliver 吧."
一条算法仅通过观察许多图片就能够再次生成, 还原这些图片, 这听起来挺不可思议的, 但 DeepFakes 确确实实做到了, 而且效果还相当不错.
来源: http://www.tuicool.com/articles/mY36na6