65.9K
CodeProject 正在变化。 阅读更多。
Home

使用深度伪造进行视频人脸迁移

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.75/5 (5投票s)

2021年3月24日

CPOL

6分钟阅读

viewsIcon

16086

downloadIcon

84219

在前一篇文章中,我概述了深度伪造的生成及其过程中涉及的要素。

深度伪造简介

深度伪造——利用深度学习将一个人的脸替换到视频中的另一个人身上——是当今人工智能最有趣令人担忧的应用方式之一。

虽然深度伪造可以用于合法目的,但也可以用于虚假信息传播。通过轻易地将某人的脸换到任何视频中,我们真的能相信我们的眼睛看到的吗?一个看起来很真实的政治家或演员做某件令人震惊的事情或说某些话的视频可能根本不是真的。

在本系列文章中,我们将展示深度伪造是如何工作的,以及如何从头开始实现它们。然后,我们将了解 DeepFaceLab,这是一个经常用于创建逼真深度伪造的全能型 Tensorflow 驱动工具。

了解如何创建 DIY 深度伪造模型、如何在云端容器上训练它们,以及如何使用 DeepFaceLab 作为你自己模型的替代方案。

深度伪造是现代人工智能最令人惊叹的应用之一。能够在视频中完整地——并且逼真地——将一个人的脸替换成另一个人的脸,这是人工智能能力的直观展示。

到目前为止,关于深度伪造的讨论大多是负面的。想象一个政治家或演员做某件事情或说某些话的逼真视频,而这些事情或话根本不是真的——这是病毒式传播且潜在危险的假新闻的理想场景。这就是深度伪造获得主流关注的原因。

幸运的是,并非所有深度伪造的应用都是坏的。深度伪造可以用作电影制作中的 CGI 替代品,用于在闪回场景中使演员年轻化,或者为新电影添加已故演员。想想看,尽管扮演原版《星球大战》中莫夫·塔金的演员已于 1994 年去世,但他在《侠盗一号》中却扮演了重要角色,或者《曼达洛人》中的卢克·天行者看起来比演员真实年龄年轻。深度伪造技术甚至可以在电影被翻译成不同语言时校正演员的口型。

这些任务传统上非常昂贵。通常需要一个 CGI 团队和几个月的时间才能完成。现在,借助人工智能和一些云 AIOps 专业知识,你可以以更低的成本获得出色的结果。

这一系列迷你文章将向你展示构建深度伪造模型和实现它们的基础知识,这样你就可以在不花费数百万美元雇佣 CGI 专家团队的情况下获得看起来不错的视频。

要充分利用本系列文章,你需要具备 Python、深度学习和计算机视觉的基本知识。如果你不是专家也没关系。在本系列文章中,我将尝试解释我们所涵盖的概念,并提供你可以找到更多信息的链接。随着我们前进,我会逐步叠加概念,以便你熟悉我们讨论的术语。

理解深度伪造背后的概念

虽然创建深度伪造听起来像是简单的换脸,但事实并非如此。有几个关键且复杂但并不那么明显的步骤。此外,深度伪造有许多变体:使某人年轻化、让某人说新内容,以及将某人的脸插入另一个人的头部,这些都只是其中的一些例子。

我们将分解所有这些想法并理解它们的共同点,但首先,让我们正确定义什么是深度伪造。正如你可能已经推断出的,“deep fake”(深度伪造)是“deep learning”(深度学习)和“fake”(伪造)这两个词的组合,它使用人工智能来生成虚假视频,并且不局限于换脸。例如,它可以用于将视频中的马变成斑马。

本系列文章将提供几个代码示例。我在我的 GitHub 仓库 中使用的笔记本和文件,以及所有完全交互式的 KaggleColab 笔记本

你可以在这里找到训练好的模型

深度伪造概述

通常,你需要至少两个视频来创建深度伪造:一个将是源视频,另一个将是目标视频(在某些情况下,你可能只想使用一个包含多个个体的视频并交换他们的脸,但这超出了本文的范围)。以换脸为例,第一个视频将包含你想提取面部表情的个体,第二个视频将包含你想使用的实际面部外观。

我们需要提取组成每个视频帧的所有图像,这个过程称为帧提取。这个过程的目的是从这些图像中提取人脸(人脸提取),以训练深度伪造模型(是的,两个模型。我稍后会解释原因)。一旦我们提取了所有的人脸,我们将使用这个脸集(人脸数据集)进行模型训练。然后,我们将它们与我们的帧和脸集一起用于执行换脸,即将生成的人脸插入原始帧。最后,我们需要合并帧来制作视频并获得深度伪造。

接下来的图表描述了使用 autoencoders 作为深度伪造生成器的过程(我将在文章后面深入探讨这一点),这也是我们将遵循的方法。如果你还不了解所有元素,请不要担心。我将详细解释你理解它们的功能和如何编码它们所需的信息,并指出我们正在进行哪个步骤。

在第一个图表(上面的那个)中,你会注意到帧提取器接收原始视频。这些视频包含我们要交换的面孔。接下来,它将这些视频的帧传递给人脸提取器,人脸提取器会将每一帧作为普通图像处理,并提取其中发现的人脸。这就是我们获得将用于训练模型的实际脸集的地方。为了简单起见,我们将其中一个模型在目标脸集上训练,另一个模型在源脸集上训练。

训练结束后,我们将“源”模型的输入块与“目标”模型的输出块混合,并用“源”人脸输入它们,最终得到具有“源”面部表情的“目标”人脸。

在上面图表的第二个图表中,换脸器使用混合模型的输出来将这些新生成的人脸插入到原始帧中对应的人脸之上。最后,帧合并器重新组装这些帧以获得我们的深度伪造视频。请记住,你可以根据你的目标进行略微不同的设置。例如,你可以只替换脸部的一部分、整张脸或整个头部。

下一篇文章 中,我将解释我们可以选择的不同方法来创建深度伪造。到时见!

© . All rights reserved.