deepfacelab中文网

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

[CX4] 正确实施 XSeg train/apply,但不出意外地,又冒出新问题

[复制链接]

4

主题

5

帖子

100

积分

高级丹童

Rank: 2

积分
100
 楼主| 发表于 2024-10-14 21:25:48 | 显示全部楼层 |阅读模式
星级打分
  • 1
  • 2
  • 3
  • 4
  • 5
平均分: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 中展现其样子是:


image.png


——该图的 default mask (深灰色倒三角区域) 没有被程序 4) data_src faceset extract.bat 自动定位正确、只覆盖了眼睛和鼻子.

[20241008.1a] 故意不对 green face 做 XSeg polygon edit  . (DeepfakeVFX 教程里叫它 labeling, 现在觉得叫 polygon edit 更贴切)

image.png

image.png


image.png

[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 .

image.png

Iter 1:
image.png

Iter 1289:

image.png


嗯, 由于我给的几何人脸实在太棱角分明了, 因此, 只需要 1000 个 iters, 就已经能提取出圆脸轮廓了. 不再是昨天的倒三角脸部轮廓。

今天的实验的思路, 我必须引入一个没有经过 polygon edit 的绿脸来进行对照, 这样我才能分辨 XSeg train 是不是真有效.

光看那个蓝脸或红脸是不够的, 因为我无法判定: 系统最终能够提取出脸庞轮廓, 是因为我用绿线给它们明确标了 polygon, 还是因为训练出的 XSeg model 起的作用. 刚才绿脸的表现验证了 , 是后者.


[20241008.2a]

停止 XSeg train. 生成的 XSeg model 模型文件样子:

image.png


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 张图片.


image.png


$\workspace\data_src\aligned 中的三张图片被修改, 嵌入了元数据 xseg_mask .

再次运行 5.XSeg) data_src mask - edit.bat , 看我们定制化的 XSeg model 应用在自己输入图片上的效果.


image.png


此处注意到, xseg_mask 亮起的部分, 跟我之前画的 polygon 绿线并不是完全重合的. 这下我相信了, 这边有三层信息:
(1) 手工框定人脸的绿线多边形标注.
(2) XSeg model .
(3) 由 XSeg model "运算出的"人脸区域.

虽然 (1) 跟 (3) 是相同性质的信息, 但 DeepFaceLab 这个系统一定要绕道 (2) 来得到 (3) .

绿脸经过 (2) 得到的 xseg_mask 区域如下:


image.png

[20241008.4]

输入图带着自己的 xseg_mask 来 SAEHD train .


6) train SAEHD.bat

模型命名为 CircleMusk5 .


image.png

Iter 3048 后, 新问题/疑惑冒出来了.

image.png

[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 时就看到几何人脸的眼和嘴迁移到目标头像上了。如图:

image.png

[20241014.cx3] 作为新手,我差点被误导了,一度以为是红绿蓝三种颜色叠加后得到白色,因此最终五官也是白色的,导致看到全白的脸。 随机性是菜鸟的天敌!

实验多次后,我观察到的规律是:当蓝线(有幸)下穿过黄线时,几何五官就能&才能出现在马斯克脸上。不知这是巧合还是有啥内在道理。


※ Q3: 有办法让两次  6) train SAEHD.bat 产出相同的结果吗?好比用 Stable Diffusion 绘图,将 Seed 固定就能产出相同的画作。

[20241017.1] 补充一个随机走向案例。Iter 2000 时,圆脸轮廓线条就已经出现,但一直到 iter 12400 ,眼睛和鼻子仍未出现。

image.png





回复

使用道具 举报

0

主题

37

帖子

661

积分

禁止访问

积分
661
发表于 2024-10-14 22:47:14 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

13

主题

1034

帖子

1万

积分

高级丹圣

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

积分
12366
发表于 7 天前 | 显示全部楼层
一个数学问题,到(1,0,0),(0,0,1,),(0,1,0)三个点距离之和最小的是哪个点?
回复 支持 反对

使用道具 举报

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

GMT+8, 2024-10-22 12:34 , Processed in 0.080028 second(s), 10 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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