分享篇 - DeepFake 换脸技术在移动端的应用
目录:
- 简介
- FaceSwap 介绍
- FaceSwap 原理
- 如何在移动端部署换脸
1. 简介
2018 年,AI 最火的应用是什么?
换脸当之无愧的霸榜!
Deepfake 是一种人工智能基础的人物图像合成技术。它用于使用称为 "生成对抗性网络"(GAN)的机器学习技术将现有图像和视频组合并叠加到源图像或视频上。现有视频和源视频的组合产生假视频,该视频显示在现实中从未发生过的事件中执行动作的一个或多个人。
各种换脸框架层出不穷,从 deepfake 到 faceswap,各种新奇的视频百花齐放,从哔哩哔哩到 porhub. 但是这些框架的入门门槛非常高,需要价格昂贵的显卡来跑机器学习的训练,同时需要搭建复杂的运行环境。直到 19 年,整个朋友圈都在 AI 换脸,ZAO 火了。ZAO,是隶属于 MoMo 公司的一款产品,使用门槛非常低,只需要一张清晰的人脸图片,即可成功换脸,并且效果还是可以的,虽然比不上系统训练几十个小时的成品,但是这个产出速度,达到这个效果已经相当赞了。
换脸在中国已经被禁了,因为其存在诸多人伦,安全等因素。其存在肖像权侵犯、隐私侵犯、不良视频传播、损害原创作品等问题。而且目前甚至连声音都可以模仿造假,
2. FaceSwap 介绍
笔者之前有基于 FaceSwap 做过换脸相关的应用,这边从技术的角度来分析一下换脸。
FaceSwap github: https://github.com/deepfakes/faceswap
我这边大致提炼下。
- 2.1 硬件环境
- 强大的 CPU,笔记本电脑的 CPU 通常可以运行该软件,但其速度不足以以合理的速度进行训练;
- 强大的 GPU,当前,完全支持 Nvidia GPU。 plaidML 部分支持 AMD 和 AMD 显卡;
- 强大的耐心。
- 2.2 支持的操作系统
window 7, window 8, window 10, linux, mac os,以上所有的系统都必须是 64 位,才能支持运行。
- 2.3 软件环境
git, python, Conda3 (需要在里面安装 CUDA, CUDNN, Tensorflow-gpu, FFMpeg 等), FaceSwap 客户端。
- 2.4 流程简介
抽取:在你设置的文件夹中,运行 pythonfaceswap.py extract。 这将从 src 文件夹中拍摄照片并将脸部提取到提取文件夹中,也可以是从视频中,视频的话就是使用 FFMpeg 将视频分割成一帧帧再处理。
训练:从你的设置文件夹中,运行 python faceswap.py train。 这将从两个包含两张面孔图片的文件夹中拍摄照片,并训练一个将保存在 models 文件夹中的模型(这个时间非常长,占整个流程的 90% 以上)。
转换:在你的设置文件夹中,运行 python faceswap.py convert。 这将从原始文件夹中拍摄照片,并将新面孔应用到修改后的文件夹中。
你可以通过命令行来执行这些操作,也可以使用 GUI 程序快速使用。
3. FaceSwap 原理
代码结构:
以下截图来自于当时项目前期的 ppt。
- 3.1 数据前处理
- 3.2 训练
- 3.3 转换
- 3.4 视频合成
- 3.5 出现的问题
我们使用 FaceSwap 部署完环境,在 GUI 上运行,对一些视频素材使用 N 卡机器训练了 20 几个小时,最终达到的效果并不理想。
原因有以下几个点:
1. 源视频问题:如果源视频色彩,清晰度,脸型,角度等和目标视频相差过大,最终出来的效果,在合成的图片边缘,角度出现了严重的不协调。
2. 耗时严重:经过各种调参,发现多卡并行与打卡运行,在 GPU 训练时,速度相差不大,查找原因是多卡需要更多的数据交换操作。
3. 内存占用高:内存占用非常高,导致显卡发热严重,最终使用脚本来控制显卡的使用率、功率,风扇温度等。
最终产出了一个数据:
4. 如何在移动端部署换脸
整个换脸过程包括数据前处理,训练,合成。其中训练和合成在后端来处理,而移动端只需要做数据前处理。
数据前处理包括:视频录制,视频转图片,图片旋转 & 缩放处理,人脸检测,关键点数据生成,人脸图像保存。
下面来一次对这几个步骤做一下分析。
- 4.1 视频录制