星级打分
平均分: NAN 参与人数: 0 我的评分: 未评
本帖最后由 chjfth 于 2024-10-17 09:53 编辑
接我上回 CX3 的帖子: https://dfldata.cc/forum.php?mod=viewthread&tid=19618
CX3 留下一个重大疑问: 20241007.3b 的 Q1 发问, 为何 column ① 的面部区域是一个倒三角形, 接着 20241007.5 追问, 如何将那个倒三角形“修正为”圆脸区域?
热心网友回帖说, 是我缺少了“用多边形训练了xseg之后,再应用xseg ”的步骤. 好,今天就来验证一下。
本文用到的图片我打包于
CX4.zip
(157.64 KB, 下载次数: 0)
[20241008.1]
准备三张 data_src 图片:
blue-circle-face.png red-circle-face.png green-circle-face.png
4) data_src faceset extract MANUAL.bat 处理它们, 在 aligned 中生成对应的:
blue-circle-face_0.jpg red-circle-face_0.jpg green-circle-face_0.jpg
green-circle-face.png 是这回新做的, 用于辅助对比, 该图被手工指定五官位置(所谓的 landmarks)后, aligned_debug 中展现其样子是:
——该图的 default mask (深灰色倒三角区域) 没有被程序 4) data_src faceset extract.bat 自动定位正确、只覆盖了眼睛和鼻子.
[20241008.1a] 故意不对 green face 做 XSeg polygon edit . (DeepfakeVFX 教程里叫它 labeling, 现在觉得叫 polygon edit 更贴切)
[20241008.1b]
到此刻为止, 系统还不知道 green-circle-face_0.jpg 这张画像的人脸处在什么位置, 因为 20241008.1 的时候它标记的 default mask 位置是错误的.
我们现在期望的是, 通过手工告诉系统 blue circle face 和 red circle face 上人脸的位置(我们标注的绿色多边形), 让系统推导出 green-circle-face 这张肖像上人脸的正确位置. 我们期望系统能做到这点, 是因为我们人知道, green-circle-face 跟 blue-circle-face 这两张脸的"模式" 太像了.
XSeg train 的作用, 就是让系统习得这个"模式".
[20241008.2]
开始 XSeg train.
准备工作, 先将已有的 $\workspace\model\XSeg_* 文件全部删除.
执行 5.XSeg) train.bat .
Iter 1:
Iter 1289:
嗯, 由于我给的几何人脸实在太棱角分明了, 因此, 只需要 1000 个 iters, 就已经能提取出圆脸轮廓了. 不再是昨天的倒三角脸部轮廓。
今天的实验的思路, 我必须引入一个没有经过 polygon edit 的绿脸来进行对照, 这样我才能分辨 XSeg train 是不是真有效.
光看那个蓝脸或红脸是不够的, 因为我无法判定: 系统最终能够提取出脸庞轮廓, 是因为我用绿线给它们明确标了 polygon, 还是因为训练出的 XSeg model 起的作用. 刚才绿脸的表现验证了 , 是后者.
[20241008.2a]
停止 XSeg train. 生成的 XSeg model 模型文件样子:
XSeg_summary.txt :
================== Model Summary ==================
== ==
== Model name: XSeg ==
== ==
== Current iteration: 1736 ==
== ==
==---------------- Model Options ----------------==
== ==
== face_type: wf ==
== pretrain: False ==
== batch_size: 4 ==
== ==
==----------------- Running On ------------------==
== ==
== Device index: 0 ==
== Name: NVIDIA GeForce RTX 4060 Ti ==
== VRAM: 13.25GB ==
== ==
===================================================
-
[20241008.3]
XSeg apply.
执行 5.XSeg) data_src trained mask - apply.bat
这个几秒钟就完成了, 毕竟只处理了 3 张图片.
$\workspace\data_src\aligned 中的三张图片被修改, 嵌入了元数据 xseg_mask .
再次运行 5.XSeg) data_src mask - edit.bat , 看我们定制化的 XSeg model 应用在自己输入图片上的效果.
此处注意到, xseg_mask 亮起的部分, 跟我之前画的 polygon 绿线并不是完全重合的. 这下我相信了, 这边有三层信息:
(1) 手工框定人脸的绿线多边形标注.
(2) XSeg model .
(3) 由 XSeg model "运算出的"人脸区域.
虽然 (1) 跟 (3) 是相同性质的信息, 但 DeepFaceLab 这个系统一定要绕道 (2) 来得到 (3) .
绿脸经过 (2) 得到的 xseg_mask 区域如下:
[20241008.4]
输入图带着自己的 xseg_mask 来 SAEHD train .
6) train SAEHD.bat
模型命名为 CircleMusk5 .
Iter 3048 后, 新问题/疑惑冒出来了.
[20241008.4a]
※ Q1: 昨天 20241007.3a, 合成的人脸是能看到眼睛的, 但这回怎么完全看不到眼睛了?
※ Q2: 这回的两个损失曲线, Src lost 蓝线在上, Dst lost 黄线在下, 跟昨天完全反过来了, 这是为何?
[20241014.cx1] 又费了一些时间,走了一些弯路后,我发现,这 SAEHD train 的运行走向竟然是随机的 !如果我说错了请纠正。
什么意思呢?可以这样实验,把 blue-circle-face_0.jpg,red-circle-face_0.jpg,green-circle-face_0.jpg 三张图片放到 $\workspace\data_src\aligned 里头,这三张图已经内嵌好圆脸的 xseg_mask 元数据。然后,在其他条件/参数完全相同的情况下,运行 6) train SAEHD.bat 两次,两次指定不同的 model name(比如 CircleMusky1 和 CircleMusky2),以便两次生成的模型文件是分开的,Target iteration 指定为 3000,让它们作 3000 iters 后自动停下。对比两次运行,我发现:
$\workspace\model 里头生成的 CircleMusky1_SAEHD_data.dat 和 CircleMusky2_SAEHD_data.dat 的内容完全不同 。 更直观地,Training Preview 中那对损失曲线地走势也很不相同。
[20241014.cx2] 举例,另一次的运行,Iter 2247 时就看到几何人脸的眼和嘴迁移到目标头像上了。如图:
[20241014.cx3] 作为新手,我差点被误导了,一度以为是红绿蓝三种颜色叠加后得到白色,因此最终五官也是白色的,导致看到全白的脸。 随机性是菜鸟的天敌!
实验多次后,我观察到的规律是:当蓝线(有幸)下穿过黄线时,几何五官就能&才能出现在马斯克脸上。不知这是巧合还是有啥内在道理。
※ Q3: 有办法让两次 6) train SAEHD.bat 产出相同的结果吗?好比用 Stable Diffusion 绘图,将 Seed 固定就能产出相同的画作。
[20241017.1] 补充一个随机走向案例。Iter 2000 时,圆脸轮廓线条就已经出现,但一直到 iter 12400 ,眼睛和鼻子仍未出现。