SD
50
DPM++ 2M SDE Karras
7
(worst quality, low quality:1.4)
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%的提升。
具体的数值大家可以回指标的那个仓库看完整的结果。