Giter Site home page Giter Site logo

rimo_random_mix's Introduction

莉沫酱的随机融合模型!

事情是这样的,最近我测试了不少网上的stable diffusion的动漫风格模型。

其中有1些模型的效果还不错,不过它们各自都有些缺点,于是我就想,那我来做1个天衣无缝的模型好了!

原理是这样的,有2个假设:

  • 合并模型的权重不会引入额外的过拟合。

  • 在符合语义方面表现得更好的模型在其他方面也能表现得更好。

嘛,直觉上是这样,第1个假设应该是对的,第2个……我不好说。要是问我为什么我就回答「有人托梦给我」。

总之,这样1来,我们只要对于每个层,选择它是由哪几个模型的该层以什么样的权重融合,然后在所有权重参数的空间里做搜索,最终让准确度最高就可以了。

效果

测指标的仓库是这个: https://github.com/RimoChan/stable-diffusion-anime-tag-benchmark

具体的指标计算方式和详细的指标,感兴趣的话可以点到里面去看看,这里就只说结论,是这样——

标签准确度,相比ACG模型的平均值提升37%,并且在各个方向均有8%~151%的提升。

这个比例随着prompts的数量上升,在32标签时提升56%,高于所有典型模型的准确度。

各个方向的情况是这样,数值为准确度:

CXL2.0 平均值 偏差
艺术破格 0.353 0.141 +150.35%
人物 0.846 0.608 +39.14%
人文景观 0.947 0.859 +10.24%
构图 0.689 0.455 +51.43%
物品 0.94 0.791 +18.84%
自然景观 0.982 0.905 +8.51%
限制级 0.679 0.367 +85.01%
总体 0.829 0.603 +37.48%

生成图片的具体效果在这个文档里,有1些可爱的测试图片,有兴趣的话进去可以看1下: https://c.librian.net/

模型下载

Github的LFS超过1G居然要收钱!所以我就把模型传到Civitai了,下载的链接在这里:

普通版: https://civitai.com/models/249129

XL版: https://civitai.com/models/358055

原理

我们前面说要直接搜出1个指标最高的模型嘛,所以做法是这样:

假设我们手里有2个模型a和b,它们分别有3层,即ax、ay、az和bx、by、bz。

那么我们想要得到1个新的模型c,它也有3层cx、cy、cz,那么可以这样得到c:

cx = w1 * ax + (1-w1) * bx
cy = w2 * ay + (1-w2) * by
cz = w3 * az + (1-w3) * bz

其中,ax、ay、az和bx、by、bz是已知的,w1、w2、w3是3个未知数。

我们将w1、w2、w3作为贝叶斯搜索的参数,这样1来,每进行1轮贝叶斯搜索,我们就能得到1个确定的模型c。

有了模型c,我们就可以对c测指标(也是用上面那个仓库),然后将测出来的指标送回贝叶斯搜索的奖励函数,让它进行下1轮搜索。

这样1来,就可以不停地搜索,然后你就等着,等到指标基本不涨(大概需要几天时间),就可以得到1个生成效果不错的模型了。

当然实际代码里会复杂1些,比如2个模型可以扩展到n个,就不具体说它们了,细节可以参考烙印融合.py烙印剧城.py这2个代码。

结束

好,就这样,大家88,我要回去和1girl亲热了!

还有我突然想起来天衣无缝,那天衣其实是乳胶衣吧!

rimo_random_mix's People

Contributors

rimochan avatar

Stargazers

looom avatar Wang Xiang avatar Karako avatar  avatar axty avatar Ting-Che Lin avatar  avatar  avatar  avatar  avatar  avatar Kev06 avatar  avatar yibie avatar  avatar 1ris_W avatar  avatar  avatar 祀画 avatar 梦飞翔 avatar Bingjie YAN avatar Sacabambaspis avatar sansiny avatar 穹苍233 avatar  avatar karasu avatar iamazy avatar

Watchers

iamazy avatar  avatar  avatar

rimo_random_mix's Issues

在融合超级多的模型时会产生的问题

这个项目融合的方式是将每一层相同位置的权重进行线性叠加。
然而,有三个事实:
(1) 除了第一层的输入维度和最后一层的输出维度外,完全可以重排参数张量的输入/输出通道的顺序,而不影响结果数值。
(2) 不同数据训练出来的模型没有办法保证相同位置的通道具有相同的功能。
(3) 每一层的参数数值大致上服从高斯分布

因为上述原因,两个不同模型的同一层的参数在叠加时只能看作两个随机分布的样本进行叠加。
这样会导致两个问题:
(1) 结果分布的方差变小
(2) 信息丢失

在叠加的模型数量较少时,问题(2)不是那么明显,所以可以仅仅通过除以一个系数进行解决问题(1)得到一个堪用的模型。
但是随着模型数量增加,对于每层来说所有通道的数值都会趋向于整个层的平均,问题(2)会越发明显。
这该如何解决🤔

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.