https://civitai.com/models/249129?modelVersionId=314259
莉沫酱的随机融合模型!
事情是这样的,最近我测试了不少网上的stable diffusion的动漫风格模型。
其中有1些模型的效果还不错,不过它们各自都有些缺点,于是我就想,那我来做1个天衣无缝的模型好了!
原理是这样的,有2个假设:
- 合并模型的权重不会引入额外的过拟合。
- 在符合语义方面表现得更好的模型在其他方面也能表现得更好。
嘛,直觉上是这样,第1个假设应该是对的,第2个……我不好说。要是问我为什么我就回答「有人托梦给我」。
总之,这样1来,我们只需要1个特定的指标,然后在各个模型加权得到的空间里暴力搜索,找出1份指标最高的权重就可以了!
效果
测试用的prompt是这样:
{什么职业}, indoors, twintails, cowboy shot
完整的参数是:
chef,
indoors, twintails, cowboy shot
Negative prompt: (worst quality, low quality:1.4)
Steps: 50, Sampler: DPM++ 2M SDE Karras, CFG scale: 7, Seed: 1, Size: 512x704, Model hash: 1a2f3cebaa, Model: rimochan_random_mix, VAE hash: 500ea30284, VAE: blessed2.vae.safetensors, Eta: 0.68, Script: X/Y/Z plot, X Type: Prompt S/R, X Values: "chef,scientist,witch,priest,maid,magical girl,ninja", Version: v1.7.0
生成的图片就是上面的样例了。
训练步骤
我们前面说要直接搜出1个指标最高的模型嘛,所以做法是这样:
首先我们需要准备`n`个表现比较好的模型,把他们放在数组`a`里,也就是`[a[1], a[2], ... a[n]]`。
接下来我们还需要另1个长度为`n`的`float`数组`k`,代表给每个模型的乘上这个权重,这样它们融合出来的模型就是: sum([a[i] * k[i] for i in range(n)])。
然后我们还要准备1个黑盒函数`f`,用来测试融合出来的模型的指标。我的测指标的仓库是这个: https://github.com/RimoChan/stable-diffusion-anime-tag-benchmark ,测的指标是每张图32标签下的平均准确率。
好,这样1来问题就变成了找1个`k: list[float]`,使`f(sum([a[i] * k[i] for i in range(n)]))`最大,所以只要挂1个贝叶斯优化让它慢慢跑上几天就好了。
总之贝叶斯跑完之后,最终确实可以得到1个看起来指标不错的模型。相比起第二名(blue pencil v10),在单个prompt含有2~128标签的测试中,都有2%~27%的提升。
具体的数值大家可以回指标的那个仓库看完整的结果。
Description
Details
Downloads
233
Platform
PixAI
Platform Status
Available
Created
1/27/2024
Updated
6/5/2025
Deleted
-