deepfacelab中文网

 找回密码
 立即注册(仅限QQ邮箱)
查看: 7177|回复: 51

【金鱼DFL基础原理普及】让新手更容易了解DFL的原理和逻辑

  [复制链接]

16

主题

483

帖子

8万

积分

高级丹圣

论坛超级SVIP

Rank: 13Rank: 13Rank: 13Rank: 13

积分
80955

荣誉会员勋章小有贡献勋章

发表于 2021-11-19 20:08:05 | 显示全部楼层 |阅读模式
写这篇文章的目的是为了分享一下我个人对DFL的理解和经验,很多新手总在群里和论坛提问一些非常基础的问题,其实就是对于DFL的原理和逻辑的理解缺失造成的,这些知识在教程区或者网上其实都有,但大都写这些教程的大佬都是程序员出身,所以理论术语比较多,很多时候对于小白来说不是很好理解,于是我就想写一篇以文科视角的贴文且运用一些比喻手法去描述一下整个DFL的思维逻辑,对于还没接触DFL或者已经接触但有点混乱的新人来说应该会有所帮助。当然了,我研究得也不是特别深入,如有错误的地方还希望大佬们能在帖子里指正,我会加以修改。(这篇贴文我不会去详解每个参数的意义是什么,参数的详解在论坛的教程区里都有,我只讲整套换脸的逻辑和思路)

        什么是换脸?
        这里不会去讲什么是神经网络、深度学习这种难懂的东西,然后给你列那些完全看不懂的公式,就举个例子。
        A和B约好去一家整形医院做整形,B对医生说:“能否把我的脸照着A的样子整一个一模一样的脸出来”
        整形医生说:“没问题,我们医院是目前最好的整形医院”
        确定好方案,医生就开始对A和B的脸进行详细的研究和记录,整形师一般都会先描绘整形对象的脸型和五官并且加以分析,但医生发现在研究他们过程中,A和B总是有头发或者其他印记挡住自己脸上的某些部分,这对研究来说造成困扰,于是医生就叫自己的助手去把他们的遮挡物用笔给标记一下,不想研究那些多余的东西,偏偏A和B很犯贱,时而有遮挡时而又没有,这导致了医生能时而看清楚他们的特征时而又看不清楚,更可气的是A说我不管了,我就要用头发挡着我的脸爱咋咋地吧,医生也说:“那行,最后整形手术不完美就不能怪我了”,因为我看不清楚你那些特征,我只能凭经验和我能看到的给你整了。

        整形医院就好比是DFL这一整套原理和软件,同样的整形医院还有很多,比如FakeAPP、Face2Face、Faceswap、Openfaceswap等等,但目前DFL这家医院是资历和技术最好的单位。
        A就是我们的SRC源素材,而B就是DST目标素材,我们就是要把A的脸换到B的脸上去,俗称不要B脸。
        医生就是我们的训练模型或者叫丹,他的经验丰富程度直接决定了这场手术的成败与否,为什么不建议新手从0开始去训练自己的模型,而是用大佬们练好的模型,这就好比你去做整形手术,你是想让完全没有经验的实习生来给你做还是经验老道主治医生来给你做?实习医生当然也可以做手术,但他需要经过很长的时间才能完成,而且由于缺乏经验可能还会是一场失败的手术。
        医生的助手就是遮罩,他的作用就是把素材脸上类如胎记、头发等等遮挡住脸部的东西给标出来,提示医生这些东西就不要照搬到目标脸上去了,但还有种情况,B希望A脸上的胎记或者痣也给我复制过来,但头发不要,于是助理就擦掉了A脸上给胎记和痣所画的标记。
  
         上面用A和B去医院做整形的过程大概比喻了一下整个换脸的原理,下面开始进入正题。

         首先是源素材的制作和整理
上面提到的A就是SRC源素材,相对比较单纯,你可以是从视频里提取A的脸,也可以是A的图片写真照片等,其目的就是要想方设法去拿到A的脸部特写,包含得有各种表情和角度的脸图,然后通过软件精准去提取它,并且你需要去修复脸部的定位点landmark,然后画好遮罩,关于遮罩的部分我会在后面讲到,源素材细分操作的部分,比如如何挑选合适的角度、如何排序筛选正确的人脸、如何补充人脸没有的角度等这类的问题我不会在这里详细展开说,主要是让新手理解思路。

这里有几个论坛里大佬们关于素材制作的教程整理:

【老鸟进阶】练就超清Src素材的必要事项
https://dfldata.xyz/forum.php?mo ... &extra=page%3D1

[免费分享] 如何逐步打造一份完美的src素材
https://dfldata.xyz/forum.php?mod=viewthread&tid=3566

【随风技术论】DFL换脸技术深论之<SRC素材补齐法>
https://dfldata.xyz/forum.php?mod=viewthread&tid=445

【金鱼基础模型库】用于补全SRC极限角度
https://dfldata.xyz/forum.php?mo ... &extra=page%3D1

上面这些教程可以逐步往下去吸收学习。

       敲下重点:SRC对于数量没有明确规定,越多角度,越多表情越好,但是数量越大就会越加重机器学习的负担,最好保持在5000-10000万以内尽可能的保证各种不同的角度和表情,我上面那套【金鱼基础模型库】包含了全部的角度和最基础的表情,总数量大概就是5000张无重复,表情是不够的,而且他不是SRC不能丢到SRC里去用,而是用来让你的SRC学习的对象,如果素材的表情不够,那你最终换出来的人脸就会变得比较麻木呆板全程都是死鱼表情。
SRC筛选注意的几个要求:
1,删掉和源脸无关的其他人脸(提脸的时候你总是会提到其他人的脸)
2,删掉非常模糊的脸(这对机器的学习没有任何帮组)
3,删掉较大遮挡的脸(比如人脸整个被挡掉一半以上)
4,删掉杂乱光影的脸(比如脸上有各种红啊绿的浓郁颜色的光)
5,删掉错误的脸部定位图,修复定位点landmark并重新提脸
6,遮罩的处理,遮罩可以手动去画也可以让遮罩模型帮你去画,但模型不一定是完美的,所以有时候需要手动去检查画得不好的遮罩,我后面关于遮罩的部分会细说。


以上做完修复以后SRC素材最终会集中在data_src 下的aligned文件夹里,这里的内容都会被机器所学习,多一张或者少一张不会影响到机器学习,你多他就学得多,你少他就学得少,这也是为什么在训练过程中正脸的成像最快最清晰,因为通常我们的SRC素材里正面脸部的图片最多,那就一张SRC素材可以不可以?当然可以,但效果嘛可想而知。

        目标源DST的制作和整理
        DST的素材相对就比较严谨一些了,首先从剪辑开始你就需要尽可能的使用清晰的视频素材,同时如果你的SRC缺少大角度和极限角度,那你的DST剪辑的时候就需要尽量不要把带有大角度和极限角度的镜头剪进去,因为你的SRC没有那些角度他是没有办法去很好的补充的,导致的结果就是最终合成的视频一旦人脸角度变化较大时脸部就会糊成一片或者呈祥难以形容的形状,所以的你的SRC素材的好坏决定了你应该选择什么样的DST。DST的视频切图和提脸和SRC是一样的操作步骤,不同的是DST是默认全帧率切图,原理就是把你的视频分解成一帧一帧的图片,然后把图片上的人脸一张张的替换掉,最后再把这些图片按序列合成一个视频。
DST筛选要注意的几个要求:
1,aligned文件夹里只能有要被替换的人脸图(有时候视频图片被提脸的时候同一个画面会有多个不同的人脸被提取,那些多余的不是目标脸的人脸图和一些错乱的图就需要被删除)
2,提取后的目标脸模糊的要看情况删除(目标脸每一张都对于一个帧数画面,如果你删掉其中几张,合成后那几帧画面就不会被替换,会造成脸部闪烁,有一些模糊到人畜不分只有点点轮廓那种就可以考虑删除,因为本身就不清楚你替换一个非常模糊的脸反而会导致更差的结果,但这样模糊的镜头其实就不应该剪到DST里来,能在前期解决的事情尽量避免留到后期)
3,data_dst下那些视频切图一张都不要删,你删了就会造成视频帧丢失,会没有那一帧的画面。
4,DST的debug文件夹存放了脸部的定位信息图,是用于查找并修复脸部定位的,同样DST的landmark信息需要修复并重新提脸,这里只需要修复重提要被替换的人脸,其他无关的人脸的定位信息不需要管,或者删掉无关人脸的定位信息,注意是信息不是图。
5,遮罩部分和SRC一样,不同的是DST的遮罩不需要写入到图片信息里去参与模型的训练,只需要在遮罩训练它就行,最后合成阶段再应用遮罩。这么做是为了防止DST把SRC的头发等东西学进去。


       遮罩模型与训练
       正如我上面的比喻,遮罩相当于医生的助手或者助理,那么它也是需要学习的,它自己也有一套独立的模型,论坛里模型区的【镇坛之宝】万能Xseg模型,就是一个经过几百万次迭代训练的遮罩模型,它可以自动帮你匹配绘制出适用于绝大部分情况下的遮挡,只有少部分比较刁钻的遮挡需要你自己手动绘制,但如果你没有那个模型,DFL本身也自带基础的遮罩模型也可使用,同时手动绘制遮罩时候你不需要把每一张都画上,只需要挑选一些比较有明显差别的遮挡或者不同画面时候画一些就可以,机器会自动学习并帮你画上其他相近的遮罩,说直白一点就是同一组的图,你可以跳着画几张即可,画完以后就可以开始进入到遮罩的训练了,遮罩的训练不需要像模型训练那么的久,一段时间后在预览里观察匹配程度,如果某些遮罩匹配有差别把不需要遮挡的部分都遮挡了或者需要遮挡的没档住那就需要你找到那些图再进行遮罩绘制并再次训练直到合适为止,论坛里网友分享的遮罩也有比较好用的,遮罩模型的使用和训练模型一样,存放在同一个model文件夹下。
      基础重点:简单来说,如果SRC和DST的人脸均为无遮挡的干净素材,那么遮罩就不是很需要,但凡其中有一个有遮挡,就需要遮罩介入,至于如何绘制遮罩以及合成的时候该怎么选择遮罩。可以参看论坛的遮罩教程:
https://dfldata.xyz/forum.php?mo ... &extra=page%3D1

       模型的预训练与训练
       按照文章开篇的比喻,预训练就等于是刚来实习医生,他需要经过几个月的甚至更久的实习期才能正式上岗成为正式主刀医生,通常新手不太建议自己去预训练一个模型,因为对于用于预训练模型的素材也是有一定讲究的,预训练就是丢入大量不同人脸、角度、光线的素材去让机器学习,这样当你开始训练自己的素材时候,机器的学习的速度就会非常的快,就能更快的成像,如果没有预训练且你只有同样一个人的素材,那从0开始训练起来就会非常的漫长且学习能力不足,所以,新手可以跳过这个实习阶段去下载别人预训练好的模型来直接用于自己的素材训练,别人的模型也有好有坏,大家常说的神丹,仙丹,垃圾丹,其意思就是形容此模型好与不好的俗称。
      重点:预训练其实没有太多好讲的,通常情况在你掌握了训练的原理以及有足够的时间和较好的机器性能可以去做预训练,新手的话直接用别人的预训练或者已经训练好的模型即可,在你不了解的情况下胡乱去练最终只能练出一颗废丹,就好比实习医生你起码得到正规的医院去实习才能学到正统有用的知识,而不是路边的小诊所甚至山野药店。
      预训练的基础理论可参考论坛教程:https://dfldata.xyz/forum.php?mo ... &extra=page%3D1
      当拿到一个好的模型,开始你的正式训练了,这里就得讲到训练的三个阶段了,它的思路和我们画画以及做雕塑是一样的。
      第一阶段,先描绘脸部轮廓以及大致五官,通常再有良好模型的基础上这个阶段也是比较快的。
      第二阶段,对五官和脸型成像进行修正,例如眼嘴的形状、眼神、牙齿成像、脸部轮廓清晰等。
      第三阶段,进一步强化脸部的细节,这一步的时间迭代会比较漫长。
      重点:务必需要理解训练模型所有的参数所对应的作用,这样你才知道在哪个阶段该开启那些参数,还得花时间去观察这些参数所带来的变化。

参数方面新手需要反复查看这篇关于训练参数详解的教程:
https://dfldata.xyz/forum.php?mo ... &extra=page%3D1

当你对参数有了基本的了解以后可以看看随风的这篇关于训练步骤的详解:
https://dfldata.xyz/forum.php?mod=viewthread&tid=415

       合成的基本原理
       当你对训练结果满意以后就到了合成阶段了,顾名思义就是把机器学习到的并生成出来的新脸替换上去,DFL本身的合成是比较简单的,就是将你原本分解成一张张的DST的图片上的脸替换成你新生成的SRC的脸,最终再把这些一张张新的图片按序列输出成为一个视频文件。
       DFL的合成可以满足基本的合成需求,但由比较简化所以就会有不够完美的地方,进阶的合成就需要用到第三方的视频后期软件来进行细节上的手动调整,对于小白而言最好先掌握其自带的合成原理,当你需要更好的效果,比如解决脸型匹配、肤色、遮罩修复等问题的时候再去学习进阶的第三方软件高级合成。

基本合成可参看论坛精品教程区deepfacelab合成参数详解:
https://dfldata.xyz/forum.php?mo ... &extra=page%3D1

进阶合成参看【高端操作】金鱼AE高级合成教程:
https://dfldata.xyz/forum.php?mo ... &extra=page%3D1

      合成结束基本上就没有什么了,我没有去做详细参数的讲解,只告诉你关于DFL这一整套基本的逻辑思路,所以理论上应该都比较好理解,当我们学习一个新东西的时候一定是最先搞清楚它的原理和逻辑,然后再去深入学习其中的各个功能,这样才不会盲目的乱来一通,知道原理和逻辑才有助于你在遇到问题的时候去延伸出新的思维,所以最好的方法就是先跟着教程动手做一遍,遇到不明白的地方要善于利用搜索功能去查找,多思考多动手多验证。
      DFL有很多第三方辅助软件,到后面你甚至只需要用到它的模型训练的功能,但这些对于初期的新手暂时不需要去考虑,先弄明白它本身的功能,后期为了更高的效率和更好的效果再去学习第三方的辅助软件,这些第三方的辅助软件以及教程论坛里都能找到,学习本身就是一种乐趣,我个人对换脸这件事情本身是没有多大兴趣的,但对研究如何实现换脸以及过程却充满了兴趣,往后还有时间可能还会再写一篇新手进阶的文章。

     此文内容完全免费,灵石按需奖赏。
购买主题 已有 18 人购买  本主题需向作者支付 10 灵石 才能浏览
回复

使用道具 举报

16

主题

483

帖子

8万

积分

高级丹圣

论坛超级SVIP

Rank: 13Rank: 13Rank: 13Rank: 13

积分
80955

荣誉会员勋章小有贡献勋章

 楼主| 发表于 2022-2-11 22:45:59 | 显示全部楼层
youyonghaha1 发表于 2022-2-11 17:35
大佬今天终于来拜读,感谢上次的帮助~学生有一问~你说的这个
4,DST的debug文件夹存放了脸部的定位信息图, ...

打开debug文件夹,然后一张一张的往下浏览,假如有A和B两个人 你要换的是B 那就盯着B的脸看,如果landmark定位图错误,那就删掉那张错误的图,直到没有错误,A的脸和非人脸不需要管,删除以后返回去执行data_dst faceset MANUAL RE-EXTRACT DELETED ALIGNED_DEBUG.bat 命令,中文叫dst 手动提取面部(删除 debug 图片后)这时候就会弹出框来让你手动去修复那些错误的没有正确提脸的图,也就是你删掉的图。
A的脸之所以不需要管是因为你不需要去换他,你只需要在aligned文件夹里删掉A的所有的脸即可,aligned文件里除了B的脸,其他一切A脸和非人脸都要删掉。这么说应该明白了吧。
回复 支持 1 反对 0

使用道具 举报

5

主题

72

帖子

404

积分

初级丹师

Rank: 3Rank: 3

积分
404
发表于 2021-11-20 13:37:15 | 显示全部楼层
无敌小金鱼 发表于 2021-11-20 12:51
你可以参考下我上面提到的随风的帖子,里面有三个阶段的LOSS值参考。但LOSS值不是绝对的主要还是看最后的 ...

素材是下载的HHFQ的1024X1024的,但是我的显卡跑不了1024X1024分辨率的,全部裁剪成768X768的,筛选过,在跑的,现在用了一部分,差不多1万张人脸,一直跑
回复 支持 1 反对 0

使用道具 举报

15

主题

287

帖子

1万

积分

高级丹圣

Monster

Rank: 13Rank: 13Rank: 13Rank: 13

积分
13602
发表于 2021-11-19 20:49:32 | 显示全部楼层
赏,助你冲刺1W灵石大关
回复 支持 1 反对 0

使用道具 举报

39

主题

1493

帖子

8376

积分

高级丹圣

Rank: 13Rank: 13Rank: 13Rank: 13

积分
8376

万事如意节日勋章

发表于 2021-11-19 20:48:18 | 显示全部楼层
深度学习
回复

使用道具 举报

3

主题

523

帖子

4231

积分

高级丹圣

Rank: 13Rank: 13Rank: 13Rank: 13

积分
4231

万事如意节日勋章

发表于 2021-11-19 22:21:39 | 显示全部楼层
支持一下
回复

使用道具 举报

5

主题

72

帖子

404

积分

初级丹师

Rank: 3Rank: 3

积分
404
发表于 2021-11-19 22:31:43 | 显示全部楼层

谢谢,我先让我的模型先用50万人脸训练着,不过我练的AMP模型
回复 支持 反对

使用道具 举报

5

主题

72

帖子

404

积分

初级丹师

Rank: 3Rank: 3

积分
404
发表于 2021-11-19 22:54:44 | 显示全部楼层
预训练的话LOSS值大约到多少?
第一阶段LOSS值大约多少?开始多少?
第二阶段LOSS值多少可以开始?多少可以停止?
第三阶段我知道LOSS=0.1以下即可开启GAN
回复 支持 反对

使用道具 举报

4

主题

367

帖子

4700

积分

高级丹圣

Rank: 13Rank: 13Rank: 13Rank: 13

积分
4700
发表于 2021-11-19 22:54:51 | 显示全部楼层
谢谢楼主的分享
回复 支持 反对

使用道具 举报

5

主题

183

帖子

1221

积分

初级丹圣

Rank: 8Rank: 8

积分
1221
发表于 2021-11-19 23:38:24 | 显示全部楼层

谢谢楼主的分享
回复 支持 反对

使用道具 举报

2

主题

68

帖子

1321

积分

初级丹圣

Rank: 8Rank: 8

积分
1321
发表于 2021-11-19 23:41:53 | 显示全部楼层
支持一下      
回复 支持 反对

使用道具 举报

8

主题

400

帖子

3483

积分

高级丹圣

Rank: 13Rank: 13Rank: 13Rank: 13

积分
3483
发表于 2021-11-20 10:58:04 | 显示全部楼层
想请教一个问题,就是比如src和dst都是wf类型的。src是齐刘海,或者有部分刘海,但用遮罩排除掉了,然后dst是没刘海的。这种情况在合成的时候,DFL究竟是怎样处理额头的,是硬要在src了找一片额头位置覆盖上去吗,即使src已被遮罩处理得只有一部分或者完全没了额头?

因为我试过一种情况,src和dst都没刘海,但是dst的发线比较高一些,导致额头区域比较长,合成以后靠近发线的位置会有些头发的阴影。那是不是说你的额头不够了,所以我要往上再硬扯一部分下来填满这部分空隙,即使那已经被遮罩排除掉也没用?
回复 支持 反对

使用道具 举报

QQ|Archiver|手机版|deepfacelab中文网 |网站地图

GMT+8, 2024-9-20 11:41 , Processed in 0.111160 second(s), 13 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表