deepfacelab中文网

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

删除免费丹里面他们自己添加的键值键名

[复制链接]

29

主题

195

帖子

1417

积分

初级丹圣

Rank: 8Rank: 8

积分
1417
 楼主| 发表于 2026-1-23 23:28:30 | 显示全部楼层 |阅读模式
星级打分
  • 1
  • 2
  • 3
  • 4
  • 5
平均分: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文件就行了。
  1. import pickle
  2. from pathlib import Path
  3. import sys


  4. def load_model(model_path):
  5.     """加载模型文件"""
  6.     try:
  7.         model_data = Path(model_path).read_bytes()
  8.         model = pickle.loads(model_data)
  9.         return model
  10.     except FileNotFoundError:
  11.         print(f"错误: 找不到模型文件 {model_path}")
  12.         return None
  13.     except Exception as e:
  14.         print(f"加载模型时出错: {e}")
  15.         return None


  16. def save_model(model, model_path):
  17.     """保存模型到文件"""
  18.     try:
  19.         model_data = pickle.dumps(model)
  20.         Path(model_path).write_bytes(model_data)
  21.         print(f"模型已成功保存到 {model_path}")
  22.         return True
  23.     except Exception as e:
  24.         print(f"保存模型时出错: {e}")
  25.         return False


  26. def remove_option_from_model(model_path, option_key):
  27.     """从模型中删除指定的options配置并保存"""
  28.     # 加载模型
  29.     model = load_model(model_path)
  30.     if model is None:
  31.         return False

  32.     # 检查是否存在options
  33.     if 'options' in model:
  34.         options = model['options']
  35.         if option_key in options:
  36.             # 删除指定的option
  37.             removed_value = options.pop(option_key)
  38.             print(f"已从模型中删除option '{option_key}': {removed_value}")

  39.             # 保存修改后的模型
  40.             return save_model(model, model_path)
  41.         else:
  42.             print(f"模型中未找到option '{option_key}'")
  43.             return False
  44.     else:
  45.         print("模型中未找到options配置")
  46.         return False


  47. def list_options(model_path):
  48.     """列出模型中的所有options"""
  49.     model = load_model(model_path)
  50.     if model is None:
  51.         return

  52.     if 'options' in model:
  53.         print("当前模型中的options:")
  54.         for key, value in model['options'].items():
  55.             print(f"  {key}: {value}")
  56.     else:
  57.         print("模型中未找到options配置")


  58. def main():
  59.     """主函数"""
  60.     print("=== 模型Options管理工具 ===")

  61.     # 获取模型文件路径
  62.     model_path = input("请输入模型文件路径 (默认: XSeg_data.dat): ").strip()
  63.     if not model_path:
  64.         model_path = r"\DeepFaceLab_NVIDIA_RTX3000_series\workspace\model\XSeg_data.dat"

  65.     while True:
  66.         print("\n请选择操作:")
  67.         print("1. 查看所有options")
  68.         print("2. 删除指定option")
  69.         print("3. 退出")

  70.         choice = input("请输入选择 (1-3): ").strip()

  71.         if choice == '1':
  72.             list_options(model_path)

  73.         elif choice == '2':
  74.             list_options(model_path)
  75.             option_key = input("请输入要删除的option键名: ")
  76.             if option_key:
  77.                 confirm = input(f"确认要删除option '{option_key}'吗? (y/N): ").strip().lower()
  78.                 if confirm == 'y' or confirm == 'yes':
  79.                     remove_option_from_model(model_path, option_key)
  80.                 else:
  81.                     print("操作已取消")
  82.             else:
  83.                 print("未输入有效的option键名")

  84.         elif choice == '3':
  85.             print("再见!")
  86.             break

  87.         else:
  88.             print("无效选择,请重新输入")


  89. if __name__ == "__main__":
  90.     main()
复制代码
把上面的复制到文本里面 存为xxx.py文件就行了。

然后在cmd里面用deepfacelab里面的python调用这个py文件运行就行了

比方说我这个命令行里面   输入
  1. 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的路径


然后按照里面的提示逐步操作就行了


屏幕截图 2026-01-23 232002.png
屏幕截图 2026-01-23 232415.png
屏幕截图 2026-01-23 232447.png
屏幕截图 2026-01-23 232707.png



我来给科普下这些dat文件里面存储的是什么,就以XSeg_data.dat为例子

  1. model_data = {
  2.     'iter': self.iter,                          # 当前训练迭代次数
  3.     'options': self.options,                     # 模型配置选项
  4.     'loss_history': self.loss_history,           # 损失历史记录
  5.     'sample_for_preview': self.sample_for_preview,  # 预览样本
  6.     'choosed_gpu_indexes': self.choosed_gpu_indexes,  # 选择的GPU索引
  7. }
复制代码

该文件是通过 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
  1. if self.is_first_run():  # iter == 0
  2.     io.log_info ("\nModel first run.")
复制代码



会显示 "Model first run"
重新询问配置选项
权重文件(.npy)仍在,但训练状态丢失

iter=0 时模型会触发首次运行逻辑,导致配置被重新询问或重置。权重文件本身不受影响,但训练进度会丢失。

再比如,你训练的时候 预览界面,你看到的迭代次数,以及上面的损失线等等都会消失。


如果只具有相同的options 字段
  1. model_data = pickle.loads ( self.model_data_path.read_bytes() )
  2. self.iter = model_data.get('iter',0)           # 默认为 0
  3. if self.iter != 0:
  4.     self.options = model_data['options']        # 必须,否则报错
  5.     self.loss_history = model_data.get('loss_history', [])  # 默认为空
  6.     self.sample_for_preview = model_data.get('sample_for_preview', None)  # 默认 None
  7.     self.choosed_gpu_indexes = model_data.get('choosed_gpu_indexes', None)  # 默认 None
复制代码

假如if self.iter != 0就会出现错误,比方说KeyError
  1. load_weights=not self.is_first_run()
复制代码
  1. def is_first_run(self):
  2.     return self.iter == 0
复制代码
  1. 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        优化器状态        存储优化器参数

回复

使用道具 举报

36

主题

302

帖子

9674

积分

高级丹圣

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

积分
9674
发表于 2026-1-24 19:26:40 | 显示全部楼层
哪用脚本啊,新建一个相同参数的_data.dat文件替换就行了
回复 支持 反对

使用道具 举报

50

主题

256

帖子

5351

积分

高级丹圣

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

积分
5351
发表于 2026-2-12 08:57:02 | 显示全部楼层
fghfdg 发表于 2026-1-24 19:26
哪用脚本啊,新建一个相同参数的_data.dat文件替换就行了

圖文教學嗎?有看沒有懂

我每次都是用


Notepad++

有一套件叫 Hex-Editor

然後丟丹的檔案進去按轉 16進位,然後再看簽名中文寫啥請 AI轉成16進位,

Notepad++   Ctrl +F 瞬間找到那串在哪裡,全部改成 00,直接存檔。


雖然有點麻煩,但也還好。
回复 支持 反对

使用道具 举报

11

主题

102

帖子

1353

积分

初级丹圣

Rank: 8Rank: 8

积分
1353
发表于 2026-2-13 20:10:00 | 显示全部楼层
这帖下面的奇异搞笑,"新建一个相同的参数替换dat就行了",是都不知道当迭代为0的时候会触发init吗。
到底是运行一个脚本快,还是打开模型->发现有鬼画符->关闭模型->移动模型到其他目录->新建相同参数模型->等待迭代大于1->保存->覆盖老模型dat->重新运行模型。快?
天天推崇这种错误的方法,新手不知道要迭代一次吧模型重置了怎么办?
天天把这种设计者设计不到位的地方给用户想办法自己去解决的奇技淫巧去给夸大化,楼主的本意不就是为了减少用户麻烦吗?
并且到了2026年了,还是有人分不清什么是底层参数什么是样本增强参数什么是gan。
甚至还有2万多积分的人说Trueface是扭曲的,Trueface就一个作用在inter的gan,和扭曲有屁关系
回复 支持 反对

使用道具 举报

36

主题

302

帖子

9674

积分

高级丹圣

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

积分
9674
发表于 2026-2-13 22:46:15 | 显示全部楼层
caiji132156 发表于 2026-2-13 20:10
这帖下面的奇异搞笑,"新建一个相同的参数替换dat就行了",是都不知道当迭代为0的时候会触发init吗。
到底 ...

别装了逼哥,cmd里面用deepfacelab里面的python调用这个py文件运行,对新手小白来说还不如新建一个相同参数的_data.dat文件替换呢。
回复 支持 反对

使用道具 举报

29

主题

195

帖子

1417

积分

初级丹圣

Rank: 8Rank: 8

积分
1417
 楼主| 发表于 2026-2-13 23:05:02 | 显示全部楼层
fghfdg 发表于 2026-2-13 22:46
别装了逼哥,cmd里面用deepfacelab里面的python调用这个py文件运行,对新手小白来说还不如新建一个相同参 ...

新建一个相同参数的_data.dat文件替换?参数确实可以新建,那键值呢? 你新建参数只有健名,键值怎么处理? 你不会以为那些上百兆的文件,就几个健名会导致这么大的空间吧?
回复 支持 反对

使用道具 举报

36

主题

302

帖子

9674

积分

高级丹圣

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

积分
9674
发表于 2026-2-14 08:17:21 | 显示全部楼层
day270010678 发表于 2026-2-13 23:05
新建一个相同参数的_data.dat文件替换?参数确实可以新建,那键值呢? 你新建参数只有健名,键值怎么处理 ...

npy用原来的模型啊,又不是用新建的那个。.dat 文件 存储文本型配置键值,有什么所谓
回复 支持 反对

使用道具 举报

29

主题

195

帖子

1417

积分

初级丹圣

Rank: 8Rank: 8

积分
1417
 楼主| 发表于 2026-2-14 11:24:24 | 显示全部楼层
fghfdg 发表于 2026-2-14 08:17
npy用原来的模型啊,又不是用新建的那个。.dat 文件 存储文本型配置键值,有什么所谓 ...

dat 文件 存储文本型配置键值?你不会真以为就这几个键值键名这几个字符dat就会达到上百兆空间吧?你不会以为你训练后dat里面的值不改变吧? 我建议你打印出dat里面的内容看看,是不是就上面我打印的options吧?或者你训练下,看看你每次训练结束,你的dat字节数是否不变
回复 支持 反对

使用道具 举报

11

主题

102

帖子

1353

积分

初级丹圣

Rank: 8Rank: 8

积分
1353
发表于 2026-2-14 12:38:49 | 显示全部楼层
fghfdg 发表于 2026-2-13 22:46
别装了逼哥,cmd里面用deepfacelab里面的python调用这个py文件运行,对新手小白来说还不如新建一个相同参 ...

还记录的迭代数以及每个迭代的loss,随着模型训练这个文件会越来越大
回复 支持 反对

使用道具 举报

11

主题

102

帖子

1353

积分

初级丹圣

Rank: 8Rank: 8

积分
1353
发表于 2026-2-14 12:40:36 | 显示全部楼层
fghfdg 发表于 2026-2-13 22:46
别装了逼哥,cmd里面用deepfacelab里面的python调用这个py文件运行,对新手小白来说还不如新建一个相同参 ...

你们天天要自己手操的东西,就不会整合成模块给用户使用吗,你都不是开发者会从用户角度考虑吗?你的积分还没我用户数多,GUI界面这么简单的东西,难不成小白不会click这个简单的button?
回复 支持 反对

使用道具 举报

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

GMT+8, 2026-3-12 18:00 , Processed in 0.121513 second(s), 35 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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