带你揭开AI换脸技术的原理

前不久,社交媒体平台上一款名为“蚂蚁呀嘿”的特效火爆全网,许多网友都将自己的照片导入换脸软件Avatarify中,照片便可以被算法驱动,生成一段表情夸张扭曲且跟着节奏晃动的换脸短视频。

魔幻的特效让这类的视频迅速侵袭社交平台,网友惊呼:简直就像捅了蚂蚁窝。

例如:马云、马化腾、马斯克等大佬们,正在集体演唱神曲《蚂蚁呀嘿》。

带你揭开AI换脸技术的原理

例如,李开复老师便友情上演了一首《Only You》。

带你揭开AI换脸技术的原理

这项技术可以完成在给定一张源图片和一个目标动作视频,将目标视频的表情和动作迁移到源图片上,使得源图片中的人物做出目标视频相同的表情动作。


Faceswap

这种换脸的算法,其实有很多。

例如 Faceswap 、DeepFaceLab、Faceswap-GAN 等等。

本文以 star 量最多的 Faceswap 为例,进行说明。

带你揭开AI换脸技术的原理


算法原理

Faceswap 是一个名为 deepfakes 的 Github 用户开源的项目。

Deepfake 就是“Deep Machine Learning”(深度学习)和“Fake Photo”(假照片)组合而成的。

早期技术可以追溯到 2018 年,当时在构建模型的时候使用了 Encoder-Decoder 自编解码架构。

而 Faceswap 算法,在此之上又引入 GAN(生成对抗网络)技术,显著提升了换脸的效果。

总体上,「Faceswap」换脸主要分为以下三个过程:

  • 人脸检测
  • 特征提取
  • 人脸转换

人脸检测

想要替换人脸,那首先得找到人脸的位置,这就需要用到人脸检测算法。

带你揭开AI换脸技术的原理

Faceswap 算法采用了 SSD 这类比较成熟的检测框架,同于提取面部图像。

与传统人脸检测略有不同的,Faceswap 算法需要裁剪的人脸边界框(bouding box, bbox)是正方形的,同时还会适当的向外扩充一些,以保证人脸都在 bbox 内。


特征提取

检测到人脸后,需要提取人脸的特征。

首先要做的就是,人脸关键点检测,也就是 landmark。

带你揭开AI换脸技术的原理

这些关键点,抽取了人脸的表情特征,同时大致描述了人脸的器官分布。

我们可以直接通过 dlib 和 OpenCV 等主流的工具包直接提取人脸的关键点。

当然,为了取得更好的定位精度,也可以使用 CNN 训练一个人脸关键点检测模型,简单好用。


人脸转换

人脸转换的思想,就是采用自编码器的原理。

简单来讲,就是将人脸图像压缩到短向量,再由短向量恢复到人脸图像。这些短向量包含了人脸的主要信息,例如该向量的元素可能表示人脸肤色、眉毛位置、眼睛大小等等。

带你揭开AI换脸技术的原理

所以如果我们用某个编码器学习所有人,那么它就能学习到人脸的共性;如果再用某个解码器学习特定的某个人,那么就能学习到这个人的特性。

简单而言,当我们用通用编码器编码人脸 A,再使用特定解码器 B 解码短向量,那么就能生成出拥有 A 的人脸表情,但却是 B 人脸的图像。

就好比,你摆出一个表情,我根据你睁眼的大小,嘴巴咧开的大小等面部特征,模仿出你的表情。

我们表情一样,但长相不一样。

人脸转换,除了自编码器的方法,还有一种 GAN 方法。

GAN 会利用提取的人脸特征点,使用生成器直接生成对应的目标人脸图像,这跟 StyleGAN 人脸生成算法很类似,但不同的是需要生成指定表情的人脸。

在生成的图片后,会接一个判别器,判断图片的逼真程度。

带你揭开AI换脸技术的原理

上述算法都是针对单张图片而言的,对于视频而言,就是多了一个视频拆分成图片,图片拼接成视频的过程。

DeepFakes 技术发展已久,2020 年有一篇发表的综述论文,包含了各种 DeepFakes 算法的概述,想了解更多的读者,可以去“啃”一下论文了。

论文地址:https://arxiv.org/pdf/2001.00179.pdf


预处理和后处理

大致思路就是这样,里面还有很多细节,我们称之为 Tricks ,这就需要通过阅读源码去学习了。

比如,在进行提取人脸特征之前,需要进行图像的预处理。

对数据进行规范化(Normalization),使训练的图像的分布信息尽可能相近:

带你揭开AI换脸技术的原理

训练的数据集是分为 A 数据集和 B 数据集的,如上图,A 数据集为川普,B 数据集为凯奇。

我们可以将 A 数据集(川普)加上两者数据集的平均差值(RGB三通道差值)来使两个输入图像图像的分布尽可以相近,这样我们的损失函数曲线下降会更快些。

用代码表示就是:

images_A += images_B.mean(axis=(0, 1, 2)) - images_A.mean(axis=(0, 1, 2))

再比如,换脸之后,需要进行图像的后处理。

为了是生成的人脸效果更加,会进行诸如边缘融合、色彩均衡等处理方法。

想要了解算法背后的实现方法,那就得耐着性子看源码了。

最后我们再简单解释一下换脸的基本原理:提取两个例子,分为A&B,进行以下三步:1.人脸侦测和识别。2.确定变换矩阵。3.人脸替换。对于视频中的每一帧信息重复以上操作直至结束即可!


声明:部分内容来源于网络,仅供读者学习、交流之目的。文章版权归原作者所有。如有不妥,请联系删除。
本文直接来源:新机器视觉

最新文章