如何评价deepfakes用深度学习技术所合成的明星AV?

如何评价deepfakes用深度学习技术所合成的明星AV?

看罢各位答主的回答,感觉很多人对这门换脸技术还是很感兴♂趣的。

此前我们也有聊过 deepfakes,当时它在论坛 Reddit 上的对应板块还存活(现在已经被河蟹的毛都不剩了)我们今天就带大家一探 deepfakes 的神秘,了解它背后的工作原理,并用一个简单的试验复现这项技术,以及讨论它的潜在商业应用。

首先,DeepFakes 是什么? 它为什么如此重要?

DeepFakes 让人们能够将图片和视频中的人脸进行替换。实际上人脸替换技术已经存在好多年了,不过传统的人脸替换需要技术娴熟的视频编辑和 CGI 专家花费大量的时间才能实现不错的效果。

现在,这项技术有了新的突破,通过深度学习技术,任何人只需要一个强大的 GPU 和足够的训练数据就能创作出以假乱真的人脸替换效果。

这项技术实在是太奇妙了,自打它发布以后,关于它的讨论就一直不断,甚至还有人基于它研发了一个换脸的桌面应用 FakeAPP。这部分背景这里不再详述,可以查看我们以前的分享:

对于这种 AI 技术,作为美国 AI 研发重镇的硅谷自然也是饶有兴趣,比如其中有位叫

Gaurav Oberoi 的程序猿小哥,在 Deepfakes 发布后不久就开始琢磨相关的知识,终于搞清了其中的工作原理,并且自己也实际操作了一番,完美复现了 deepfakes 的换脸效果。下面我们就跟着他一起探究 deepfakes。

Deepfakes 能干什么?

假设有两个人 A 和 B,将几百张他们的照片输入 deepfakes 的人脸替换算法中,任何人都能创作出高质量的交换了这二人脸部的视频,并且不需要任何视频编辑技术。

在开始使用这项技术之前,我们先理解它是如何工作的以及效果如何。

我们选择两位当下比较知名的电视节目主持人(抱拳了老铁),《吉米今夜秀》的 Jimmy Fallon 和 HBO 的知名脱口秀主持人 John Oliver,之所以选择他们...是因为我们在网上能找到许多他们的视频,也就是说在收集数据方面会比较方便。

而且在视频这两人的动作和表情也比较相似,同时也有足够的变化(比如嘴唇的动作)让视频看起来更有趣些。

之前网上也有些关于 deepfakes 的分享资源,但是很多后来都被删掉了(原因就不多说了),幸好我找了很久终于找到了一个GitHub仓库:

https://github.com/deepfakes/faceswap

里面不仅有原始的 deepfakes 代码,还有不少更新和升级,可把我高兴坏了。这个库可以很方便的直接用,但是仍然需要我们收集和准备模型的训练数据。

为了让我们复现 deepfakes 的尝试更简单些,我写了一个能直接处理 YouTube 视频的脚本,一键即可完成训练数据的收集、预处理和视频转换。整个项目的代码都在我的 GitHub 仓库里,地址见文末。下面我来演示生成换脸视频是多么的简单(我也会分享模型的权重)。

把视频里的 Jimmy Fallon 换成 John Oliver

下面展示的视频由训练后的模型生成,我用了这两人各 15000 张脸部照片训练了模型(总共约 30000 张)。这些照片是我从 6-8 段 3-5 分钟的 YouTube 视频片段中提取的,每个视频每秒约 20 帧,然后去除没有展现他们脸部的帧。所有这些都是用脚本自动完成的,我只需指定 YouTube 播放列表中的 URL。

在 NVIDIA GTX 1080 TI GPU 上整个训练过程花费了约 72 小时。训练模型时间的长短主要是受限于 GPU 的性能,但是下载数据、提取帧这些工作可以同时完成。

虽然我收集了 3 万张照片,但是实际上用几百张照片就能训练出效果很好的模型。

最后我们来看看给这两人换脸的效果:

尽管不是特别完美,但换脸结果已经足以显示出 deepfakes 的强大。最关键的是:我没有对视频进行哪怕一丁点儿的更改,完全是算法自己通过大量的示例学习完成了换脸,好神奇有木有?那它是怎么做到的?我们下面一起揭开 deepfakes 的神秘面纱。

DeepFakes 是如何工作的?

DeepFakes 代码的核心部分是一个自动编码器,它是一个深度神经网络,能够学习如何获取输入、将输入压缩成很小的表示,或称之为编码,然后从编码中恢复最初的输入信息。

关于自动编码器的原理讲解,可参见我们这篇文章:

上图是一个标准的自动编码器设置,神经网络会学习如何创建编码(图中间位置),然后从编码中恢复输入图像的原始信息。只要有足够数据,它就能学会这个过程。

在神经网络中设置一些限制,从而令其只能重建输入的照片而不是简单的返回照片原样。编码器产生的编码能够帮助神经网络获取更为广泛的模式,比如,如何以及在哪些位置勾勒出 Jimmy Fallon 的眉毛。

DeepFakes 不仅拥有一个能将人脸照片压缩为编码的编码器,它还有两个解码器,其中一个将编码信息恢复为人物 A (即 Jimmy Fallon),另一个则将编码恢复为人物 B (即 John Oliver)。

在 Jimmy Fallon 和 John Oliver 的例子中,两人共用一个编码器,但解码器却不相同。在训练期间,输入的人脸都进行了扭曲处理,用来模拟“我们想要一张这样的人脸”这种效果。

上图向我们展示了如何训练的这三个组件:

训练一旦完成,我们就能实现一个巧妙的小把戏:向编码器输入一张 Jimmy Fallon 的照片,然后我们并不是从编码中恢复 Fallon 的面部照片,相反我们将其输入解码器 B,然后重建为 John Oliver 的面部照片。这样,我们就能将视频中的 Jimmy Fallon 的脸部替换为 John Oliver 的脸部,完成人脸替换,完美复现 Deepfakes。

上图就是我们用模型生成另一张人脸的大致表示。编码器会捕捉 Jimmy Fallon 的面部特征,然后传送给解码器 B,后者看到后心想“啊哈,又来一个有噪声的数据,但是哥已经学会了怎么将照片变成 John Oliver 的面部照片,继续这么干!”就这样,完成换脸!

想一想 AI 算法只通过几千个样本就能学会如何生成这些图片,简直是太神奇,然而这就是真真切切的事实,而且效果也比较理想。

局限和学习

虽然 AI 换脸的结果令人兴奋,但我们上文所有这项技术中仍存在一些明显的局限。

1.只有在被处理人的图像足够多时,算法才会有较好的效果:将一个人加入视频中,需要 300-2000 张包含人物脸部的图片才能使神经网络学会如何重建人脸。图片数量取决于这些图片中的人脸有多大差别以及它们与原始视频的契合程度有多高。

→对于名人和那些在网上有大量照片的人,这个算法工作良好。但是很明显,仅凭这个算法,我们还做不到替换任意两个人的脸部,因为我们可能无法获取其中一人的足够多的照片来训练算法。

2.除了这些,你还需要表示最终目标的训练数据:我们可以看到算法并不擅长生成 John Oliver 的人脸轮廓,因为我们的训练数据中并没有多少 John Oliver 的侧脸图像。总的来说,目标人物的训练图像,要尽可能高的契合你想替换他们的视频中人脸的朝向、面部表情和光线条件等。

→所以如果你打算构建一个针对普通人的人脸替换工具,假设你能得到的关于他们的照片都是正面的(例如自拍照),那这个工具只能局限在大部分脸部朝向前方的视频中使用。但是如果你的目标人物都是知名人物,那么得到多样化的人脸照片就容易得多了。并且如果目标人物能够帮你创造相应的数据,摆拍出你需要的照片,那么重点关注脸部照片的数量和多样性即可,好让你很容易的将他们的脸部插入任何视频中。

3.构建模型有可能会比较耗时耗力:获得差不多的效果需要 48 小时,要想得到像上面一样不错的结果则需要 72 小时,每个 GPU 每小时会花费 0.5$,所以仅建立一个交换两个人脸部的模型就需要花费 36$(我使用的是单独一个 GPU , 可以通过多个 GPU 并行地进行训练),这还不包括获取数据所需要的带宽以及处理数据的 CPU、I/O 等所产生的花费。最大的问题是每两个人之间都需要一个相应的模型,单独一个模型无法扩展到不同的人脸上。

→因为模型的成本较高,所以很难制作一个用途广泛,并且免费或廉价的应用。当然了,如果客户愿意为搭建模型付费的话,那一切都不是问题。

4.运行模型相对就廉价多了,但也不是完全免费:利用一个 GPU ,创作一个交换人脸的视频所花费的时长是原视频的 5-20 倍,例如,处理一个一分钟的 1080P 视频需要花费大约 18 分钟。GPU 能够加速执行核心模型和人脸检测代码(例如视频中是否存在需要交换的人脸),目前为止,我还没有单纯使用 CPU 来执行这个模型,但我打赌它一定慢的要死。

→当前版本的算法中,还存在许多效率低下的部分:读取和写入帧时要等待 I/O、没有成批地将帧传入 GPU 、未并行化等。如果解决掉这些问题的话,模型一定会运行的更快,并且有可能能在训练耗时和成本之间取得不错的平衡,从而能让我们用 CPU 也能训练模型实现人脸替换。

5.再利用模型能够降低训练时间和花费:假设你将 Fallon-to-Oliver 模型应用在 Jimmy Kimmel 和 John Oliver 之间进行人脸交换,一定不会有好的结果。但是以 Jimmy Kimmel 模型为起点,使用 Kimmel 和 Oliver 的照片训练一个新的模型,这可以仅花费 20%-50% 的时间(12-36 小时而不用 72 小时)。

→如果我们能让模型稳定的适用于不同的人脸形状,然后用它们作为起点,这样或许能显著减少训练时间和花费。

下面的这些问题则都是可以解决的:可以用工具或写脚本大量收集网络频道上的图片,当训练数不充分或不匹配时,算法可以帮助我们标记图像,巧妙的优化或模型重再利用有助于减少训练时间,精心设计的系统可以使整个处理过程实现自动化。

但终极问题在于:为什么?是否存在一个足够好的商业模型来实现这一切。

Deepfakes 这种技术有可能应用在哪些地方呢?

根据现在所了解到的信息,我们来谈一下它能够应用到的地方:

1.视频内容创作

其实好莱坞已经拥有人脸替换和重建技术,但花费远比我们要大得多,如果他们能用这项技术创作出好看的视频,那有可能改变未来市场对特效视频工作人员的需求。

2.社交应用

YouTube 上对 DeepFakes 制作的视频也是议论纷纷,不少人认为这项技术可以创作出优秀的文化作品。比如 Jib Lab 是一家已涉足该领域多年的公司,一直以来都在出售简单替换了视频中人脸的电子问候卡(这些视频都很有趣)。但更大的机会是创造下一波数字浪潮,毕竟单单视频滤镜这项技术就为 Instagram 和 Snapchat 吸引了大量用户,想想看将这项技术添加到这些社交应用上会引起多大的反响。

这方面的结果非常有趣,比如最近有个名为 StarGAN 的研究项目,就是利用类似技术为人物更换发型、肤色甚至面部表情。所以如果能大幅降低开发成本,此类应用会有比较大的市场空间。

3.名人面孔授权

想象一下,如果有一个名人可以为目标客户展示他们的衣服一个月,客户仅需要支付给代理商一定的费用和抓取一些名人的头像,点击一下按钮就有可能为这些名人、当红明星或者任何有名气的人带来一个新的收入渠道。

如图所示,或许以后明星不用亲自出面拍广告了,将自己的脸蛋使用权授权给客户即可。当然,这也有潜在的坏处,比如可能出现一大堆“抠图不自赏”之类的影视作品。

4.个人宣传

想象一下,当你在网上尽情玩耍时,看到了由你和你的亲朋好友拍成的广告,这是一种怎样的感觉?虽然目前来看这还有些不现实,但几年以后谁知道这会不会成为一种潮流呢?

结语

不管最先发布这项 AI 技术的那位匿名的 deepfakes 大神是谁,他都开启了人脸更换技术这个潘多拉魔盒,这项技术也会在未来对社会产生重要的影响。当然,如同每一种新技术的诞生,有人会赞同,有人会反对,我们也希望这门强大的技术不会被人们拿去作恶,毕竟用技术解放劳动力、造福人类才是我们研发技术的初衷。

附:本项目代码库:

https://github.com/goberoi/faceit

如果实在很想过过瘾,亲自试试替换人脸,但一时半会儿又不懂 AI 技术,可以看看我们分享的这篇低配版 Python 换脸大法: