重新梳理DeepFaceLab(DeepFake)最近动态:简要且全面的信息

本文主要是介绍重新梳理DeepFaceLab(DeepFake)最近动态:简要且全面的信息,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

DeepFaceLab相关文章

一:《简单介绍DeepFaceLab(DeepFake)的使用以及容易被忽略的事项》
二:《继续聊聊DeepFaceLab(DeepFake)不断演进的2.0版本》
三:《如何翻译DeepFaceLab(DeepFake)的交互式合成器》
四:《想要提高DeepFaceLab(DeepFake)质量的注意事项和技巧(一)》
五:《想要提高DeepFaceLab(DeepFake)质量的注意事项和技巧(二)》
六:《友情提示DeepFaceLab(DeepFake)目前与RTX3080和3090的兼容问题》
七:《高效使用DeepFaceLab(DeepFake)提高速度和质量的一些方法》
八:《支持DX12的DeepFaceLab(DeepFake)新版本除了CUDA也可以用A卡啦》
九:《简单尝试DeepFaceLab(DeepFake)的新AMP模型》
十:《非常规的DeepFaceLab(DeepFake)小花招和注意事项》
土:《可以提高DeepFaceLab(DeepFake)合成最终视频速度的方法》
王:《偶然看到DeepFaceLab(DeepFake)在2023年的新动向》—《测试通用遮罩》

文章目录

  • (零)基本概念
  • (一)版本选择
    • (1.1)原版DeepFaceLab
    • (1.2)ICE版DeepFaceLab
  • (二)数据准备
    • (2.1)源脸数据集(data_src)
      • (2.1.1)基本
      • (2.1.2)进阶1:增强脸部
      • (2.1.3)进阶2:角度分布
      • (2.1.4)进阶3:XSeg遮罩
      • (2.1.5)进阶4:识别点/遮罩确认
    • (2.2)目标脸(data_dst)
      • (2.2.1)基本
      • (2.2.2)进阶1:视频帧降噪
      • (2.2.3)进阶2:XSeg遮罩
      • (2.2.4)进阶3:识别点/遮罩确认
  • (三)训练模型
    • (3.1)新模型vs复用模型
    • (3.2)模型属性
      • (3.2.1)模型类型
      • (3.2.2)模型架构
      • (3.2.3)模型参数
    • (3.3)训练参数
    • (3.4)ICE版本新训练参数
    • (3.5)训练过程
      • (3.5.1)命令行窗口
      • (3.5.2)预览窗口
    • (3.6)阶段阶段
      • (3.6.1)预训练(可选)
      • (3.6.2)泛化/翘曲训练
      • (3.6.3)归一化/常规训练
      • (3.6.4)增强/GAN 训练(可选)
    • (3.7)训练成果
  • (四)合成
    • (4.1)合成参数
    • (4.2)覆盖模式+遮罩对比
  • (五)合成的图片转视频
  • (六)总结

(零)基本概念

DeepFaceLab 简称 DFL,可以将某人的面孔作为来源(source,src),替换目标(destination,dst)视频上另一个人的面孔。
由于发展的时间有点长,之前记录的许多方面有变化,决定重新拉通整理下。

(一)版本选择

(1.1)原版DeepFaceLab

伊佩罗夫的原版DFL(GIthub仓库)发布包最后停留在2021年11月20日。
具体Windows的发布包可通过磁力链接下载。
或者:magnet:?xt=urn:btih:e7ffdcb4ada863de9504f2a741f924dcd56ab84a

  • NVIDIA RTX 2000系列和更旧的显卡:DeepFaceLab_NVIDIA_up_to_RTX2080Ti_build_11_20_2021.exe
  • NVIDIA RTX 3000系列和更新的显卡:DeepFaceLab_NVIDIA_RTX3000_series_build_11_20_2021.exe
  • 其它显卡:DeepFaceLab_DirectX12_build_11_20_2021.exe

如果阅读英文困难,也有许多不错的汉化版本,甚至有整合版,界面版,可以自己搜。

(1.2)ICE版DeepFaceLab

下载,变化,简要情况参考🔗这里,具体信息请参考作者的原发布贴。
简单说就是训练得更好更快,并且支持512的遮罩。
仍在开发中,发布的版本有:DF_ICE_1.31cDF_ICE_1.601

(二)数据准备

(2.1)源脸数据集(data_src)

由于来源与目标有时容易混淆,所以暂定前提:让代替志玲姐出现在影视作品中。
那么你的脸,就是来源 = source = src 。
下面基本的步骤是必须要的,进阶部分能做就做。

(2.1.1)基本

最终是形成你的《多角度多光影妆容尽量一致面部少遮挡源脸数据集 (aligned faceset)》。

分辨率一般是[512x512],小了细节可能不够,大了模型分辨率跟不上。
根据需要,源脸数据集可以多次补充合并。
最终的数量如果分布均匀大概2000-4000就够了,当然6000-8000也可以。
少了不像,多了相对训练速度会降低。

  • (A)简单的办法可以准备你的一段影片data_src.mp4,放入工作目录\DFL_Path\workspace中。
    接着提取每一帧图片:2) extract images from video data_src.bat
    (A)更好的方法是提前准备各种照片,不限于普通照片,截取自单段视频的图片,效果不错的Stable-Diffusion生成的照片,你的双胞胎姐弟,长得像你的明星😄???,总之素材多更好。
    💡提取的每一帧图片,或者你准备的图片都放在\DFL_Path\workspace\data_src\目录中。

  • (B)然后从图片中提取脸部数据集:4) data_src faceset extract.bat
    (B)或者使用 快速切脸工具,参考🔗这里。不仅快很多,宁可识别不出也不识别出错,适合源脸。
    💡提取的数据集,会放在\DFL_Path\workspace\data_src\aligned\目录中。

  • (C)检查和去掉错误的,以及不是源脸的图片(比如照片中其它人/路人也被识别提取了)。删掉这些错误脸,只留你自己的脸。
    在这里插入图片描述

  • (D)几千张数据集图片,打包了更方便拷贝和处理:4.2) data_src util faceset pack.bat
    💡打包后大堆脸部图片会变成单个\DFL_Path\workspace\data_src\aligned\faceset.pak文件。

(2.1.2)进阶1:增强脸部

脸部数据集来源比较多的话,可能某些模糊某些清楚,某些平滑某些噪点多。
最好是有选择的增强图片,比如图片清晰但噪点多的仅去噪。
图片不太清晰的可以锐化和恢复脸部。如何优化/优化程度都需要自己权衡。

⚠️不要用AI来"脑补"太多的内容,比如:SD-WEBUIremini,修复后的图片如果五官移位需要重新识别脸部。
⚠️也不要修复得人都不像了,或者脸上油光满面——效果请用自己的眼睛(脑袋)来判断。

  • 简单办法用DFL自己的增强命令:4.2) data_src util faceset enhance.bat,效果不算好。

  • 更好的办法是用别的软件优化脸部数据集图片。
    1)先保存已识别的面部特征点信息:4.2) data_src util faceset metadata save.bat
    2)用比如 Topaz Photo AI 等软件优化脸部数据集图片。
    3)再恢复已识别的面部特征点信息:4.2) data_src util faceset metadata restore.bat
    脸部增强示例

(2.1.3)进阶2:角度分布

通常来说我们正面的照片较多,太仰视俯视,左右侧面比较少。
所以我们需要人为的找到这些角度的照片,并识别为源脸数据集。

  • 以前我们只能通过:4.2) data_src sort.bat 功能,按仰俯排序,左右排序,大概估计角度情况。
  • 现在有了 Aligned合并工具,可以按角度二维排序便于添加删除角度。参考🔗这里。很容易看出缺少的角度。
    角度分布

(2.1.4)进阶3:XSeg遮罩

如果你的源脸数据集,每张脸都无遮挡(包括额头),那么可以不用XSeg遮罩(跳过本小节内容)。
💡有脸就有遮罩。就算没有/不用XSeg遮罩,也有脸部识别的遮罩(范围)。

但是如果源脸数据集中的图片,有比如麦克风,帽子,眼镜,发型,遮挡了部分脸部,就一定要应用遮罩了。
针对性的画遮罩并训练,效果最好,这部分可以搜其他教程一类。
但是懒人可以不自己画遮罩和训练啊,仅用别人成熟的遮罩,效果也不错,参考:🔗这里。

使用:5.XSeg) data_src trained mask - apply.bat 将遮罩写入你的源脸数据集。

例子截图请看下面,目标脸部分章节。

XSeg遮罩在合成时还有个用法,请参考合成部分章节。

(2.1.5)进阶4:识别点/遮罩确认

检查脸部数据集图片,有时会看到某些脸明显不正确,或者脸是其它人,前面说过删掉它们就好了。

但是有些脸图片看上去正确,其实五官识别差得很远(特征点在脸上的位置不对)。
这种情况更容易出现在极限角度的脸上。
对于源脸,识别点错误必须更正(实在更正不了就删掉)。
如果遮罩有错误,可以把有问题的脸留下,单独去除遮罩:5.XSeg) data_src trained mask - remove.bat

可以使用 快速切脸工具导出遮罩和特征点,参考🔗这里。
或者用 MVE工具 检查脸特征点和遮罩情况,编辑不正确的特征点,参考🔗这里。新版🔗这里。

例子截图请看下面,目标脸部分章节。


💖 至此,源脸数据集就准备好了。


(2.2)目标脸(data_dst)

由于来源与目标有时容易混淆,所以暂定前提:让你代替志玲姐出现在影视作品中。
那么志玲姐的脸,就是目标 = destination = dst
下面基本的步骤是必须要的,进阶部分能做就做。

(2.2.1)基本

和源只需要脸部数据集不一样,目标需要保留视频+每一帧图片+脸部数据集,才能最后合成:

  1. 准备志玲姐的一段影片data_dst.mp4,放入工作目录\DFL_Path\workspace中。
    然后生成每一帧图片:3) extract images from video data_dst FULL FPS.bat
    💡提取的每一帧图片都放在\DFL_Path\workspace\data_dst\目录中。

  2. 提取每帧图像,建议:5) data_dst faceset extract + manual fix.bat
    先自动提取,最后手动提取自动找不到的脸。
    💡提取的数据集,会放在\DFL_Path\workspace\data_dst\aligned\目录中。

  3. 得到了图像生成的目标脸数据集 (aligned faceset)后。
    同理检查,删掉错误的脸,删掉不想换(不是志玲姐)的脸。
    检查完成后也可以打包。

(2.2.2)进阶1:视频帧降噪

将视频转为每一帧的图片后,提取目标脸部之前,最好根据实际情况降噪。
执行:3.optional) denoise data_dst images.bat,根据目标视频的情况,选择降噪强度(默认7)。
呃,图是用别人的,就当她是志玲姐吧。
不同的降噪级别

(2.2.3)进阶2:XSeg遮罩

如果你的目标脸数据集,每张脸都无遮挡(包括额头),那么可以不用XSeg遮罩(跳过本小节内容)。

和源脸同理,如果目标脸数据集也有被遮挡的部分,最好也应用遮罩。
使用:5.XSeg) data_dst trained mask - apply.bat 将遮罩写入你的目标脸数据集。

面部识别范围有话筒遮挡:
在这里插入图片描述

遮罩完美排除多余的部分:
在这里插入图片描述

(2.2.4)进阶3:识别点/遮罩确认

和源脸同理,可以进行同样的检查。
问题是目标帧也许很多很多,逐一检查几万张太痛苦了,
而且稍微有错误的影响没有源那么大(视频剪辑cut掉嘛)。所以……😄

PS:下图不是dst,只是用志玲姐举例:
看上去识别点和遮罩都挺正常的。MVE参考🔗这里。
在这里插入图片描述

新版MVE(0.8.2),彩色识别点(Landmark):参考🔗这里。
在这里插入图片描述


💖 至此,目标脸视频+视频帧图片+脸数据集就准备好了。


(三)训练模型

训练啥,训练的对象当然是模型(model),输入数据是源和目标。
参考资料:🔗这个网站,以及🔗这个帖子,还有🔗这个帖子。

根据模型类型不同,训练命令为:6) train XX模型类型.bat 这样。

(3.1)新模型vs复用模型

也就是说有了 源脸数据集+目标脸数据集,就可以训练模型了。
我们可以选择:

  • 从0开始训练自己模型——慢,但所有参数都可以自己设置。
  • 或者复用自己之前的模型/别人的模型or预训练模型——节省时间,参考🔗论坛。
    如果不想花钱买,也可以用别人免费共享的模型,比如🔗这里。

(3.2)模型属性

模型属性是新建模型时需要确定的参数,后期不能更改。
如果你复用了模型,则可以直接跳过整个模型部分的参数设置。

(3.2.1)模型类型

之前的各种老模型都被移除了,
原版到目前为止保留三种类型:

  • Quick96:Predefined model; useful for testing. DF-UD, Full Face, Resolution: 96, Batch size: 4
    简单尝试快速出结果,因为有训练数据,但分辨率太低,量变引起质变,最终效果不怎么好。

  • SAEHD:Sparse Auto Encoder HD. The standard model and trainer for most deepfakes.
    正常都用这个,”别人的模型“大多也是这个类型。

  • AMP:Amplifier. Destination facial expressions are amplified to the source.
    用于实时的DFLive效果比较好。

  • MulanDF-ICE版本提供的新的独创训练架构-木兰,有多种算法,ICE-V3,V4,V7。
    就是速度更快,对高分辨率、新40显卡支持更好,细节学习比对抗网络更强,支持多层遮罩合成(不过我没试过呀)。
    具体请看ICE版发布原帖吧。

(3.2.2)模型架构

假设我们选了SAEHD,下一步就需要选择架构。
如果看别人的模型,会经常看到df-uddf-uliae-u等等名称,这就是架构和架构的附加参数。

  • DF:Strict face interpretation without morphing. Most accurate and true to source data. Works best when the source and destination have similarly shaped faces and color. Placement of facial features (eyes, mouth, nose, etc.) can differ between source and destination. Works better on frontal shots; possible worse result on profiles. Source faceset must have ample coverage of destination pitch, yaw, and color ranges.
    极简描述:更像源脸。

  • LIAE:Lenient face interpretation with some morphing. Adapts more to destination face. Will adapt to faces with dissimilar shape and color. Placement of facial features may be slightly morphed to fit destination face.
    Possible better result on extreme angles and missing data. More replication of destination color and lighting conditions.
    极简描述:光影更自然。

选择模型架构的同时需要确定架构参数。
模型可以带或不带以下几个选项:

  • U:Increases similarity to source face. Requires more VRAM.
    提升生成脸细节一致性。
    可能导致训练不稳定或收敛速度慢。可能会破坏图像的全局颜色和对比度的一致性。
    架构画面略显普通,缺少灵魂(好严重的指控)。

  • D:Improve performance by effectively doubling the resolution using the same computation cost. Requires longer training and recommended use of a pretrained model. Resolution must be changed by multiples of 32 (other variants: 16).
    源于"depth_to_space" 深度换尺寸算法,
    提高解码图像分辨率,减少参数量和计算量,提高模型的效率和性能。利用深度维上的信息,增强图像细节和质量。
    增加了整体训练时间,可能影响图像的连续性和完整性,图像上下帧不一致,帧闪烁和跳跃。

  • T:Increases similarity to source face.
    为啥没有任何信息说明呢。

(3.2.3)模型参数

  • 模型分辨率:[128] Resolution ( 64-640 ?:help ) :
    More resolution requires more VRAM and time to train. Value will be adjusted to multiple of 16 and 32 for -d archi.
    更大的分辨率需要更多的显存,也需要更长时间来训练。分辨率决定上限,但不是绝对的分辨率越高就越清晰。
    默认的128确实有点小,但是太大我们的显卡又难以承受,需要根据自己显卡来定分辨率。

  • 人脸类型:[f] Face type ( h/mf/f/wf/head ?:help ) :
    1)head:脑袋,包括头发到脖子,使用3D的标记点,需要XSeg应用到源和目标脸数据集。
    2)wf:whole face,整脸,包括额头到下巴以下。
    3)f:Full Face,全脸,从眉毛上方到下巴.。
    4)mf:Mid Face(旧类型),中脸,覆盖眉毛到下巴,比hf多30%脸颊区域。
    5)h:Half Face(旧类型),半脸,覆盖眼睛到嘴巴,较少的脸颊区域。
    脸部大小对比

  • 自动编码器维度:[256] AutoEncoder dimensions ( 32-1024 ?:help ) :
    All face information will packed to AE dims. If amount of AE dims are not enough, then for example closed eyes will not be recognized. More dims are better, but require more VRAM. You can fine-tune model size to fit your GPU.
    根据你的显卡显存大小设置这些参数,用默认也可以。

  • 编码器维度:[64] Encoder dimensions ( 16-256 ?:help ) :
    More dims help to recognize more facial features and achieve sharper result, but require more VRAM. You can fine-tune model size to fit your GPU.

  • 解码器维度:[64] Decoder dimensions ( 16-256 ?:help ) :
    More dims help to recognize more facial features and achieve sharper result, but require more VRAM. You can fine-tune model size to fit your GPU.

  • 解码遮罩维度:[22] Decoder mask dimensions ( 16-256 ?:help ) :
    Typical mask dimensions = decoder dimensions / 3. If you manually cut out obstacles from the dst mask, you can increase this parameter to achieve better quality.

(3.3)训练参数

训练参数是每次训练前可以修改的。
界面显示保存啥的就略过吧。

  • 随机翻转SRC脸:[n] Random flip SRC ( y/n /?:help ) :
    Random horizontal flip SRC faceset. Covers more angles, but the face may look less naturally.
    不要开启,特别是脸部不对称,比如一边有痣,或者金城武的鼻子。

  • 随机翻转DST脸:[y] Random flip DST ( y/n /?:help ) :
    Random horizontal flip DST faceset. Makes generalization of src->dst better, if src random flip is not enabled.
    通常都开启。

  • 批量大小:[4] Batch size ( /?:help ) :
    Larger batch size is better for NN’s generalization, but it can cause Out of Memory error. Tune this value for your videocard manually.
    .
    批量大小是DeepFaceLab中最重要的选项之一,因为它决定了每次迭代可以处理的图像数量。较大的批大小将导致更好的模型泛化和更快的训练(更少的迭代)。非常低的批量大小 (<=4) 会慢得多,并且模型可能难以概括面部特征、颜色等。非常高的批量大小最终可能会导致性能回报降低,创作者之间对“最佳批量大小”存在争议。建议将批大小至少设置为 4,最好在 8-16 范围内。
    .
    可以随时更改批大小,并且有各种模型选项使用或多或少的系统资源,迫使您更改批大小。此外,如果选择使用预训练模型,则可能需要更改批大小以在硬件上工作。您可以下载在功能更强大的系统上生成的预训练模型,降低批大小,并使用自己的图像进行训练。

  • 眼睛和嘴部优先:[n] Eyes and mouth priority ( y/n ?:help ) :
    Helps to fix eye problems during training like “alien eyes” and wrong eyes direction. Also makes the detail of the teeth higher.
    先开着,后面可以间歇性的开/关交替训练。
    打开的时候loss会显得很高,关闭后loss降低很多,但是不用操心这个,我们看的是效果而不是loss数值。

  • 侧脸训练权重均衡:[n] Uniform yaw distribution of samples ( y/n ?:help ) :
    Helps to fix blurry side faces due to small amount of them in the faceset.
    帮助模糊的侧脸训练,因为通常数据集中侧脸较少。

  • 遮罩边沿模糊:[n] Blur out mask ( y/n ?:help ) :
    Blurs nearby area outside of applied face mask of training samples. The result is the background near the face is smoothed and less noticeable on swapped face. The exact xseg mask in src and dst faceset is required.

  • 模型优化器放置于GPU:[y] Place models and optimizer on GPU ( y/n ?:help ) :
    When you train on one GPU, by default model and optimizer weights are placed on GPU to accelerate the process. You can place they on CPU to free up extra VRAM, thus set bigger dimensions.

  • 使用信仰优化器:[y] Use AdaBelief optimizer? ( y/n ?:help ) :
    Use AdaBelief optimizer. It requires more VRAM, but the accuracy and the generalization of the model is higher.

  • 使用瘦化神经网络:[n] Use learning rate dropout ( n/y/cpu ?:help ) :
    When the face is trained enough, you can enable this option to get extra sharpness and reduce subpixel shake for less amount of iterations. Enabled it before disable random warp and before GAN.
    这是ICE版本的修改,我记得原本是通过随机的丢弃学习率,来避免卷积算法遇到的马鞍效应(学习率难以下降)。
    训练足够之后开启,先开启这个,再关闭随机扭曲素材和打开对抗网络

  • 随机扭曲素材:[y] Enable random warp of samples ( y/n ?:help ) :
    Random warp is required to generalize facial expressions of both faces. When the face is trained enough, you can disable it to get extra sharpness and reduce subpixel shake for less amount of iterations.
    前期需要开启,配合小的BS(比如4),快速成型。
    后期需要关闭,训练足够之后。

  • 随机应用色调/饱和度/亮度:[0.0] Random hue/saturation/light intensity ( 0.0 … 0.3 ?:help ) :
    Random hue/saturation/light intensity applied to the src face set only at the input of the neural network. Stabilizes color perturbations during face swapping. Reduces the quality of the color transfer by selecting the closest one in the src faceset. Thus the src faceset must be diverse enough. Typical fine value is 0.05
    开点对色彩有好处。

  • 对抗网络强度:[0.0] GAN power ( 0.0 … 5.0 ?:help ) :
    Forces the neural network to learn small details of the face. Enable it only when the face is trained enough with lr_dropout(on) and random_warp(off), and don’t disable. The higher the value, the higher the chances of artifacts. Typical fine value is 0.1
    最后开,用来生成纹理细节。

  • 真脸强度:[0.0] ‘True face’ power. ( 0.0000 … 1.0 ?:help ) :
    Experimental option. Discriminates result face to be more like src face. Higher value - stronger discrimination. Typical value is 0.01 . Comparison - https://i.imgur.com/czScS9q.png
    此项参数只有DF架构的模型才能看到。开得越大,越像源脸(即便很不自然了)。慎重!!!
    在这里插入图片描述

  • 人脸风格学习强度:[0.0] Face style power ( 0.0…100.0 ?:help ) :
    Learn the color of the predicted face to be the same as dst inside mask. If you want to use this option with ‘whole_face’ you have to use XSeg trained mask. Warning: Enable it only after 10k iters, when predicted face is clear enough to start learn style. Start from 0.001 value and check history changes. Enabling this option increases the chance of model collapse.
    不用开。

  • 背景风格学习强度:[0.0] Background style power ( 0.0…100.0 ?:help ) :
    Learn the area outside mask of the predicted face to be the same as dst. If you want to use this option with ‘whole_face’ you have to use XSeg trained mask. For whole_face you have to use XSeg trained mask. This can make face more like dst. Enabling this option increases the chance of model collapse. Typical value is 2.0
    不用开。

  • 对SRC应用颜色转换器:[none] Color transfer for src faceset ( none/rct/lct/mkl/idt/sot ?:help ) :
    Change color distribution of src samples close to dst samples. Try all modes to find the best.
    自己觉得哪个好就哪个。PS:合成时也有对应的选项。

  • 使用梯度剪裁:[n] Enable gradient clipping ( y/n ?:help ) :
    Gradient clipping reduces chance of model collapse, sacrificing speed of training.
    通过设置梯度阈值,防止模型崩溃,特别是开某些参数的时候(gan,true face, style power)。

  • 开启预训练:[n] Enable pretraining mode ( y/n ?:help ) :
    Pretrain the model with large amount of various faces. After that, model can be used to train the fakes more quickly. Forces random_warp=N, random_flips=Y, gan_power=0.0, lr_dropout=N, styles=0.0, uniform_yaw=Y
    呃,预训练不如直接练。。。

(3.4)ICE版本新训练参数

  • [y] 启用 ICE-RG 优化器 ( y/n /?:帮助 ) :
    RG优化器,对训练过程中梯度计算进行优化,有限显存提升模型参数容忍度。
    RG optimization is turned on by default. Please set [N] when it is turned off.

  • [n] 启用 loss 优化器 ( y/n /?:帮助 ) :
    启用优化器,将挑选极限角度进行集中训练,并改善扭曲素材间稳定性,提取脸部特征机率更高,
    Optimize the loss value of Src and DST materials to make the overall decline curve of loss smoother,Material with high sniping loss sample

  • [3] loss优化器强度 ( 2-8 /?:帮助 ) :
    loss优化器强度取值越大,平滑效果越好,占用资源也更高,
    Focus on the aiming times of batches,default is 2,How many times are high loss materials trained in a cycle.

  • [5e-05] 自定义学习率【Learning rate】 ( 0.0 … 0.1 /?:帮助 ) :
    Learning rate: typical fine value 5e-5
    用默认的吧,不敢改。

  • [n] 皮肤纹理优先(只支持ICE模型) ( y/n /?:帮助 ) : ?
    这个选项对SRC的皮肤纹理优先学习,并在合成中提升皮肤质感!

(3.5)训练过程

(3.5.1)命令行窗口

这部分和之前没有什么变化。
用ICE版本为例,选了GPU/模型后,简单的显示/设置了参数,就开始训练了。

由于没有开启LOSS平滑,所以命令行显示的内容和原版一致,默认25分钟保存一次模型。
[当前时间][i:迭代次数][单次迭代时长ms]-[src loss][dst loss]

注意:3秒内按下回车按键,将重新设置模型训练参数!   训练器:RG 优化开启,AMP关闭装载类型:me-model: 100%|██████████████████████████| 5/5 [00:01<00:00,  3.86it/s]从 X:\DFL_Path\workspace\data_src\aligned 装载 2400 个训练样本
角度排序: 100%|█████████████████████████████| 128/128 [00:00<00:00, 8530.97it/s]从 X:\DFL_Path\workspace\data_dst\aligned 装载 24000 个训练样本
角度排序: 100%|██████████████████████████████| 128/128 [00:00<00:00, 682.50it/s]____________________  模型摘要  _____________________模型名称:: LG256_SAEHD当前迭代: 1234567
____________________  模型参数  _____________________模型架构: liae-ud人脸类型: f模型分辨率: 256自动编码器维度 ae_dims: 256编码器维度 e_dims: 64解码器维度 d_dims: 64解码器掩码维度 d_mask_dims: 22BS大小: 20学习率lr: 5e-05瘦化神经网络 lr_dropout: 开启遮罩约束训练范围: 开启均衡侧脸训练权重: 开启眼睛和嘴部优先: 开启素材增强-翻转dst: 开启素材增强-随机色调、饱和度、亮度: 0.05RG优化器: 开启模型优化器放置于GPU: 开启梯度剪裁: 开启版本: V3_____________________________________________________设备序号: 0设备名称: NVIDIA GeForce RTX 3060显存大小: 9.37GB
_____________________________________________________ICE 1.31 version by kingboy! QQ group:366893641开始训练,输入 "回车" 将保存模型,结束模型训练。[21:11:43][i:1234589][1128ms]-[0.7113][0.9651]
……

(3.5.2)预览窗口

用ICE1.31c版本为例,和原版差异不大。
当然,ICE版增强了一些功能,可以看上面的提示。

上方显示loss变化情况,整体是下降的,中间有变化是因为改变了参数再进行训练。
和命令行的loss变化情况是相对应的。

下面5列分别显示:源脸图,学习到的源,目标脸图,学习到的目标,合成图。
在这里插入图片描述

PS:新的ICE版本显示loss方式改进了。
src和dst的loss分别显示,更加清晰了(但抗锯齿又不太清晰)。
请添加图片描述

(3.6)阶段阶段

不同的训练阶段,通过开关某些参数可以加快训练,得到更好的成果。参考🔗这个帖子。
PS:此图来自zhatv.cn论坛,版权归原作者所有。
在这里插入图片描述
确实是个有用的参考。
我倒是觉得不需要那么复杂,主要看阶段和素材,以及实际训练情况。
按阶段来,并不是每步都需要,参考英文手册如下:

(3.6.1)预训练(可选)

  • 第 1 步 - 预训练或导入预训练模型

(3.6.2)泛化/翘曲训练

  • 第 2 步 - Random Warp
    启用 样本Random Warp
    启用 Masked training(仅WF/Head)
    禁用 “真实面强”(仅DF模型)
    禁用 GAN
    禁用 预训练模式。
    (可选)随机翻转 SRC、随机翻转 DST、色彩转换模式、随机 HSL
    (可选)在扭曲阶段添加或删除面集图像并更改遮罩
    (可选)根据需要启用梯度剪切
  • 第 3 步 - 眼睛和嘴巴优先(可选)
    启用 眼睛和嘴巴优先
  • 第 4 步 - Uniform Yaw(可选)
    禁用 眼睛和嘴巴优先
    启用 Uniform yaw distribution of samples
  • 第 5 步 - Learning Rate Dropout(可选)
    启用 Learning Rate Dropout
    禁用 Uniform yaw distribution of samples (可选)

(3.6.3)归一化/常规训练

  • 第 6 步- 常规训练
    禁用 Random Warp
    禁用 Uniform Yaw
    禁用 眼睛和嘴巴优先
    禁用 Learning Rate Dropout
  • 第 7 步 - 风格和颜色(可选)
    启用 模糊遮罩、"真实面部 "功能(仅限 DF)、面部风格功能、背景风格功能
  • 第 8 步 - 眼睛和嘴巴优先(可选)
    启用 眼睛和嘴巴优先
  • 第 9 步:Uniform Yaw(可选)
    禁用 眼睛和嘴巴优先
    启用 Uniform yaw distribution of samples
  • 第 10 步:LRD(可选)
    启用 Learning Rate Dropout
    禁用 眼睛和嘴巴优先
    禁用 Uniform yaw distribution of samples(可选)

(3.6.4)增强/GAN 训练(可选)

  • 第 11 步 - GAN
    禁用 眼睛和嘴巴优先
    禁用 Uniform yaw distribution of samples
    设置 GAN power
    设置 GAN patch size
    设置 GAN dimensions

(3.7)训练成果

训练好的“单个模型”,就是是 “1个人的src对应1或N个人的dst” 的学习成果。

这时只需要模型和dst,就可以合成视频了。
💡由于模型具有泛化能力,如果你用别人的“某人”模型,其实是可以直接尝试合成一个没训练的dst的。

模型文件大概是这样的一组文件,当然无论训练好了没有,都是同样的文件名。
放置在\DFL_Path\workspace\model\目录中
在这里插入图片描述

(四)合成

这部分没什么变化。

确保 模型+目标视频帧图片+目标脸部数据集 位置正确。
执行:7) merge XX模型类型.bat

合成阶段最好还是用交互式合成界面的。
详细的可以参考🔗这贴。

合成快捷键可继续参考《如何翻译DeepFaceLab(DeepFake)的交互式合成器》
在这里插入图片描述

对了,上面的界面只是帮助界面。
需要按一下Tab进入真正的合成预览界面,
这时候快捷键才能生效。

然后,通常只需要:

  1. W/S调整侵蚀遮罩(5-30)。
  2. E/D调整模糊(50-100)。
  3. C选择一种颜色转换(看着自然就行)。

根据情况不同,也许还需要:

  1. X选一种遮罩方式(默认是学习到的src+dst遮罩,就算之前从未写入遮罩,合成时也可放入通用Xseg遮罩文件并选用它)
  2. U/J调整src的脸部大小,去适应dst的脸盘子大小(看着自然就好)。
  3. T/G调整超分辨率(模型分辨率小,而dst画面分辨率高+脸部占比太大)。

当调整这些参数的时候,命令行窗口总是会显示:进度/当前帧,以及当前帧参数设置情况。
在这里插入图片描述

总之调整到自然之后,用Shift+/将当前帧的设置用于后面所有帧。
如果你设置的不是第一帧,则可能还需要用Shift+M将当前帧的设置用于前面所有帧。

最后,可以选择按>一帧帧的合成(适合第一次合成,不同场景需要调整不同参数)。
也可以从第一帧开始按Shift+>合成所有帧。

命令行进度条走完,所有视频帧就都合成完毕了。

(4.1)合成参数

下面是按键功能和几个重要参数的含义。粗体是默认的设置,高亮是常用的设置(不见得吧)。
其实可以尝试各种不同的参数,预览图像效果,比单纯文字解释更清晰。

按键功能:

  • [`,1-6] Overlay Mode:见图像的 覆盖方式>>>
  • [Z] Masked Hist-Match:遮罩或非遮罩的直方图匹配
  • [Q,A] His-Match Threshold:直方图匹配阈值
  • [W,S] Erode Mask Modifier:扩大或缩小遮罩区域.
  • [E,D] Blur Mask Modifier:羽化(模糊)遮罩边缘
  • [R,F] Motion Blur Power:运动模糊强度(小心场景切换).
  • [U,J] Output Face Scale:脸部大小调节.
  • [X,] Mask mode:见遮罩模式>>>
  • [C] Color Transfer Mode:见色彩转换模式.>>>
  • [V] Show Alpha Mask:显示透明遮罩(图像确认遮罩设置情况).
  • [N] Sharpen Mode:锐化模式.
  • [Y,H] Blur/Sharpen Amount:模糊/锐化强度.
  • [T,G] Super Resolution Power:超分辨率强度
  • [I,K] Image Denoise Power:画面降噪强度
  • [O,L] Bicubic Degrade Power:双三次减弱强度.
  • [P,;] Color Degrade Power:色彩减弱强度.

覆盖方式(Overlay Mode):

  • [`] Original: 显示原始的dst视频帧图像.
  • [1] Overlay: 直接覆盖(叠加).
  • [2] Hist-Match: 使用直方图匹配进行叠加.
  • [3] Seamless: 使用 OpenCV Poisson 无缝克隆技术混合人脸.
  • [4] Seamless Hist-Match: 结合 Seamless 和 Hist-Match.
  • [5] Raw-RGB: 覆盖整个学习的面部区域(正方形)无遮罩.
  • [6] Raw-Predicted: 只输出预测(学习)的人脸, 像人脸数据集一样的方形图像.

遮罩模式(Mask_Mode):

  • dst: 默认生成的目标遮罩
  • learned-prd: 在训练中基于源学习的遮罩
  • learned-dst: 在训练中基于目标学习的遮罩
  • learned-prd*learned-dst: 使用最小面积的组合已学习的遮罩组合
  • learned-prd+learned-dst: 使用最大面积的组合已学习的遮罩组合
  • XSeg-prd: 基于源的 XSeg 遮罩(需要 XSeg 模型)
  • XSeg-dst: 基于目标的 XSeg 遮罩(需要 XSeg 模型)
  • XSeg-prd*XSeg-dst: 使用最小面积的 XSeg 遮罩组合(需要 XSeg 模型)
  • learned-prdlearned-dstXSeg-prd*XSeg-dst: 使用最小面积的遮罩组合(需要 XSeg 模型)
  • full: 遮罩扩展到脸部边界(正方形),类似于无遮罩。

颜色转换模式(Color Transfer Mode):

  • none:无色彩转换
  • rct:Reinhard色彩转换(遮罩)
  • lct:线性色彩转换
  • mkl:Monge-Kantorovitch 线性 色彩转换
  • mkl-m:MKL带遮罩
  • idt:Iterative Distribution Transfer(迭代分布转换)
  • idt-m:IDT带遮罩
  • sot-m:Sliced Optimal Transport 带遮罩
  • mix-m:RCT/LCT/SOT混合屏蔽(可能是)

(4.2)覆盖模式+遮罩对比

下面用个例子对比看看(其它参数比如侵蚀/羽化/色彩转换有调节)。

  • Mode: original: 显示原始的dst视频帧图像(志玲姐).
    请添加图片描述

  • Mode: overlay: 直接覆盖(叠加)
    Mask: full:无遮罩,整个正方形区域都用(经常有人问为什么有个方形的框,因为没遮罩,就没范围)
    请添加图片描述

  • Mode: overlay: 直接覆盖(叠加)
    Mask: learned-prd*learned-dst: 使用最小面积的组合已学习的遮罩组合(手指反而被脸部遮挡)
    请添加图片描述

  • Mode: overlay: 直接覆盖(叠加)
    Mask: XSeg-prd*XSeg-dst:使用最小面积的 XSeg 遮罩组合(需要 XSeg 模型)(手指遮挡脸部正常)
    请添加图片描述


(五)合成的图片转视频

这部分没什么变化。

确保 合成后视频帧图片+ 目标视频(data_dst.mp4) 位置正确。
执行:8) merged to mp4.bat。建议输入个超高的码率,便于后期用视频软件处理。

需要原始的目标视频,是因为要它的音频和码率。。。

⚠️千万不要用8) merged to mp4 lossless.bat。视频质量会出奇的低,各种色块,不知道是什么bug。
除非你参考《可以提高DeepFaceLab(DeepFake)合成最终视频速度的方法》里面的内容修改了lossless的源代码。
既然改了代码,就强烈建议用N卡的nvenc方式,真的快很多倍啊。

合成完毕,输出的视频叫result.mp4
恭喜你,现在志玲姐的影视片段,由你来主演了。

后面就是PR,AE,Vegas的事儿了。


(六)总结

  • 所有的辅助软件都在开始(人脸数据集素材)阶段起作用。

  • 素材准备最最重要。完全正确的脸部识别+遮罩,将大幅增加合成的自然度,还可以降低训练时间。

  • 记得复用模型,换dst可直接训练,甚至0训练直接合成。

  • 单个模型是单个src的模型,复用模型但换src是需要更多训练的。
    如果是liae模型就删除xx_SAEHD_inter_AB.npy文件再训练新src。

这篇关于重新梳理DeepFaceLab(DeepFake)最近动态:简要且全面的信息的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/180650

相关文章

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

动态规划---打家劫舍

题目: 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 思路: 动态规划五部曲: 1.确定dp数组及含义 dp数组是一维数组,dp[i]代表

poj1330(LCA最近公共祖先)

题意:求最近公共祖先 思路:之前学习了树链剖分,然后我就用树链剖分的一小部分知识就可以解这个题目了,记录每个结点的fa和depth。然后查找时,每次将depth大的结点往上走直到x = y。 代码如下: #include<iostream>#include<algorithm>#include<stdio.h>#include<math.h>#include<cstring>

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

【北交大信息所AI-Max2】使用方法

BJTU信息所集群AI_MAX2使用方法 使用的前提是预约到相应的算力卡,拥有登录权限的账号密码,一般为导师组共用一个。 有浏览器、ssh工具就可以。 1.新建集群Terminal 浏览器登陆10.126.62.75 (如果是1集群把75改成66) 交互式开发 执行器选Terminal 密码随便设一个(需记住) 工作空间:私有数据、全部文件 加速器选GeForce_RTX_2080_Ti

代码随想录冲冲冲 Day39 动态规划Part7

198. 打家劫舍 dp数组的意义是在第i位的时候偷的最大钱数是多少 如果nums的size为0 总价值当然就是0 如果nums的size为1 总价值是nums[0] 遍历顺序就是从小到大遍历 之后是递推公式 对于dp[i]的最大价值来说有两种可能 1.偷第i个 那么最大价值就是dp[i-2]+nums[i] 2.不偷第i个 那么价值就是dp[i-1] 之后取这两个的最大值就是d

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

STL经典案例(四)——实验室预约综合管理系统(项目涉及知识点很全面,内容有点多,耐心看完会有收获的!)

项目干货满满,内容有点过多,看起来可能会有点卡。系统提示读完超过俩小时,建议分多篇发布,我觉得分篇就不完整了,失去了这个项目的灵魂 一、需求分析 高校实验室预约管理系统包括三种不同身份:管理员、实验室教师、学生 管理员:给学生和实验室教师创建账号并分发 实验室教师:审核学生的预约申请 学生:申请使用实验室 高校实验室包括:超景深实验室(可容纳10人)、大数据实验室(可容纳20人)、物联网实验

如何掌握面向对象编程的四大特性、Lambda 表达式及 I/O 流:全面指南

这里写目录标题 OOP语言的四大特性lambda输入/输出流(I/O流) OOP语言的四大特性 面向对象编程(OOP)是一种编程范式,它通过使用“对象”来组织代码。OOP 的四大特性是封装、继承、多态和抽象。这些特性帮助程序员更好地管理复杂的代码,使程序更易于理解和维护。 类-》实体的抽象类型 实体(属性,行为) -》 ADT(abstract data type) 属性-》成

梳理2024年,螺丝钉们爱用的3款剪辑软件

这年头,视频到处都是,就跟天上的星星一样数不清。不管你是公司里的新面孔,还是职场上的老狐狸,学会怎么剪视频,就好比找到了赢的秘诀。不管是给上司汇报工作,展示你的产品,还是自己搞点小视频记录生活,只要是剪辑得漂亮,肯定能一下子吸引大家的目光,让人记得你。咱们今天就来侃侃现在超火的三款视频剪辑工具,尤其是PR剪辑,你肯定听说过,这货在剪辑界可是大名鼎鼎,用它剪视频,既专业又麻利。 NO1. 福昕轻松