deepfacelab中文网

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

在图像潜空间跑DFL,期望用更少的资源跑高画质

[复制链接]

7

主题

64

帖子

4572

积分

高级丹圣

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

积分
4572
 楼主| 发表于 2025-5-9 01:42:12 | 显示全部楼层 |阅读模式
星级打分
  • 1
  • 2
  • 3
  • 4
  • 5
平均分:NAN  参与人数:0  我的评分:未评
本帖最后由 lispmox 于 2025-5-9 18:14 编辑

Stable Diffusion会将图像压缩到更小的图片来降低训练和推理开销,比如512x512x3的图片会被压缩成64x64x4的图片,在64x64x4的潜空间下进行图像生成。我在想DFL是否可以也这么做,比如先用SD1.5的AE编码器将原始图片压缩后,再通过liae-udt的DFL模型进行换脸。
花了一个多小时改造了一下代码,挂上去跑跑看。如果有人提前试过了,可否指教一下是否有坑点?

下面是从0跑了2000次迭代后的效果,看上去也许还行?
512分辨率的图像降低到64x64x16的浅空间,bs=4显存占用不到4G,在2080ti上差不多400ms一次迭代。
AE编码器用的是轻量化的taesd的flux适配版
代码基于我自己用pytorch重写的DFLab,比较方便修改和调试。
00002000.jpg 00002000.jpg

35700次迭代后的效果,中途我把random warp关掉了。只是为了验证清晰度,也无所谓会不会被dst带偏,这样跑快一点。
显示的是解码回512x512的画面。看上去mask学习有点问题,因为SD提供的VAE不支持rgba四通道,所以我在mask基础上加上明度和对比度两个通道组成rgb图来编码mask的。这可能导致mask比较难学,可能直接用黑白图更合适。
00035700.jpg 00035700.jpg

把mask转成黑白图进行编码,继续跑到10w次迭代,看上去效果已经不错了。
00101644.jpg 00101644.jpg

新开一次训练,换成sdxl的vae,之前的浅空间是64x64x16的,学习难度大了点,现在的版本是64x64x4的,跑了7500次迭代,出人脸速度更快,最终效果等跑10w次迭代后再看。

00007500.jpg 00007500.jpg

评分

参与人数 2贡献 +2 收起 理由
良民 + 1 喊6666就行
sxl870311 + 1 十分给力!

查看全部评分

回复

使用道具 举报

22

主题

546

帖子

3669

积分

高级丹圣

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

积分
3669

万事如意节日勋章

发表于 2025-5-9 01:50:32 | 显示全部楼层
流弊,期待最终成果
回复 支持 1 反对 0

使用道具 举报

7

主题

223

帖子

1972

积分

初级丹圣

Rank: 8Rank: 8

积分
1972

万事如意节日勋章

发表于 2025-5-9 03:31:50 | 显示全部楼层
本帖最后由 Cxsmo 于 2025-5-9 03:34 编辑

when will code be made public for your dflab pytorch version


回复 支持 反对

使用道具 举报

13

主题

1114

帖子

1万

积分

高级丹圣

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

积分
14260
发表于 2025-5-9 03:45:15 | 显示全部楼层
本帖最后由 seancai110 于 2025-5-9 03:47 编辑

DFl本来就会缩放图片啊。SD的不一样的是语言识别和扩散算法。
DFL在入口会把图片缩放成相应的分辨率,然后在里面的编码器,进一步层层压缩到潜空间,然后再到解码器一层层放大到出口分辨率。
回复 支持 反对

使用道具 举报

7

主题

64

帖子

4572

积分

高级丹圣

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

积分
4572
 楼主| 发表于 2025-5-9 04:09:41 | 显示全部楼层
本帖最后由 lispmox 于 2025-5-9 04:34 编辑
seancai110 发表于 2025-5-9 03:45
DFl本来就会缩放图片啊。SD的不一样的是语言识别和扩散算法。
DFL在入口会把图片缩放成相应的分辨率,然后 ...

SD是在潜空间里做扩散生成,然后通过解码器还原到图像空间。这算是一种降低复杂度的工程技巧吧,不可否认这种压缩到潜空间再生成的过程是有损的,不过DFL这种用mse+dssim损失训练出来的图像质量也不高。

我这么做主要是尝试减少资源占用,DFL的SAEHD架构好久没动过了,拿liae-udt架构为例,编码器下采样5次,解码器上采样5次,inter层是把中间的特征图摊平过了两个线性层。我理解这个架构要获得【分辨率-清晰度-训练速度】三者的平衡,三维存在一个最佳比例。当我想要堆更高的分辨率但又想要保持原本的清晰度时,只能增加三维所有的值,基本上就是用更多的算力去堆分辨率,代价太高了。目前这样修改后,我可以尝试用训练一个64分辨率的模型成本来训练512分辨率的模型。考虑到潜空间的分布有变化,学习难度和图像空间并不一致,最终效果还未可知。

当然,如果是尝试增加下采样的次数来把网络做深而不是做宽,这也是一个策略。但这也可能增加训练难度,而且我没那么多精力和显卡去尝试不同的组合,如果能直接复用旧的架构那就再好不过了。

此外,这只是一个初步尝试,能否训练更高清图像并不完全是架构三维的问题,DFL采用mse+dssim训练得到的图片需要假设图像符合高斯分布,天然会带一点糊。用GAN可以学习一个更符合图片分布的损失函数,但是我发现很容易带偏src脸的面部特征。用扩散模型那种级联VAE的设计,一点一点从模型里扣掉高斯噪声,或者用flow模型去做路径插值,虽然可以生成更高清的图像,但是推理成本太高了。

我这个也算是闭门造车吧,我自己不是研究CV和生成模型的,平时精力也有限,只用作忙碌之余的休闲,如果有理解不对的地方还得和大佬们多学习。
回复 支持 反对

使用道具 举报

13

主题

1114

帖子

1万

积分

高级丹圣

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

积分
14260
发表于 2025-5-9 04:37:29 | 显示全部楼层
本帖最后由 seancai110 于 2025-5-9 04:41 编辑
lispmox 发表于 2025-5-9 04:09
SD是在潜空间里做扩散生成,然后通过解码器还原到图像空间。这算是一种降低复杂度的工程技巧吧,不可否认 ...

根据SD和LLM的发展规律,最重要的是参数的总数,其他的因素只能算微调。毕竟deepseek那样的创新不是一般人做得出来的。所以模型的层数变化,还是宽度变化,影响应该不是很大。

你这样用sd的vae,相当于网络有一部分是现成的,没有训练的。效果怎么样,很难讲。大部分新出的sd架构,都是用自己训练的新vae。

我个人觉得,现在DFL的模型其实都太小了,所以和SD的能力没法比。只不过SD模型太大了,所以没人像DFL这样丢上千张图片进去练。DFL的天花板其实不高。像现在DFL要控制眼神还很难,但是SD上已经有现成的expression editor了,可以精确控制,在云上只用1秒就能改眼神方向。
回复 支持 反对

使用道具 举报

7

主题

64

帖子

4572

积分

高级丹圣

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

积分
4572
 楼主| 发表于 2025-5-9 05:03:51 | 显示全部楼层
本帖最后由 lispmox 于 2025-5-9 05:07 编辑
seancai110 发表于 2025-5-9 04:37
根据SD和LLM的发展规律,最重要的是参数的总数,其他的因素只能算微调。所以模型的层数变化,还是宽度变 ...

理论上当然是参数越多模型越好,这是做通用大模型的思路。DFL做的只是src->dst的视频换脸,不仅要效果好还得速度快。如果用SD那种参数的模型,那可太慢了。另外还有一个问题是,SD这种扩散模型在多帧一致性上表现得并不好,如果想要比较稳定高效地视频换脸,我目前找到比较靠谱地方案也只有自编码器这种架构。

而且DFL的模型参数已经并不少了,liae-udt,512分辨率320,80,80,30三维的模型参数量差不多有0.3B,但是它能做的也就是把src换到dst上去,甚至不是一个像inswapper那样的通用模型。这种参数量和模型能力很显然不匹配的。如果还想要加分辨率,DFL的三维还得加,模型参数量又要涨一圈,但是做的事情无外乎还是把src换到dst上去。如果同样的参数量去堆一个UNet跑扩散算法,单论图片生成的能力绝对比DFL要好得多。

SD的VAE训练的很好,我试过如果把图像编码到潜空间在解码回图像空间,肉眼损失很小。一些图片和纹理可能会出现问题,DFL对这些也处理不好,DFL其实只训练到了皮肤和五官,SD的VAE在大多时候应该够用了。

DFL的用处还是在视频换脸,需要做的只是稳定快速地把src特征迁移到dst,我理解并不需要强求它直接控制表情,直接用liveportrait会更容易。

我也预计会有一些坑,比如mask的处理,以及DFL的训练方法能不能从潜空间生成清晰的图像。不过得等我跑个几十万轮才知道了。

回复 支持 反对

使用道具 举报

7

主题

223

帖子

1972

积分

初级丹圣

Rank: 8Rank: 8

积分
1972

万事如意节日勋章

发表于 2025-5-9 06:55:01 | 显示全部楼层
lispmox 发表于 2025-5-9 04:09
SD是在潜空间里做扩散生成,然后通过解码器还原到图像空间。这算是一种降低复杂度的工程技巧吧,不可否认 ...

will your pytorch version of dfl ever be made public
回复 支持 反对

使用道具 举报

7

主题

64

帖子

4572

积分

高级丹圣

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

积分
4572
 楼主| 发表于 2025-5-9 06:57:03 | 显示全部楼层
Cxsmo 发表于 2025-5-9 06:55
will your pytorch version of dfl ever be made public

There are no plans for this at the moment. Creating a user-friendly DFL replica that's accessible to non-developers would require significant effort, and I currently don't have the time for it.
回复 支持 反对

使用道具 举报

7

主题

223

帖子

1972

积分

初级丹圣

Rank: 8Rank: 8

积分
1972

万事如意节日勋章

发表于 2025-5-9 08:35:12 | 显示全部楼层
lispmox 发表于 2025-5-9 06:57
There are no plans for this at the moment. Creating a user-friendly DFL replica that's accessible  ...

oh, so it's less easy to use then normal dflab
回复 支持 反对

使用道具 举报

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

GMT+8, 2025-5-17 13:04 , Processed in 0.121826 second(s), 40 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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