Stable Diffusion的微调方案:

Stable Diffusion的微调方案:

sd现存多种微调方案:Dreambooth、textual inversion、lora、hyoernetworks、aesthetic embedding

本文主要解释DreamBooth,理解它有助于理解后面的各种方案。

图1:DreamBooth的微调过程(Nataniel Ruiz 2023)

图1的上半部分,做了以下几件事:

1、准备描述的句子("一只松狮狗")和对应句子的3-5张图片(3-5张松狮犬.jpg)

2、句子(Text)和图片(加噪声后的松狮.jpg)输入到SD模型中的编码器中进行编码,最后由解码器解码成图片。

3、生成的图片和原图进行比较,通过损失函数对生成器进行奖惩,更新权值。

图1的下半部分和上半部分几乎一致,只是去除句子中的目标特征(松狮)变成(一只狗),并提供对应图片(狗.jpg)进行训练。这部分的训练在论文中表示为扩散模型的先验知识的保留,假设我们只提供3-5张松狮图去进行微调,很容易造成生成结果的过拟合,导致失去原本基底模型的多样性能力。简单来说,微调成松狮模型后,模型生成其他狗狗的能力就弱化了(当然这可能也是我们需要的)。

下面是DreamBooth的整体损失函数,看不懂可以忽略,

DreamBooth整体损失函数

前半部分,是松狮图的损失函数:是原图, (���+���) 是加噪后的图, ��^ 是扩散模型的去噪方法,它接收噪声图和文字,生成去噪后的图。通过L2像素损失对比x与(���+���)的差异。

后半部分,是狗图的损失函数:结构和前者一致,通过加入 � 来控制影响权重,论文中表示,当 �=1 时,3-5张图片在1000次的训练后,仍旧获得不错的泛化结果。

花瓶融合到了不同的场景里,并没有局限在输入图的背景里


输入(Text+Image),输出(Image)的过程,直接利用了扩散模型的能力去实现。下面仔细讲讲这里发生了什么?这里也可以进一步了解一下扩散模型。

油管大佬关于DreamBooth微调过程示意图 https://www.youtube.com/watch?v=dVjMiJsuR5o

1、对于句子来说,每一个字会被拆分,压扁(flaten)到一个数组里。

2、对于图片来说,它分别被加噪n步与n-1步,生成两张噪声图 �� 与 ��−1 , �� 被输入到扩散模型中,且以文字做为条件引导,通过解码器(VAE)生成一张图片 ���� 。 ���� 会与 ��−1 通过L2损失函数作比较,以两者下一次生成的结果更相似作为目标,进行权重的调整。

3、这个过程不断重复,损失函数的值会不断震荡变小,最终生成的图片就很像原图了。同时,用于条件引导的句子也被模型学习了(这种方式和Condition GAN很像,Text即Condition),下次当这些词与一张面目全非的噪声图一起输入时,就能一层一层'去噪'成关键词背后指代的图片了。


最后,我们看一下对应sd-webui中dreambooth的训练设定。这下就明白dataset和classificaiton指的数据到底时什么了吧。但实操中,仍旧需要我们自己去实验,到底要不要加入分类数据。结合原理与消融实验能更好理解输入输出的前因后果。毕竟机器学习很玄学。(这么说来,我这篇文章也没啥意义,还得自己试)

web-ui中concepts设定

猜你喜欢

转载自blog.csdn.net/sinat_37574187/article/details/132518059
今日推荐