「昨天我和马斯克开会了,正在聊一个两亿的项目。
」
要是你这么跟朋友说,她可能不信,但你可以甩给她一张 Zoom 的截图,她没准就信了。
实际上,马斯克才不会找你来聊项目,这都是 deepfake 生成的。数以万计的国外网友正在忍受在家办公的枯燥,Zoom 和 Skype 已经成为他们最厌倦的软件。
因此很多人迷上了 AI 换脸。现在,你可以用 Avatarify 将自己的脸替换成别人的脸,并且是实时的,在视频会议中的表现也十分流畅。目前这个项目已经登上了 GitHub 热榜,短短几天揽获 4000 多星。
项目地址:https://github.com/alievk/avatarify
如上图所示,作者将一张红色格子衫的照片导入,照片中的五官也会随着视频中真人的五官动作做出相应的变化。当挑起眉毛,眨眼睛,说话等等动作时,新的图像都会和真实的操作者保持一致。所以,在实时视频中换脸也就毫无违和感了,看起来真如同换了个人在开会!
当然,你也可以尝试一些更有意思的,比如看爱因斯坦眨眼睛,埃米纳姆的凝视,乔布斯挑眉毛,还有被玩坏了的蒙娜丽莎等等...... 只要你想,可以换成任何人。
项目作者之一 Ali Aliev 介绍说,Avatarify 使用了今年三月一篇 arXiv 论文的方法「First Order Motion」,无需事先对目标图像进行任何训练,就能用另一个人的视频来替换自己的图像。
论文链接:https://arxiv.org/pdf/2003.00196.pdf
在使用 Avatarify 时,借助 deepfake 等其他换脸技术,在想要交换的脸部上对算法进行训练即刻。一般来说需要几张你想要用的那个人的图像,在目标的相似类别上训练算法,该模型能支持实时的替换操作。
上图是「First Order Motion」的方法概述图,该框架由两个主要模块组成:「运动估计模块」和「图像生成模块」。运动估计模块的目的在于预测密集的运动场,此处假设存在一个抽象的参考坐标,并预估存在「从参考到源(from reference to source)」和「从参考到驱动(from reference to driving)」两种转换。因此可以独立处理源帧和驱动帧。做这样的处理是因为模型在测试时会接收从不同视频中采样的源图像帧和驱动帧的组,从视觉上来说可能会很不同。
第一步,研究者使用通过自监督方式学习的特征点获得的稀疏轨迹集来近似计算两种转换。与仅使用特征点位移相比,使用局部仿射变换对每个特征点附近的运动进行建模能够使得获得更多的变换。
第二步,一个密集的运动网络能将局部仿射组合起来,获得最终的密集运动场。除此之外,该网络还可输出遮挡遮罩,遮挡遮罩会显示 driving 的哪些部分可以通过变形源图像来重构,以及哪些部分该修复。
最终,生成模块渲染源对象的图像,这里使用了一个生成器网络,可根据密集运动对源图像进行变形,并修复源图像中被遮挡的部分。
下面我们就来看一下如何使用本项目实现在视频会议中换脸。
首先,我们需要一个网络摄像头。另外,想要流畅地运行这个换脸的程序,我们需要一张算力较强的 NVIDIA 显卡,以下是作者在不同硬件下运行的结果:
GeForce GTX 1080 Ti: 33 fps;
GeForce GTX 1070: 15 fps;
Mac OSX (MacBook Pro 2018; no GPU): 大约 1 fps。
可以看到,我们需要 1080Ti 同等算力的显卡才能做到实时运行。
当然,项目作者也指出,随着 GAN 与模型压缩技术的不断发展,我们有望在不久的将来在笔记本上也能实现类似的效果。
项目提供了在 Linux、Mac 与 Windows 上的安装方法,限于篇幅这里仅介绍 Linux 的版本(也是最方便容易的版本)。首先从以下地址下载训练后的网络权值,大小约为 716 MB。
接下来安装 CUDA,下载 Miniconda Python 3.7 版本并使用如下命令安装:
bash Miniconda3-latest-Linux-x86_64.sh
运行如下代码将项目克隆到本地,并安装相关依赖项(需要 sudo 权限):
git clone https://github.com/alievk/avatarify.git
cd avatarify
bash scripts/install.sh
将之前下载好的网络权重文件 vox-adv-cpk.pth.tar 放入 avatarify 目录下(注意不要解压)。
项目在 avatars 目录下预先储存了一些名人的头像,当然我们也可以把它换成我们自己喜欢的目标头像。为了达到较好的换脸效果,需要注意将目标头像裁剪为正方形。同时,以下图作为参考,目标头像的距离不能太远也不能太近。最好选择单一的背景,以最大程度上避免还原失真。
在打开 Skype 或 Zoom 之前,需要先运行本项目。以 Linux 系统为例,目前仅支持一个摄像头连接在/dev/video0 位置,程序会在/dev/video9 处创建一个虚拟摄像头。对应配置可在 scripts/settings.sh 脚本下修改。运行如下命令启动换脸程序:
bash run.sh
此时会弹出换脸程序和摄像头窗口,我们可以根据它调整自己脸部的位置并查看预览。
之后打开 Zoom,如下图所示,在设置中的 Video 选项下选择 avatarify,就在视频会议中成功将自己头像换成其他人的了。
Avatarify 目前还无法模仿声音,这件事你得自己来。不过已经有一些实时语音克隆工具面世了,「Real-Time Voice Cloning」这个项目最近也登上了 GitHub 热榜(https://github.com/CorentinJ/Real-Time-Voice-Cloning)。如果两者完美结合,有很多大胆的想法应该就可以实现了……
参考链接:https://www.vice.com/en_us/article/g5xagy/this-open-source-program-deepfakes-you-during-zoom-meetings-in-real-time
机器之心第二期「AI 开发者成长计划」系列公开课已正式开始,本期主题为《轻松上手开源框架 MindSpore》。该系列课程第一课将于 4 月 23 日 20:00 开讲,欢迎读者报名学习。