|
|
星级打分
平均分:NAN 参与人数:0 我的评分:未评
本帖最后由 day270010678 于 2026-2-14 12:24 编辑
大家公布的免费丹,很多都添加了一些自定义的东西,这是可以理解的,但是里面的语言过激,属实有点不文明。比方说这个里面的
==---------------- Model Options -----------------==
== gan_patch_size: 36 ==
== gan_dims: 16 ==
== 猫之汉化免费丹 : 564646676 ==
== 盗卖死妈: 生孩子全身都是痔疮 ==
== 请自重!: 请自重! ==
== AI王子: dapixiao ==
== 西行之巅: 奥贝赛维 ==
== 都是死妈骗子: 小心! ==
里面的这些属实有点不文明
== 盗卖死妈: 生孩子全身都是痔疮 ==
== 请自重!: 请自重! ==
== AI王子: dapixiao ==
== 西行之巅: 奥贝赛维 ==
== 都是死妈骗子: 小心! ==
行了直接说方法:
models里面的都是pickle生成的序列化的数据,知道这个加载修改就行了。
我给大家提供一种脚本,代码如下面,复制后存为py文件就行了。
把上面的复制到文本里面 存为xxx.py文件就行了。
然后在cmd里面用deepfacelab里面的python调用这个py文件运行就行了
比方说我这个命令行里面 输入
- D:\AI\DeepFaceLab_NVIDIA_RTX3000_series\_internal\python-3.6.8\python.exe D:\AI\DeepFaceLab_PyTorch\_internal\修改模型里面的键名.py
复制代码
D:\AI\DeepFaceLab_NVIDIA_RTX3000_series\_internal\python-3.6.8\python.exe 是你的deepfacelab目录里面的python-3.6.8\python.exe
D:\AI\DeepFaceLab_PyTorch\_internal\修改模型里面的键名.py 是上面复制的代码存为的xxx.py的路径
然后按照里面的提示逐步操作就行了
我来给科普下这些dat文件里面存储的是什么,就以XSeg_data.dat为例子
- model_data = {
- 'iter': self.iter, # 当前训练迭代次数
- 'options': self.options, # 模型配置选项
- 'loss_history': self.loss_history, # 损失历史记录
- 'sample_for_preview': self.sample_for_preview, # 预览样本
- 'choosed_gpu_indexes': self.choosed_gpu_indexes, # 选择的GPU索引
- }
复制代码
该文件是通过 pickle 序列化保存的字典,内容由 ModelBase.save() 方法写入(ModelBase.py)
iter - 每次训练迭代都会增加(ModelBase.py)
loss_history - 每次迭代都会追加新的损失值(ModelBase.py)
sample_for_preview - 可能会更新
我们训练中或者需要把遮罩数据 比方说npy这些权重文件应用到图片中
apply_xseg() 函数读取此文件主要是获取 options 中的 face_type。
整体而言XSeg_data.dat 存储的是模型的训练状态和配置信息,不包含神经网络权重。权重保存在 XSeg_256.npy 和 XSeg_256_opt.npy 文件中,这就是为什么每次训练后dat文件会变化的原因。假如你用新建的dat替换已经训练好的dat,就算你参数相同,但是里面的内容都是不同的,而权重文件npy调用会依赖这个dat配置文件,所以一定会出错,就算deepfacelab抑制了错误显示。
比方说 如果 options 内容相同但 iter=0
- if self.is_first_run(): # iter == 0
- io.log_info ("\nModel first run.")
复制代码
会显示 "Model first run"
重新询问配置选项
权重文件(.npy)仍在,但训练状态丢失
iter=0 时模型会触发首次运行逻辑,导致配置被重新询问或重置。权重文件本身不受影响,但训练进度会丢失。
再比如,你训练的时候 预览界面,你看到的迭代次数,以及上面的损失线等等都会消失。
如果只具有相同的options 字段
- model_data = pickle.loads ( self.model_data_path.read_bytes() )
- self.iter = model_data.get('iter',0) # 默认为 0
- if self.iter != 0:
- self.options = model_data['options'] # 必须,否则报错
- self.loss_history = model_data.get('loss_history', []) # 默认为空
- self.sample_for_preview = model_data.get('sample_for_preview', None) # 默认 None
- self.choosed_gpu_indexes = model_data.get('choosed_gpu_indexes', None) # 默认 None
复制代码
假如if self.iter != 0就会出现错误,比方说KeyError
- load_weights=not self.is_first_run()
复制代码- def is_first_run(self):
- return self.iter == 0
复制代码- self.iter = model_data.get('iter', 0) # 从 .dat 文件读取
复制代码
.dat 文件 → iter 值 → is_first_run() → 是否加载 .npy 权重
.dat 中 iter 值 is_first_run() load_weights 权重来源
0(或不存在) True False 随机初始化
> 0 False True 从 .npy 加载
第一次训练(iter=0)时:
.dat 文件提供 iter=0
触发 is_first_run() = True
load_weights = False
权重随机初始化,不读取 .npy 文件
继续训练(iter>0)时:
.dat 文件提供 iter=N
is_first_run() = False
load_weights = True
权重从 .npy 文件加载
总体而言.dat 文件控制的是"是否加载权重"的开关,而 .npy 文件存储实际的权重数据。 两者配合使用。
XSeg_data.dat iter, options, loss_history 决定训练状态
XSeg_256.npy 神经网络权重 存储模型参数
XSeg_256_opt.npy 优化器状态 存储优化器参数
|
|