|
星级打分
平均分:NAN 参与人数:0 我的评分:未评
本帖最后由 chjfth 于 2024-10-14 20:23 编辑
研究/琢磨 DeepFaceLab 五天,我有一个困惑,不知哪位高人能帮解答。
[20241001.0] DeepFaceLab 的工作流中,包含了两种模型:
- XSeg model,用 5.XSeg) train.bat 生成的模型。官方自带的 $\_internal\model_generic_xseg 里头的也是这种。文件名是 XSeg_data.dat 和 XSeg_data.npy 。
- DFM model,用 6) train SAEHD.bat 生成的模型。这种模型的支撑文件就多了,XXX_SAEHD_data.dat, XXX_SAEHD_decoder.npy, XXX_SAEHD_encoder.npy 等好几个。
==== 现在插一段铺垫,我目前所理解的“训练”的本质 ====
[20241001.0a] 所谓 training 的本质, 是在输入样本集和输出结果集中找到一组参数(或称“参数集”), 有了这组参数, 拿其中一个具体的样本进去运算, 将会得到期望的结果(或是很接近期望的结果).
[20241001.0b] "参数"的意义在于: 我们手头交给机器训练的样本集是有限的, 而真实世界的具体样本(几乎)是无限的; 有了参数以后, 计算机算法针对任何输入的样本个体, 就可以计算(或说推理)出期望的结果.
[20241001.0c] 典型例子是 OCR 手写文字识别. 考虑 26 个小写英文字母手写图片的识别, 一个具体输入是 32x32 的图片, 我们希望算法能运算出(告知)这个图片上写的是哪个字母.
- 再假设输入图片是单色(黑白)位图, 那么全样本集是 2(32*32) 个图片, 这是天文数字, 显然不可能给计算机准备一个 2(32*32) items 的对应表, 去查表找出某个样本图是什么字母.
- 合理的方法是, 用机器学习训练出一个模型(想象它是一个大大的公式), 该模型也许包含 200 个参数, 然后, 拿 32*32 bits 的数据套入那个公式进行运算, 运算结果告诉我们, 当前这个 32*32 的位图是字母 a、b、c 还是别的.
- 让计算机自动找出那个公式(或说公式里头的各个参数)的过程, 就是所谓的 training.
- 为了让计算机自动找出那些参数, 我们得给计算机提供一些样本, 比如, 2600 张人手写的字母图片, 每个字母各 100 张.
[20241001.0d] 推理过程: 样本 → 参数 → 运算结果.
-
[20241001.0e] 我在上面的铺垫文字中, 很谨慎地使用"输出"这个名词, 因为它字面有歧义:
- 我们拿 2600 个样本让机器去学习, 学习结果得到一个模型, 这个模型可称为"输出".
- 我们拿一张具体的手写图片交给模型去运算, 结果得到一个运算结果, 告知这是哪个英文字母, 这也是一种"输出". 这个我称其“运算输出”以避免歧义.
-
[20241001.0f] 今后凡是碰到训练模型/使用模型的说法, 我不妨都问一问自己, 这个模型的 运算输入 和 运算输出 分别是什么.
==== 铺垫结束 ====
[20241001.1] 现在将我的理解套用到 XSeg model 上。
[20241001.1a] 今天以为: 该训练出来的模型, 其运算输入是一张带背景的人脸图片, 运算输出是一个遮罩(黑白位图), 该遮罩告知图片中人物面庞的区域(该区域已经排除了遮挡物).
[20241001.1b] 举例来说, 如果人物嘴里叼着一根雪茄晃来晃去的, 总共有 100 帧这样的画面, 我们自然希望算法抠出的面庞不包含雪茄的残像, 因此, 我们明确给其中三幅叼雪茄的图片进行手工 labeling (5.XSeg) data_src mask - edit.bat), 用绿线排除雪茄这个遮挡物, 用这三幅图训练后的模型, 自动就能为剩余的 97 幅图自动去除雪茄了.
[20241001.1c] 注: 如果训练时给的样本(这个样本信息, 包括位图本身、和我们预先告知的正确遮罩位置(标准答案)), mask 区域是整个 head, 那么, 我们期望运算输出就是 head 的区域; 若训练样本是 whole face(wf) 的, 那么运算输出的遮罩区域就是 whole face.
[20241001.2] 现在我的疑问是,SAEHD training 训练出来的模型,它的运算输入是什么?运算输出又是什么?
[20241001.2a] 你要做深度学习训练,总要给系统一组样本和标准答案吧,我们喂给这个 SAEHD training 的样本和标准答案分别又是什么?
|
|