模型理论科普·第一辑


更新

本文仅为科普说明,并非研究性/新技术的讲解

如有理论错误,欢迎联系修改

本文中所有资料均可被自由引用。

最终解释权归 作者 所有。

特别鸣谢:元素法典作者群/秋叶甜品店

潜工具书:Stable Diffusion 潜工具书(中文最全文档)

部分引用资料:

stable-diffusion-webui-model-toolkit/README.md

Skip/Reset CLIP position_ids FIX (rentry.org)

【腾讯文档】元素同典:确实不完全科学的魔导书

一、 使用工具

修复/检查模型所使用的工具的下载和安装

这里模型常用的模型检测与处理工具为:

Clip check tensors/model toolkit/model converter

注意:部分插件仅能对于SD1.5的模型使用,SDXL无法使用

1. 工具下载

这3个插件都不是web-ui自带的,所以需要先安装,以下是安装步骤。

Clip check tensors:iiiytn1k/sd-webui-check-tensors (github.com)

model toolkit:arenasys/stable-diffusion-webui-model-toolkit

model converter(模型格式转换)Akegarasu/sd-webui-model-converter

a.使用webUI直接安装

将网址打开后的链接直接填入WebUI插件下载区,等待自动加载完毕即可

b.压缩包下载

【PS:请在任何其他手段均无法下载时使用此方法,极不推荐使用】

github界面点击【Download ZIP】

完整解压后放在扩展文件夹:你的WebUI所在文件夹/extensions

能在顶部栏看到即为安装成功(这里是Kitchen theme折叠了一部分顶部栏)

2. 功能介绍

CLIP tensors checker

用于查询偏移的Clip

model toolkit

用于修复损坏的Clip,导出/更换模型的Unet/VAE/Clip等

model converter

转换模型格式、修复clip、压缩模型

二、 模型问题

这部分为模型理论知识以及常见的模型问题

有关Stable Diffusion的部分基本原理可以查看:【AI绘画】大魔导书:AI 是如何绘画的?Stable Diffusion 原理全解(一) - 哔哩哔哩 (bilibili.com)

有能力的也可以查看生肉文章:

What are Diffusion Models? | Lil'Log (lilianweng.github.io)

这里只讲解通俗易懂的模型相关的内容,所以这里不会摆出一大堆晦涩难懂的“基础知识”来唬人或者是撑篇幅。

3. 【基础】模型三大件:clip、unet、VAE

TextEncoder(Clip):会把tag转化成U-net网络能理解embedding形式

【简单的说就是将“人话”转换成AI能够理解的语言】

U-net:对随机种子生成的噪声图进行引导,来指导去噪的方向,找出需要改变的地方并给出改变的数据

【简单的说就是死盯着乱码图片,看他像什么】

VAE:AI原本的生成图不是人能看的正常图片,VAE的作用就是把AI的这部分输出转化为人能够看的图片。

【简单的说就是把AI输出翻译成人能看到的图片】

模型问题修复前后对比(上面是修复后的)

4. VAE问题

a.VAE问题的原因

模型输出图发灰说明这个模型的VAE出现问题了,常见于融合模型中。不同VAE之间的任何Merge都会导致VAE中的某些东西被破坏。并且很多融合的模型再拿去融合,那么VAE就会跟着破坏。这就是为什么很多模型输出图是灰色的,以及人们热衷于单独使用加外置VAE的原因。

遇到这种情况,一般而言需要修复VAE才能使得模型正常使用。不过web UI提供了外置VAE的选项,可以在生成时忽略模型的VAE而使用外置VAE替代。

例如这种图就是典型的VAE损坏

b.更换模型VAE

更换/使用其他VAE并非很好的解决方案,部分模型在更换VAE后会出现输出图模糊或者线条混乱的情况。

不过不能更换其他VAE并非不能使用原本模型的VAE,Merge模型可以使用原本合并之前的模型VAE,这样效果上就不会出现各种各样的问题。

c.VAE重复

VAE重复:有的人喜欢自己重命名一些现有的VAE,然后把这个VAE当作自己模型的VAE来使用,这就造成了下载了很多VAE,但是一检查哈希发现都是一模一样的。下面是我这里所有的VAE的哈希对照:

d.常见误区/错误说法

【1】“VAE没有注入到模型里,可以自由选用想用的VAE”"VAE是加滤镜的" "VAE可有可无"这种说法都是错误的

【2】VAE颜色深度排序相关的内容同样的不科学的,例如什么“NAI的VAE颜色最浅、840000VAE的颜色最深”之类的。随意更换VAE会影响输出图,部分模型的输出模糊或者线条爆炸就是因为这样产生的。使用没有问题的外置VAE发现输出图发灰那是模型本身的问题,与VAE无关。

【3】VAE的作用并非纠正色调或者是“模型滤镜”

5. clip损坏

a.clip偏移

通常意义上的clip损坏指代clip出现偏移,类似于下面这种

这些东西的是一个 值从 0 到 76int64 张量,模型Merge会将这些张量转换为浮点数并引入错误数值。例如在 AnythingV3 中,值 76 变为 75.9975,当由 webui 加载时该值被转换回 int64结果为 就变成了75。(所以上面这张图其实只有值41会影响模型的正常使用,在toolkit上只显示了会影响模型正常使用的clip值,这也是两个检测工具输出不同的原因)

b.clip偏移的影响

clip偏移会影响模型对于对应位置的token语义的理解,详情可以查看早期“微笑测试”实验(下面的链接),这里引用部分实验内容。

测试参数如下:seed是固定的、clip skip=1、eta=0

smile sleepy girl standing bear

Steps: 40, Sampler: Euler a, CFG scale: 7.5, Seed: 651296271, Face restoration: CodeFormer, Size: 512x512

我们对其修改如下:

1-0:tensor([[ 0,0,2,3,4,5 …

2-0:tensor([[ 0,1,0,3,4,5 …

3-0:tensor([[ 0,1,2,0,4,5 …

3-1:tensor([[ 0,1,2,1,4,5 …

顶部是常规的8528d-fix,smile被忽略。

keychange_8528dfix是修复后的, smile又回来了。

3. break_1-0 smile再次消失

4. break_2-0 sleepy没有体现

5. break_3-0 girl不见了,变成了熊。

6. break_3-1 girl部分的值为1, 女孩没有消失,1的笑容也没有消失。

 break_3-1 结果比较难以分辨

【更详细的测试在链接指向的文章】

引用自:[調査] Smile Test: Elysium_Anime_V3 問題を調べる #3|bbcmc (note.com)

当然了,详情也可以查看下面链接的文章

简单说明/修复:Skip/Reset CLIP position_ids FIX (rentry.org)

很久之前有人通过裁剪FP16的方式“修复”clip,不过现在使用toolkit等插件可以很轻松的修复clip。

6. junk data

a.垃圾(无效)数据的产生

模型融合经常会出现很多webui在跑图过程中实际用不上的junk data,模型里只有固定的那些内容才能够被加载,多出的全是垃圾数据。很多的融合模型都带有这么一堆的垃圾数据,并且很多人总是认为这些junk data删掉会影响模型本身而不去删除。

【1】其中影响最大的是模型EMA:模型在Merge后EMA将不再准确反映UNET,这种情况下EMA不止没啥用,还会影响模型的训练。如果你希望大家能有效的使用EMA,那么请使用训练模型。(融合模型前建议先把模型的EMA全部删掉,因为只要是Merge模型,那么EMA就可以等同于垃圾数据)

【2】部分将LoRA注入到ckp大模型中的操作会产生一部分无效数据

【3】其他不知道哪来的无法使用的数据(原因有很多,不展开讲,真要塞我甚至可以在模型里塞一个原神)

比如有10G多Junk data的传世经典17G模型:

b.模型一般大小

一般模型大小为1.98Gb和3.97Gb有的为7.17G,除非模型各部分精度不同造成的其他模型大小之外,一般而言奇怪大小的模型都会或多或少的存在junk data。

此外,noVAE模型的大小为1.8G左右,noVAE&clip的模型为1.6G

7. 无效精度

a.实际使用更高的精度是没意义的

默认情况下,webui 会将所有加载的模型转换为FP16使用。

所以很多时候更高的精度是没啥意义的,不使用--no-half这些模型将完全相同。而实际上哪怕使用--no-half,模型的差别也并不会很大。很多人对精度本身是没有什么认知的,普遍的直觉是"单精到半精的性能损失是线性的",即一半精度,性能为原本的一半,但在SD推理上事实上的差别是非常小的。

不看标题你能分辨出哪个效果好哪个效果差吗,不叠图的话啥什么都看不出来↓

FP32与FP16的叠图对比:https://imgsli.com/MTgwOTk2

b.作妖的float64

一般而言最常见的是旧版本SuperMerge插件整出来的问题(新版本已修复)。通过检测发现,在一个3.5GB的“FP16”模型里面混又有不少float64的weight,导致了模型出现奇怪的大小。早些时候的toolkit会存在bug无法处理这些float64的weight,更新最新版本后应该解决了这一问题

12
0