DeepFaceLab: A simple, flexible and extensible face swapping framework 一个简单、灵活和可扩展的人脸交换框架
DeepFaceLab: A simple, flexible and extensible face swapping framework
一个简单、灵活和可扩展的人脸交换框架
文章目录
- DeepFaceLab: A simple, flexible and extensible face swapping framework
-
- 一个简单、灵活和可扩展的人脸交换框架
- 前言
-
- 核心
-
- 提取(Extraction)
-
-
- 人脸定位:人脸检测提取的第一步是在给定的文件夹中找到目标人脸:src和dst。DFL使用S3FD [34]作为其默认人脸检测器。显然,你可以为你指定的目标选择任何其他的人脸检测算法来代替S3FD,即视网膜人脸[5],MTCNN [33]。
- 人脸对齐:DFL提供了两种典型的面部标志提取算法来解决“能够随着时间的推移保持稳定”的人脸标志算法问题:(A)基于热图的面部标志算法2DFAN [2](对于具有正常姿势的面部)和(b)具有3D面部先验信息的PRNet [6](对于具有大欧拉角(偏航、俯仰、滚动)的面部,例如具有大偏航角的面部,意味着面部的一侧看不见)。
- 人脸分割:人脸分割阶段采用了人脸分割网络TernausNet,来分割出头发、眼镜、手部这些可能会对人脸的变换有影响的点。最后生成一个人脸区域的mask,用于决定最后的生成部分。
-
- 训练(Training)
-
- 转换(Conversion)
- 项目实践
-
-
- Step 1:
-
-
- 1.安装方法:
- 2.目录简介:
-
- Step 2:
-
- 项目开始
- 1.提取图像(EXTRACT IMAGES)
-
-
- step1:doc(2):extract images from video data_src
- 从视频数据src中提取图像 每帧按照png图像处理
- step2: doc(3):extract images from video data_dst FULL FPS
- 从视频数据dst 中提取图像 每帧按照png图像处理
-
- 2.提取面部设置(EXTRACT FACESETS)
- 3.提取后查看人脸集
- 4.训练(TRAINING)
- 5.合并(MERGING)
- Step 3:项目总结
-
-
-
- 项目进行过程中遇到的问题
- 问题解决
- 资料索引
-
-
-
- 个人感悟
前言
本次工作室项目考核,本小组选题为DeepFaceLab: A simple, flexible and extensible face swapping framework
经过对论文的简单的进行结构性分析并且查阅相关资料对该项目进行复现。通过更加深入的了解,DeepFaceLab(本文此后均简写为DFL)
是GitHub上一个很火热的换脸开源项目,首先我们将进行对论文中描述的工作原理进行介绍。
【注:本次项目所有代码、软件等资源均来自 https://github.com/iperov/ DeepFaceLab/】。
核心
换脸,即训练模型要从src中的人脸换到dst目标人脸上
提取(Extraction)
提取是人脸识别的第一步,它包含很多算法和处理部分,即人脸检测、人脸对齐和人脸分割。在提取过程之后,用户将从您的输入数据文件夹中获得具有精确遮罩和面部标志的对齐的面部,src在此用于说明。另外,由于DFL提供了多种人脸类型(即半脸、全脸、全脸),代表了提取的人脸覆盖区域。除非另有说明,否则默认取全脸。
人脸定位:人脸检测提取的第一步是在给定的文件夹中找到目标人脸:src和dst。DFL使用S3FD [34]作为其默认人脸检测器。显然,你可以为你指定的目标选择任何其他的人脸检测算法来代替S3FD,即视网膜人脸[5],MTCNN [33]。
人脸对齐:DFL提供了两种典型的面部标志提取算法来解决“能够随着时间的推移保持稳定”的人脸标志算法问题:(A)基于热图的面部标志算法2DFAN 2和(b)具有3D面部先验信息的PRNet 6。
人脸分割:人脸分割阶段采用了人脸分割网络TernausNet,来分割出头发、眼镜、手部这些可能会对人脸的变换有影响的点。最后生成一个人脸区域的mask,用于决定最后的生成部分。
训练(Training)
训练模型在换脸技术中起到了至关重要的作用,论文中提到实现DFL在不要求对齐的src和对齐的dst的面部表情严格匹配的情况下,旨在设计简单有效的算法解决这一不成对的问题,同时保持生成的人脸的高保真度和感知质量。
两个共享权重的Encoder和Inter,两个不同的decoder达到最终的换脸的目的。
个人理解:src和dst如何能够做到匹配?首先对两个人脸通过编码器(encoder)编码,通过中间的转换送入到解码器(decoder)中对二者进行匹配,最终进入到Real or Fake的问题。
转换(Conversion)
以src2dst和DF结构为例,说明DFL的转换阶段
生成面部重演图像:将src通过encoder和inter得到特征,而后通过dst的decoder得到重演后的人脸,此时得到的生成并且对齐的正脸。
对齐:将上一步生成的人脸以及对应的mask调成之前的状态。
融合:先将上一步得到的脸部区域的颜色转换至与目标图像的面部颜色相一致,下一步将采用播送融合得到融合后的图像。
锐化:使用预训练好的人脸超分网络对图像进行锐化。
项目实践
Step 1:
软件获取与安装
软件获取:
https://github.com/iperov/DeepFaceLab(依个人使用安装)
1.安装方法:
选择安装路径后进行安装解压
2.目录简介:
软件解压后出现DeepFaceLab_NVIDIA文件夹,点击workspace文件夹
-
data_dst.mp4为目标文件
-
data_src.mp4为源文件
软件在运行的过程中会在文件夹中产生aligend的文件用来防止提取的人脸图片
Step 2:
项目开始
1.提取图像(EXTRACT IMAGES)
step1:doc(2):extract images from video data_src
从视频数据src中提取图像 每帧按照png图像处理
step2: doc(3):extract images from video data_dst FULL FPS
从视频数据dst 中提取图像 每帧按照png图像处理
2.提取面部设置(EXTRACT FACESETS)
doc(4):data_src faceset extract 提取src面部设置
doc(5):data_dst faceset extract提取dst面部设置
3.提取后查看人脸集
doc(4.1):data_src view aligned result提取后查看人脸集
doc(5.1):data_dst view aligned result提取后查看目标集 可以在这其中删除不需要的面孔
4.训练(TRAINING)
doc(6):train Quick96 开始训练深度假模型
使用默认设置,尝试运行训练的第一个迭代
训练预览窗口打开
图表显示了模型训练的准确度 这些线代表的损耗值在整个过程中接近零,线越低,结果越好
其中,最后一列可以看到换脸的进展/拟合度
5.合并(MERGING)
doc(7):merge Quick96 合并启动深层伪造视频
显示键盘命令映射 使用ws键将腐蚀遮罩值erode mask更改为20,使用ed键将模糊蒙版值 blur mask提高到100;shift + / 处理剩下的帧;. + / 合并达到100%关闭
doc(8):merged to mp4 具有目标音频的视频文件
合成完毕后查看文件夹workspace(合成后的视频保存在该目录下)
效果演示:
若要查看完整视频,链接https://www.bilibili.com/video/BV1Ur4y1A7Tm/
Step 3:项目总结
DeepFaceLab作为一个简单、灵活、可扩展的换脸框架,通过我对本次项目体验总结了DFL以下几个特点:
- 更轻便:对比之前版本的DF,DFL在训练过程中的时间性能指标减少
- 更好用:不再只面向专业人员,体现用户优先
项目进行过程中遇到的问题
- 论文学术性强,对于现阶段而言较难理解
- 硬件设备性能存在不足
- 查阅资料
问题解决
- 对论文概况了解后,从“前人”提供的思路中获得新的理解
- 采用硬件条件更合适的设备
- 穿梭往来于国内外网站,找准资料
资料索引
(1)https://blog.csdn.net/DeepFaceLabs/article/details/102933486/?ops_request_misc=&request_id=&biz_id=102&utm_term=DeepFaceLab:%20A%20simple,%20flexibl&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-6-102933486.pc_search_result_no_baidu_js&spm=1018.2226.3001.4187
(2)https://blog.csdn.net/weixin_41605888/article/details/111039355?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&dist_request_id=b31c9a8a-b59d-4f2e-a46e-135e01c7dbd4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control
(3)https://blog.csdn.net/u011145574/article/details/89066965?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.control
(4)https://mrdeepfakes.com/forums/thread-guide-deepfacelab-2-0-guide
(5)https://github.com/deepfakes/faceswap
(6)https://www.youtube.com/watch?v=lSM-9RBk3HQ
(7)原论文:DeepFaceLab: A simple, flexible and extensible face swapping framework
个人感悟
刚开始接触这个项目会因为没有机器学习知识的基础着急,但是在YouTube上我找到了更清晰的思路、获得了更深层的见解。
可能最大的困难就是看论文,这一次的实践也在提醒我更努力去学习英语知识,夯实基础。最让我开心的是项目开始着手,因为这片领域的未知性,我乐意去尝试和探索,当然中间也有一些惨不忍睹的事情发生,但是看到最后合成的视频我明白一个事情,之前的事情都不是最难的,难的是开始动手,我开始项目也比较拖拉,因为看不懂论文,但是最后还是逼着自己去做了。当然,过程很麻烦,结果就是“真香”!