deepfacelab中文网

 找回密码
 立即注册(仅限QQ邮箱)
12
返回列表 发新帖
楼主: day270010678

融合合成的时候遮罩模式的full

[复制链接]

41

主题

260

帖子

2008

积分

初级丹圣

Rank: 8Rank: 8

积分
2008
 楼主| 发表于 2026-7-15 22:59:16 | 显示全部楼层
本帖最后由 day270010678 于 2026-7-15 23:01 编辑
jaysfing 发表于 2026-7-15 22:22
我测试了 会有色差 full 模式下换的脸颜色变白,是因为 halo 修正代码里 prd_face_bgr = prd_face_bgr * ( ...

脸颜色变白,这是肯定的,因为用的是原图的形态,但是脸部颜色是训练的时候或者说被替换脸的颜色,这个应该受到rct或者lct哪里的参数影响。脸的形状还是原始的训练的。你的思路也很好。你觉得效果好的话,就发出来,让大家用你这个,但是我不建议把方框消除,因为这个方框是表示原脸替换的范围,这个没必要消除,因为你会发现原来替换的时候,整个位置是有所改变的,比方说头顶会超过被替换目标的头顶,这样能更好的观察替换效果。
回复 支持 反对

使用道具 举报

9

主题

166

帖子

6919

积分

高级丹圣

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

积分
6919
发表于 2026-7-16 01:15:49 | 显示全部楼层
本帖最后由 jaysfing 于 2026-7-16 01:31 编辑
day270010678 发表于 2026-7-15 22:59
脸颜色变白,这是肯定的,因为用的是原图的形态,但是脸部颜色是训练的时候或者说被替换脸的颜色,这个应 ...

您的方案是正方形遮罩,覆盖范围是 100%    在边缘做颜色混合,SRC 肤色向 DST 靠拢。肤色差异小的时候还行 肤色差异大时会产生分界线,特别是额头顶部肤色不对  我试了怎么调halo_zone 阈值都难以消除 有点弊端。
我这个方案是切割的  是靠SAEHD模型去预测和计算边缘  进行切割  形成固定遮罩  弊端更大  不能体现full的优势
后来想了个两全其美的办法:
使用halo_fix_mask膨胀系数   不会削掉脸部边缘:
  1.         expanded_mask = cv2.dilate(halo_fix_mask, cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (output_size//3, output_size//8)))
复制代码

宽度膨胀到三分之一覆盖横向脸部边缘,高度只膨胀八分之一避免底部光晕。这个比例是基于人脸的一般比例
这样的效果虽然比不上正方形遮罩的完整覆盖,但遮罩覆盖范围足够大,保留了完整的脸部边缘,同时底部不溢出光晕  边缘过渡甚至更自然


总结就是用您的原创颜色混合逻辑,去处理遮罩边缘。
用模型轮廓膨胀后的遮罩,这个遮罩本身就已经贴合人脸,边缘光圈比正方形小得多。在这个基础上,颜色混合方法只作用于遮罩最边缘的极小范围,完成最后的肤色过渡。
遮罩形状解决了覆盖率问题,颜色混合解决了边缘融合问题。两者结合就同时具备了 full 的较完整覆盖和自然过渡。







回复 支持 0 反对 1

使用道具 举报

41

主题

260

帖子

2008

积分

初级丹圣

Rank: 8Rank: 8

积分
2008
 楼主| 发表于 2026-7-16 01:35:03 | 显示全部楼层
本帖最后由 day270010678 于 2026-7-16 01:37 编辑
jaysfing 发表于 2026-7-16 01:15
您的方案是正方形遮罩,覆盖范围是 100%    在边缘做颜色混合,SRC 肤色向 DST 靠拢。肤色差异小的时候还 ...

你的这种,你有没有考虑过羽化参数?我留的正方形是打算让人观察整个替换范围,最后可以小幅度羽化彻底消除这个正方形,保持融合的自然,但是按照你说的额头顶部肤色不对,这个我不晓得,我没测试过极端的,我就是简单的测试大众的。你最好发个图片比较下。把用我的方法和你的方法融合后比较下,这样大家更直观看。我想你理解错了我为什么要消除这个光圈,我只所以要消除这个光圈,是因为这个光圈会覆盖脸部甚至身体部分,会把脸部周围或者脸部本身会发出带光的彩虹。导致替换周围会有部分模糊,并且是不透明的那种模糊。
回复 支持 反对

使用道具 举报

0

主题

138

帖子

3094

积分

高级丹圣

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

积分
3094

万事如意节日勋章

发表于 2026-7-16 08:57:52 | 显示全部楼层
jaysfing 发表于 2026-7-15 22:22
我测试了 会有色差 full 模式下换的脸颜色变白,是因为 halo 修正代码里 prd_face_bgr = prd_face_bgr * ( ...

感谢!
回复 支持 反对

使用道具 举报

0

主题

138

帖子

3094

积分

高级丹圣

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

积分
3094

万事如意节日勋章

发表于 2026-7-16 09:23:24 | 显示全部楼层
jaysfing 发表于 2026-7-15 22:22
我测试了 会有色差 full 模式下换的脸颜色变白,是因为 halo 修正代码里 prd_face_bgr = prd_face_bgr * ( ...

能分享下你优化后的完整文件吗?
回复 支持 反对

使用道具 举报

9

主题

166

帖子

6919

积分

高级丹圣

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

积分
6919
发表于 2026-7-17 03:37:09 | 显示全部楼层
本帖最后由 jaysfing 于 2026-7-17 03:42 编辑
day270010678 发表于 2026-7-16 01:35
你的这种,你有没有考虑过羽化参数?我留的正方形是打算让人观察整个替换范围,最后可以小幅度羽化彻底消 ...

我以前也观察到full模式能够非常大面积的换脸,而且非常贴近于SRC,比真脸模式真实,但是这正方形框肯定不能作为最终输出的成品,就作罢了。你的帖子提供了一个非常好启发和思路:利用SAEHD训练学习到的dst预测遮罩,相比xseg严格切割脸部或遮挡物边缘来说,这个思路肯定是能获得更好的换脸效果,毕竟换脸覆盖率大了,能换更多的src进去效果肯定会越好,当然理论上最好的是换整个头(可惜废了),但这个方向绝对没错。

但是这个方案中有个问题  这个渐变融合就一定会产生模糊地带(光圈) ,并且由于是预测遮罩 不像xseg是静态的 prd_face_dst_mask_a_0 这个值在帧间浮动导致遮罩区域跟着跳,最终在合成视频时序上会产生抖动

针对这两个问题我的思路是
1.模型预测的遮罩  高斯模糊后膨胀,覆盖范围接近正方形遮罩,达到 full 模式的覆盖率,然后靠prd_face_dst_mask_a_0  人脸区域值接近 1的部分进行换脸  比如发际线、耳朵边缘、下巴外侧都会变成换脸目标区域 ,不产生光圈。
2.在MergeMasked.py 里加文件读写逻辑,每帧处理完后把遮罩写入临时文件,下一帧读取上一帧的遮罩做加权平均。每帧先读文件拿到上一帧的遮罩,加权平均后更新自己的遮罩,再把结果写入文件供下一帧读,这样保障平滑性不抖动。或者更简单粗暴,直接使用xseg遮罩膨胀来确保时序平滑。


回复 支持 1 反对 0

使用道具 举报

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

GMT+8, 2026-8-28 12:46 , Processed in 0.146935 second(s), 29 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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