StableDidfusion教程AI绘画

如题所述

Stable Dlf fusion原理

让每个人都看懂

AI绘画基本原理

在我们去逛C站的过程中我们知道, Stable Diffusion可用模型有两类:

(1) safe tensors:

safe tensors文件是用numpy保存的, 这意味着它们只包含张量数据, 没有任何代码, 加载.safe tensors文件更安全和快速。供调用的AI绘图大模型。

(2) ck pt:

ck pt文件是用pickle序列化的, 这意味着它们可能包含恶意代码, 如果你不信任模型来源, 加载.ck pt文件可能会危及你的安全。

这里大家简单了解,在C站下载模型的时候,优先下

载.safe tensors即可

03大模型微调技术

Dream booth是google在2022年8月提出的一种新的图像算法,其方法可以完整的获得你想要的模型的视觉特征,它的提出既不是为了训练人物也不是为了训练画风,而是为了能在少量训练图像的基础上完美的还原细节特征。大家来看下图,是在当时微软研发大会上(如果我没记错的话)发布这个模型的时候对细节特征的描绘:

03大模型微调技术

1.为什么要进行大模型微调?

刚刚上文我们介绍的Unet模型是SD中最重要的模型网络, 内部包含上亿个参数,要训练这样一个超大的模型,大概需要15亿个图像文本, 使用256张A 100显卡跑15万个GPU小时, 大概成本是60万美元,我们设计师不能像程序员那样动不动就调函数参数训练模型(主要是不会)。

那咋整?

上面我们讲到UNET泛用性极强, 泛用性极强就会带来风格化不足,可能无法满足特定风格的需要。所以我们往往会对

UNET大模型进行微调, 让他更符合我们的使用场景。

接下来我将要给大家介绍模型微调技术。也就是大家之后在Stable Diffusion里常用的训练方法, 今天不会讲具体怎么训练,我只会给大家讲原理,讲明白了原理,大家在自学训练方法的时候则更容易理解。

2.大模型微调需要解决的两个问题

所有的大模型微调技术,都是基于要解决以下两个问题:

(1)如何减少训练参数,提高训练效率和生成图像的质量;

(2)如何解决模型泛化性差的问题;

a.过拟合(Overfitting) 是指微调模型对原始模型的语义理解程度发生了变化,整体训练出现语义漂移的现象:比如有一只猫, 名字叫jojo, 我拍了他的几十张照片, 一直用a jojo cat这个名字来强化模型对这只猫的认知, 等以后我输入a jojo cat的时候确实能出现想要的这只猫, 但是我输入a cat的时候则出现的画面会很怪异, 这就说明cat这个词被污染了, 出现了过度拟合的现象。

b.欠拟合(Under fitting) 是无法识别这一特征, 比如它就完全识别不出jojo和cat的关系, 这往往是训练样本量不足或者训练样本质量等因素导致,属于训练无效。

好,那么我们来看下常见的大模型微调技术都有哪些,以及他们是如何解决上面两个问题的。

我们常见的大模型微调技术就是以下这四个:

Dream booth/LoRA/Embedding/Hyper network, 这在我们后续学习Stable Diffusion过程中会经常用到, 相信大家都已经或多或少了解一点了,接下来就带大家揭开他们神秘的面纱。

3.Dream booth:

我们先来看Dream booth是怎么解决过拟合这个问题的:

Dream booth要求我们在训练过程中,“特征词+类别”和

“类别”成对出现,解决过拟合的问题;比如之前提到的我如果想训练这只叫JOJO的猫的模型, 又不能让它跟“猫”这个词过度拟合,我们可以采用的这样的输入方法。这样的话AI就能识别到:JOJO cat is a cat named jojo。

我们说过CLIP模型是Text Encoder算法的一种,Text Encoder主要是把自然语义prompt转变为词特性向量Embedding, 所以我们可以针对我们的Prompt到向量的这个映射过程进行训练,去修改他们之间的映射记录关系,从而达到训练特定的人或物的效果,由于他生成的是一套纯文字映射记录,所以体积非常小,一般只有几百k。

举个实际应用的例子,比如下面这个人物大家都很熟悉,是守_望先锋里的Dva:

Dream booth优点是:可以将视觉特征完美融入;

Dream booth缺点是:需要调整UNet所有内部参数, 训练时间长,模型体积大。

4.LoRA(大模型的低秩适配器) :

讲完了Dream booth之后我们来讲一下LoRA, 相信大家都听过这个词了,一定对它非常感兴趣对不对?

正因为LoRA他的插入层较少, 他相较于Dream booth, 可以把训练参数降低1000倍, 对CPU的要求也会下降三倍, 所以训练出来的LoRA模型就会非常小, 一般大家在C站下载过就知道,往往他们只有几十m,而一个大模型往往有几个g,所以他在我们日常工作中变得非常常用。

大家作为新手学习的时候, 可以理解Lora是在原有模型上添加一个“滤镜”,让这个底模往我们期望的效果走。如下图所示,我用了一个rev Animated(一个偏动漫的底模型) , 当我们Prompt不变的情况下, 加了一个盲盒效果的LoRA之后, 相当于是给这个底模型上了一个滤镜,让整体底模型出来的效果往盲盒方向偏重:

5.Embedding(Text In version) :

接下来我们来讲一下Embedding, Embedding也叫Text in version(大家在C站下载的时候注意, 他主要是用于训练特定的人或物) , 它反映的是一个Prompt与对应向量的映射记录关系的算法,可以用于训练特定的人或物。

还记得上面讲我们的咒语是如何起作用的时候的这张图么?

举个实际应用的例子,比如下面这个人物大家都很熟悉,是守望先锋里的Dva:如果我们要通过描述她的特征去把她描述出来, 可能要几千个prompt tag才行, 那我如果每次想生成Dva 都要再打一次这么多prompt肯定不科学, 这时候我们可以把这一串tag打包映射成一个新的词汇叫OW_Dva。

由于这个词是我们自创的, 在CLIP映射集合里找不到对应的映射关系, 所以CLIP会默认给他创建一个新的映射空间, 经过一系列训练之后,我们后续就可以通过输入一个简单的词汇来完成一系列tag的打包效果。

6.Hyper network:

最后我们来看一下Hyper network, 他作为一种即将要被Lora 淘汰了的技术,我们大概略讲一下他的原理就好了。大家先看下图, 我们来总结一下三种技术的原理和在UNET中的使用范围:

Dream booth调整了整个UNET的函数和参数, 所以他体积最大,适用范围最全,但是训练难度和训练耗时和成本最大。

LoRA只将训练参数注入到了部分Transform ar函数中, 所以他不改变原模型,即插即用,模型大小也可控,是我们后续学习的重点。

而Hyper network, 大家看图, 他是新建了一个单独的神经网络模型, 插入到原UNet模型的中间层。在训练过程中, 冻结所有参数,只训练插入部分,从而使输出图像与输入指令之间产生关联关系,同时只改变原模型的一小块内容。

从这个原理的描述上, 大家就能发现, Hyper network这种方法更适合用于训练某种画风,比如像素画之类的,大家在C站能找到的Hyper network模型也几乎都是画风训练的, 但是不是说他不能训练别的, 它也是可以训练人物的, 就是比LoRA 麻烦一点。

总之, 他几乎是一个在国内几乎要被LoRA淘汰的技术(注意是国内,注意是几乎,杠精别杠),大家去知乎什么的看

paper, 关于Hyper Networks的相关paper都在2022年前,所以大家就也把他当成一个”滤镜“来理解即可。

最后说一下声明:在本文中为了方便大家通俗理解,作者对算法原理进行了某种程度的简化,并不能代表模型函数运行的100%实质(防杠)。

温馨提示:答案为网友推荐,仅供参考
相似回答