deepfacelab中文网

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

deepfacelab的XSeg模型替换到rope-live中使用的方法

[复制链接]

1

主题

9

帖子

328

积分

初级丹师

Rank: 3Rank: 3

积分
328
 楼主| 发表于 前天 16:23 | 显示全部楼层 |阅读模式
星级打分
  • 1
  • 2
  • 3
  • 4
  • 5
平均分:NAN  参与人数:0  我的评分:未评
本帖最后由 jklzb 于 2025-11-17 10:26 编辑

前一阵子逛论坛发现有的坛友谈到想把deepfacelab中使用的XSeg遮罩模型替换到rope-live中使用,用过rope-live的都知道自带的XSeg模型效果远不如镇坛之宝,如果能实现这一步那么在rope-live中遮罩处理的效果将大大提升。本着这个想法本人开始了慢慢探索和尝试,以下是一些步骤和方法。


第一步:将deepfacelab的XSeg模型的格式由.npy转换为.onnx(结合第二步中的方法一使用)

在deepfacelab的model目录下,XSeg模型的格式是.npy,而rope-live的models目录下XSeg模型的格式是.onnx,所以首先要做的是进行格式转换。之前的帖子中有坛友提到了GitHub上的那个格式转换工具,本人试了试,照着上面的环境配置一步步来,结果有一个版本的包在网上翻了个遍都找不到,其他版本的又与前面配好的环境不兼容,折腾了半天最后以失败告终。然后开始想其他办法,突然想到在deepfacelab的根目录下有几个关于模型导出的批处理文件,虽然只有将amp和saehd模型导出为dfm格式的命令,但是也可以尝试将XSeg模型导出为onnx格式。通过对比deepfacelab目录下有关saehd模型和XSeg模型的代码发现二者都有关于模型导出的函数export_dfm,所以便在deepfacelab的根目录下又写了一个将XSeg模型导出为onnx格式的命令,经测试最后成功导出。



第二步:用新的XSeg模型替换掉rope-live中的XSeg模型(注意提前备份,注意提前备份,注意提前备份!)

这一步很简单,用新导出的XSeg_model.onnx替换掉rope-live的models目录下的XSeg_model.onnx。就当我以为大功告成时,打开rope-live勾选上dfl遮罩进行测试,结果卡住不动了,看了下后台的报错如下图

报错.png


这个错误是由于输入/输出图像的维度顺序与XSeg模型期望的顺序不匹配导致的。问题在于:
  • 模型期望的维度顺序是:[batch, height, width, channels] 即 [?, 256, 256, 3],也就是NHWC
  • 但实际提供的维度顺序是:[batch, channels, height, width] 即 [?, 3, 256, 256],也就是NCHW


要解决这个问题有两种思路,一个是修改deepfacelab中的代码,使XSeg导出模型的维度顺序是NCHW;另一个思路是修改rope-live中的代码,使输入/输出图像的维度顺序变为NHWC。


先说说第一种方法,在DeepFaceLab\_internal\DeepFaceLab\models\Model_XSeg目录下找到并打开Model.py文件,然后找到export_dfm函数进行下图的修改并保存
image.png

这种方法在将XSeg导出为onnx格式的时候就改变了模型输入输出的维度顺序,一步到位,可以直接放到rope-live中替换使用,省去了修改rope-live相关代码的步骤,推荐使用这个方法。



再来说说第二种方法,在RopeLive\rope目录下打开Models.py,找到其中的run_dfl_xseg函数进行下图的修改


image.png

修改完成后保存代码,打开rope-live进行测试,成功运行,至此大功告成。


最后将deepfacelab中XSeg模型导出为onnx格式的命令文件和已经将镇坛之宝导出的XSeg模型分享给大家,收点小费。















评分

参与人数 1贡献 +1 收起 理由
dfldata1316 + 1 感谢楼主分享

查看全部评分

回复

使用道具 举报

9

主题

62

帖子

3088

积分

高级丹圣

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

积分
3088
发表于 昨天 17:19 | 显示全部楼层
感谢,楼主有没有替换visomaster的xseg模型的方法?
回复 支持 反对

使用道具 举报

1

主题

9

帖子

328

积分

初级丹师

Rank: 3Rank: 3

积分
328
 楼主| 发表于 昨天 20:06 | 显示全部楼层
sinksky 发表于 2025-11-16 17:19
感谢,楼主有没有替换visomaster的xseg模型的方法?

visomaster因为用起来比rope卡,所以没怎么用过,不过这两个差不了太多,你可以试着改改
回复 支持 反对

使用道具 举报

9

主题

62

帖子

3088

积分

高级丹圣

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

积分
3088
发表于 昨天 21:50 | 显示全部楼层
jklzb 发表于 2025-11-16 20:06
visomaster因为用起来比rope卡,所以没怎么用过,不过这两个差不了太多,你可以试着改改 ...

\VisoMaster-ZH\app\processors\face_masks.py      按您的示例修改了这个文件,还是不行,各种报错,用ai改也不行
回复 支持 反对

使用道具 举报

1

主题

9

帖子

328

积分

初级丹师

Rank: 3Rank: 3

积分
328
 楼主| 发表于 昨天 23:54 | 显示全部楼层
sinksky 发表于 2025-11-16 21:50
\VisoMaster-ZH\app\processors\face_masks.py      按您的示例修改了这个文件,还是不行,各种报错,用a ...

如果visomaster能直接使用导出的xseg模型就不用改了;如果要改才能用,把你修改后的函数和报错的截图发出来帮你看看
回复 支持 反对

使用道具 举报

9

主题

62

帖子

3088

积分

高级丹圣

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

积分
3088
发表于 20 小时前 | 显示全部楼层
本帖最后由 sinksky 于 2025-11-17 01:22 编辑
jklzb 发表于 2025-11-16 23:54
如果visomaster能直接使用导出的xseg模型就不用改了;如果要改才能用,把你修改后的函数和报错的截图发出 ...

不能直接用,也是报错,


Max Threads set as 4
backend obs
'obs' backend: OBS Virtual Camera device not found! Did you install OBS?
Error in FrameWorker: Error in execution: Got invalid dimensions for input: in_face:0 for the following indices
index: 1 Got: 3 Expected: 256
index: 3 Got: 256 Expected: 3
Please fix either the inputs/outputs or the model.
Traceback (most recent call last):
  File "D:\VisoMaster-ZH\app\processors\workers\frame_worker.py", line 54, in run
    self.frame = self.process_frame()
  File "D:\VisoMaster-ZH\app\processors\workers\frame_worker.py", line 180, in process_frame
    img, fface['original_face'], fface['swap_mask'] = self.swap_core(img, fface['kps_5'], s_e=s_e, t_e=target_face.get_embedding(arcface_model), parameters=parameters, control=control, dfm_model=dfm_model)
  File "D:\VisoMaster-ZH\app\processors\workers\frame_worker.py", line 658, in swap_core
    img_mask = self.models_processor.apply_dfl_xseg(original_face_256, -parameters["DFLXSegSizeSlider"])
  File "D:\VisoMaster-ZH\app\processors\models_processor.py", line 394, in apply_dfl_xseg
    return self.face_masks.apply_dfl_xseg(img, amount)
  File "D:\VisoMaster-ZH\app\processors\face_masks.py", line 73, in apply_dfl_xseg
    self.run_dfl_xseg(img, outpred)
  File "D:\VisoMaster-ZH\app\processors\face_masks.py", line 118, in run_dfl_xseg
    self.models_processor.models['XSeg'].run_with_iobinding(io_binding)
  File "D:\VisoMaster-ZH\wzf\lib\site-packages\onnxruntime\capi\onnxruntime_inference_collection.py", line 377, in run_with_iobinding
    self._sess.run_with_iobinding(iobinding._iobinding, run_options)
RuntimeError: Error in execution: Got invalid dimensions for input: in_face:0 for the following indices
index: 1 Got: 3 Expected: 256
index: 3 Got: 256 Expected: 3
Please fix either the inputs/outputs or the model.



我直接把这个py发上来您看看怎么改?
face_masks.rar (4.75 KB, 下载次数: 1)

回复 支持 反对

使用道具 举报

0

主题

14

帖子

73

积分

高级丹童

Rank: 2

积分
73
发表于 20 小时前 | 显示全部楼层
感谢教学,明天试试
回复 支持 反对

使用道具 举报

1

主题

9

帖子

328

积分

初级丹师

Rank: 3Rank: 3

积分
328
 楼主| 发表于 13 小时前 | 显示全部楼层
本帖最后由 jklzb 于 2025-11-17 10:30 编辑
sinksky 发表于 2025-11-17 01:20
不能直接用,也是报错,

我更新了帖子,改不了的话可以试试另一种方法
回复 支持 反对

使用道具 举报

11

主题

130

帖子

3028

积分

高级丹圣

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

积分
3028
发表于 1 小时前 | 显示全部楼层
直接替换pore的,失败了;用副本那个改代码也不行~
回复 支持 反对

使用道具 举报

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

GMT+8, 2025-11-17 21:39 , Processed in 0.170867 second(s), 37 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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