昨日的挑选,决定了今天的结局

咱们好,我是柒八九

前言

良久未见,是否有点想念。

最近,更文速度有点慢,不是说创作到了瓶颈,(放心,原来的各种系列文章都有预备和更文计划,当然,假如咱们有想了解的技能方向也能够谈论和私聊。我能够和咱们一起学习研讨)而是,最近新公司业务比较多,每天下班回来了,有点心力交瘁了。了解博主的都知道,平常的学习和更文都是运用下班时刻。

其实,这篇文章的雏形早在3周前就定了,仅仅有些地方的行文有点拖沓,本着质量优先的原则。宁愿不发也不想发一些半成品来混文章数量。所以,就一向拖着没有发布。当今天正好闲暇了,所以乘热打铁。

本文首要讲述{安稳分散|Stable Diffusion}的实现原理。

假如,想了解该系列(AI相关)的文章,能够参阅咱们现已发布的文章。如下是往期文章。

文章list

  1. 在macOS下,运用AIGC:从0搭一个图文生成网站
  2. ChatGPT:你应该知道的常识

你能所学到的常识点

  1. 什么是{安稳分散|Stable Diffusion} 引荐阅览指数 ⭐️⭐️⭐️⭐️
  2. {安稳分散|Stable Diffusion}的组件 引荐阅览指数 ⭐️⭐️⭐️⭐️
  3. 条件操控 引荐阅览指数 ⭐️⭐️⭐️
  4. {安稳分散|Stable Diffusion}优化处理 引荐阅览指数 ⭐️⭐️⭐️⭐️
  5. {分散模型|Diffusion model}的运作办法 引荐阅览指数 ⭐️⭐️⭐️⭐️⭐️
  6. CFG 值 引荐阅览指数 ⭐️⭐️⭐️⭐️
  7. {安稳分散|Stable Diffusion} v1 vs v2 引荐阅览指数 ⭐️⭐️⭐️⭐️

好了,天不早了,干点正事哇。

Stable Diffusion 是如何运行的


什么是{安稳分散|Stable Diffusion}

{安稳分散|Stable Diffusion}是由StabilityAICompVisRunwayML团队开发的一系列图画生成模型,开端于2022年发布。它的首要功能是依据文本输入生成具有美感和细节的图画,但它还能够履行其他使命,如修正图画缺失部分inpainting)、扩展图画outpainting)和图生图

简而言之,{安稳分散|Stable Diffusion}是一个文本到图画的模型。给它一个文本提示。它将回来一个与文本相匹配的图画。

Stable Diffusion 是如何运行的


{分散模型|Diffusion model}

{安稳分散|Stable Diffusion}属于一类称为{分散模型|Diffusion model}深度学习模型。它们是生成模型,意味着它们被规划用来生成类似于在练习中所见到的新数据。在安稳分散的状况下,数据是图画

为什么它被称为 {分散模型|Diffusion model}?由于它的数学模型十分类似于物理中的分散进程。


{前向分散|Forward Diffusion}

Stable Diffusion 是如何运行的
{前向分散|Forward Diffusion}进程会向练习图画增加噪声,逐步将其转化为不具特征的噪声图画前向进程会将任何猫或狗图画转化为噪声图画。终究,你将无法确认它们开端是一只狗还是一只猫。

就像一滴墨水掉进了一杯水中相同。墨水在水中分散。几分钟后,它会随机散布在整个水中。你无法再判断它开端是掉在中心还是靠近边缘。

下面是一个图画通过{前向分散|Forward Diffusion}的示例。猫的图画变成了随机噪声

Stable Diffusion 是如何运行的


{逆向分散|Reverse Diffusion}

{逆向分散|Reverse Diffusion} 就像倒着播映一段视频。在时刻上往回走。咱们将看到墨滴开端被增加的地方。

Stable Diffusion 是如何运行的

从一个噪声、无意义的图画开端,{逆向分散|Reverse Diffusion} 进程能够康复出一只猫或一只狗的图画。

从技能上讲,每个分散进程都有两个部分:

  1. 漂移或定向运动
  2. 随机运动

{逆向分散|Reverse Diffusion} 进程朝着猫或狗图画的方向漂移,但没有中心状态。这便是为什么成果只能是猫或狗的原因。


前史回忆

在咱们深入探讨{安稳分散|Stable Diffusion}架构和机制之前,让咱们快速回忆一下图画生成的前史以及安稳分散的演化。

Stable Diffusion 是如何运行的

  • 2015年:多伦多大学提出了alignDRAW。这是一个文本到图画模型。该模型只能生成模糊的图画,但展现了通过文本输入生成模型“未见过”的图画的可能性。
  • 2016年:Reed、Scott等人提出了运用生成对抗网络GAN,一种神经网络结构)生成图画的办法。他们成功地从具体的文本描绘中生成了逼真的鸟类和花卉图画。在这项作业之后,一系列依据GAN的模型被开发出来。
  • 2021年:OpenAI发布了依据Transformer架构(另一种神经网络架构)的DALL-E,引起了大众的重视。
  • 2022年:Google Brain发布了Imagen,与OpenAIDALL-E竞争。
  • 2022年:{安稳分散|Stable Diffusion}被宣布为潜在空间分散模型的改进。由于其开源性质,依据它的许多变体和微调模型被创立,并引起了广泛的重视和运用。
  • 2023年:出现了许多新的模型和运用,乃至超出了文本到图画的范畴,扩展到文本到视频或文本到3D等范畴。

从时刻线上能够看出,文本到图画实践上是一个相当年青的范畴。{安稳分散|Stable Diffusion}的出现是一个重要的里程碑,作为一个开源模型,它需求比之前的模型更少的资源,促进了该范畴的指数增加。


{安稳分散|Stable Diffusion}的组件

{安稳分散|Stable Diffusion}并不是一个简略的AI模型,它是将不同的神经网络组合起来的一个进程。咱们能够将{安稳分散|Stable Diffusion}的整个文本到图画生成进程分解为不同的进程,并逐步解说这些进程。

Stable Diffusion 是如何运行的

让咱们从文本到图画生成进程的概述开端。

  • {图画编码器|Image Encoder}:将练习图画转化为潜在空间中的向量,以便进一步处理。
  • 潜在空间是一个数学空间,图画信息能够表明为向量(即数字数组)。
  • {文本编码器|Text Encoder}:将文本转化为高维向量(能够将其视为代表文本含义的数字数组),以便机器学习模型了解。
  • {分散模型|Diffusion model}:以文本为条件,在潜在空间中生成新的图画。(即输入文本引导了在潜在空间中图画的生成)。
  • {图画解码器|Image Decoder}:将潜在空间中的图画信息转化为由像素构成的实践图画。

每个进程都运用自己的神经网络完结。


{文本编码器|Text Encoder}将文本输入转化为嵌入向量

想象一下,你想让一个外国艺术家为你画一幅画,但你不懂他们的言语,你可能会运用谷歌翻译或找一个人来帮助你将你想要表达的内容翻译给他们。

对于图画生成模型来说,状况也是如此——机器学习模型无法直接了解文本,因而它们需求一个{文本编码器|Text Encoder}将你的文本指令转化为它们能够了解的数字。这些数字不是随机的数字,它们被称为文本嵌入,是能够捕捉文本的语义含义(即词与其上下文之间的关系)的高维向量。

Stable Diffusion 是如何运行的

将文本转化为嵌入向量能够有多种办法。{安稳分散|Stable Diffusion}运用了一个Transformer大型言语模型来完结这个使命。假如你对言语模型有所了解,你可能对Transformer这个术语感到了解——它是GPT的根底架构。假如想了解更多的关于ChatGPT的相关原理。能够参阅ChatGPT:你应该知道的常识

事实上,{安稳分散|Stable Diffusion}v1运用了CLIP,这是OpenAI依据GPT开发的模型。{安稳分散|Stable Diffusion}V2运用了OpenClip,一个更大的CLIP版别。

这些编码器模型在包含数十亿个文本和图画对的大型数据集进步行练习,以便学习咱们用来描绘图画的单词和短语的含义。数据集来自于网络上的图画,以及咱们用来描绘这些图画的图画标签(alt标签)。


{分散模型|Diffusion model}通过分散进程绘制图画

{分散模型|Diffusion model}是安稳分散的中心组成部分,它是归纳图画的组件。

为了练习分散模型,有两个进程:

  1. {前向分散|Forward Diffusion}进程用于预备练习样本
  2. {逆向分散|Reverse Diffusion} 进程用于生成图画

{安稳分散|Stable Diffusion}中,这两个进程都在潜在空间中进行,以进步速度。

Stable Diffusion 是如何运行的

{前向分散|Forward Diffusion}进程中,模型逐步向图画增加高斯噪声,将明晰的图画转变为噪声图画。在每个进程中,图画都会增加少量的噪声,并在多个进程中重复此进程。

正如“分散”一词所暗示的那样,这个进程就像是将一滴墨水滴入水中,墨水逐步在水中分散,直到你无法再看到它开端是一滴墨水的痕迹。增加到图画中的噪声模式是随机的,就像墨水颗粒随机分散到水颗粒中相同,但能够操控噪声的数量。此进程在LAION数据集的许多图画进步行,每个图画都增加不同数量的噪声,以创立大量噪声样本来练习{逆向分散|Reverse Diffusion}模型。


{逆向分散|Reverse Diffusion} 进程中,练习了一个{噪声猜测器|Noise Predictor},用于猜测增加到原始图画的噪声,以便模型能够从噪声图画中去除猜测的噪声,得到一个更明晰的图画(在潜在空间中)。你能够将这个进程想象成观察部分分散的墨水滴在水中,并企图猜测它之前地点的位置。

{噪声猜测器|Noise Predictor}是依据ResNet主干结构的U-Net(一种神经网络架构)。

{噪声猜测器|Noise Predictor}练习进程如下所示:

  1. 挑选一张练习图画,比如一张猫的照片。
  2. 生成一个随机的噪声图画。
  3. 通过将这个噪声图画增加到练习图画中必定数量的进程来损坏(corrupt)练习图画。
  4. 教授{噪声猜测器|Noise Predictor}告知咱们增加了多少噪声。这是通过调整其权重并向其展现正确答案来完结的。

Stable Diffusion 是如何运行的

通过练习,咱们有一个能够估量增加到图画中的噪声的{噪声猜测器|Noise Predictor}

它在之前通过{前向分散|Forward Diffusion}预备的练习数据集进步行练习,其方针是尽可能精确地估量噪声,以使去噪后的图画尽可能挨近原始图画。一旦练习完结,它将在其权重中“记住”图画表明,并能够用于从随机的初始噪声图画张量“生成”图画。实践的图画和图画质量在很大程度上取决于原始图画数据集,由于它企图回到原始图画。这个逆向分散进程逐步进行多个进程,以去除噪声。进行更多的去噪进程,图画变得越来越明晰。

Stable Diffusion 是如何运行的

在获取更明晰图画的{逆向分散|Reverse Diffusion}进程中,研讨人员期望通过一种称为条件化的进程来操控图画的外观。假如咱们运用文本,这个进程被称为文本条件化。它通过将文本编码进程中的文本嵌入传递给U-Net,并通过穿插留意机制进行操作。

穿插留意机制基本大将文本嵌入{逆向分散|Reverse Diffusion}每个进程的成果进行兼并。例如,假如你有一个输入提示“猫”,你能够将条件化了解为告知{噪声猜测器|Noise Predictor}:“对于下一个去噪进程,图画应该更像一只猫。现在进行下一步。”条件化也能够通过除文本以外的其他辅导办法进行,例如图画、语义地图、表明等。


{图画解码器|Image Decoder}将图画从埋伏空间翻译成像素

由于咱们进行的分散条件化都是在潜在空间中进行的,所以咱们无法直接检查生成的图画。咱们需求将潜在图画转化回咱们能够看到的像素。这个转化是通过{图画解码器|Image Decoder}完结的。

{安稳分散|Stable Diffusion}中,这个转化器是一个变分自动编码器VAE)。在早期的{前向分散|Forward Diffusion}进程中,咱们运用VAE的编码器部分将原始的练习图画从像素转化为潜在空间,以增加噪声。现在,咱们运用VAE的解码器部分将潜在图画转化回像素。

何为VAE

{变分自编码器|Variational Autoencoder}VAE)神经网络包含两个部分:

  1. 编码器:将图画紧缩为潜在空间中的较低维表明
  2. 解码器:从潜在空间中康复图画

Stable Diffusion 是如何运行的

{安稳分散|Stable Diffusion}模型的潜在空间是4x64x64,比图画像素空间小48倍。一切前向和逆向分散实践上都是在潜在空间中进行的

因而,在练习进程中,它不是生成一个带有噪声的图画,而是在潜在空间中生成一个随机{张量|Tensor}(潜在噪声)。它不是用噪声损坏图画,而是用潜在噪声损坏图画在潜在空间中的表明。这样做的原因是速度更快,由于潜在空间更小。

在深度学习里,Tensor实践上便是一个多维数组。
Tensor的意图是能够发明更高维度的矩阵、向量

{安稳分散|Stable Diffusion}将一切的处理、分散和条件化都在潜在空间中进行,而不是在像素空间中进行的原因是潜在空间更小。这样咱们能够更快地进行这个进程,而不需求消耗大量的计算资源。


{条件操控|Conditioning}

假如没有文本提示,{安稳分散|Stable Diffusion}就不是一个文本到图画的模型。你将只会得到一张猫或狗的图片,没有任何操控它的办法。

这便是{条件操控|Conditioning}的作用。

条件操控的意图是引导噪声猜测器,使得在从图画中减去猜测的噪声后,咱们能够得到咱们想要的成果。


文本调理(文本到图画)

下面是一个概述,说明了文本提示是怎么被处理并输入到噪声猜测器中的。

  • 首要,分词器将提示中的每个单词转化为一个称为符号(token)的数字。
  • 然后,每个符号被转化为一个包含768个值的向量,称为{嵌入|embedding}。这些嵌入向量接着被文本转化器处理,并预备好供噪声猜测器运用。

Stable Diffusion 是如何运行的


Tokenizer

Stable Diffusion 是如何运行的

文本提示首要通过CLIP分词器进行分词。CLIPOpenAI开发的一个深度学习模型,用于生成任何图画的文本描绘。{安稳分散|Stable Diffusion} v1 运用了CLIP的分词器。

分词是计算机了解单词的办法。咱们人类能够读取单词,但计算机只能读取数字。这便是为什么文本提示中的单词首要被转化为数字。

分词器只能对其在练习期间见过的单词进行分词。例如,CLIP模型中有“dream”“beach”,但没有“dreambeach”。分词器会将单词“dreambeach”分割为两个符号“dream”“beach”。因而,一个单词并不总是对应一个符号!

另一个需求留意的细节是空格字符也是符号的一部分。在上述状况中,短语“dream beach”发生了两个符号“dream”“[space]beach”。这些符号与“dreambeach”发生的符号“dream”“beach”(beach之前没有空格)不同。

{安稳分散|Stable Diffusion}模型束缚了文本提示中运用的符号数量为75个。


{嵌入|embedding}

Stable Diffusion 是如何运行的
{安稳分散|Stable Diffusion} v1 运用了OpenAIViT-L/14 CLIP模型。{嵌入|embedding}是一个包含768个值的向量。每个符号都有其自己共同的{嵌入|embedding}向量。{嵌入|embedding}是由CLIP模型固定的,在练习进程中学习得到。

为什么咱们需求{嵌入|embedding}?这是由于某些单词彼此之间密切相关。咱们期望运用这些信息。例如,man(男人)、gentleman(绅士)和guy(家伙)的嵌入几乎相同,由于它们能够互换运用。


将嵌入投喂给噪声猜测器

Stable Diffusion 是如何运行的

在输入嵌入向量到噪声猜测器之前,嵌入需求通过文本变换器的进一步处理。这个变换器就像一个通用的适配器,用于条件操控。在这种状况下,它的输入是文本嵌入向量,但它也能够是其他东西,比如类别标签、图画和深度图。变换器不仅进一步处理数据,还提供了一种包含不同条件模态的机制。


{穿插留意|Cross-attention}

文本变换器的输出在整个U-Net中被噪声猜测器多次运用。U-Net通过{穿插留意|Cross-attention} 机制来运用它。这便是prompt与图画相遇的地方。

以提示“一个有蓝眼睛的男人”为例。{安稳分散|Stable Diffusion}将“蓝”和“眼睛”这两个词进行配对(在提示内部进行自我留意),这样它就生成了一个有蓝眼睛的男人,而不是一个穿戴蓝色衬衫的男人。然后,它运用这个信息来引导{逆向分散|Reverse Diffusion}朝着包含蓝眼睛的图画方向进行。(prompt和图画之间的穿插留意)


{安稳分散|Stable Diffusion}优化处理

到目前为止,咱们对{前向分散|Forward Diffusion}中的练习进程以及怎么依据文本输入在{逆向分散|Reverse Diffusion}进程中生成图画有了更好的了解。但这仅仅个开端,更风趣的部分是咱们怎么依据咱们的需求调整这个进程,以发生更高质量的图画。研讨人员和爱好者提出了许多不同的技能来改进安稳分散的成果。

这些办法中的大多数是在现已练习好的安稳分散模型的根底进步行的。练习好的模型意味着它现已看到并学会了怎么运用其模型权重(辅导模型作业的数字)生成图画。

优化{文本编码器|Text Encoder}

其间一组技能是针对{安稳分散|Stable Diffusion}{文本编码器|Text Encoder}部分的,包含文本反演DreamArtist

  • 文本反演通过为你想要生成的每个新概念或风格学习一个新的关键词嵌入来作业。你能够将文本反演视为告知翻译器 “记住这个新方针叫做’猫狗’,下次我说’猫狗’的时候,你应该告知艺术家画这个方针”
  • DreamArtist通过学习正面和负面关键词来描绘参阅图画。这就像是告知翻译器“这是一张图片,记住它的姿态,并称呼它为你以为最能描绘它的姓名”。

优化U-Net(噪声猜测器部分)

另一组技能首要针对U-Net,即图画生成组件,包含DreamBoothLoRAHypernetworks

  • DreamBooth通过运用新图画数据集对分散模型进行微调,直到它能了解新概念。
  • LoRA通过在穿插留意模型中增加一小组额定的权重,并仅练习这些额定的权重。
  • Hypernetworks运用一个辅佐网络来猜测新的权重,并运用{噪声猜测器|Noise Predictor}中的穿插留意部分插入新的款式。

这些办法基本上是告知艺术家学习一些新的绘画办法,要么是自己学习(DreamBooth),要么是调整现有的款式(LoRA),要么是通过外部帮助(Hypernetworks)。DreamBooth十分有用,但需求更多的存储空间,而LoRAHypernetworks的练习相对较快,由于它们不需求练习整个安稳分散模型。


操控噪声来改进生成图画

另一个技能是通过操控噪声来改进生成图画的办法,包含DALL-E 2Diffusion Dallying

  • DALL-E 2是对原始的DALL-E模型的改进,通过对噪声进行操控来生成更具辅导性的图画。
  • Diffusion Dallying则是在{逆向分散|Reverse Diffusion}进程中参加额定的迭代进程,使模型有更多的时刻去学习并生成更高质量的图画。

这些办法通过更好地操控噪声的引进和图画生成的迭代进程来改进安稳分散的成果。

除了上述办法外,还有其他一些技能可用于改进安稳分散的成果,例如运用更大的模型,优化练习策略,调整超参数等。这些技能的方针是通过不断改进安稳分散的各个组件和流程,以获得更高质量、更契合预期的图画生成成果

总而言之,安稳分散的成果能够通过改进文本编码器U-Net噪声操控以及其他技能来提高。这些技能能够依据具体需求挑选和运用,以实现更好的图画生成作用。


{分散模型|Diffusion model}的运作办法

方才咱们从上帝视角审视{分散模型|Diffusion model}的内部机制,让咱们来看一些具体的示例,了解其运作办法。

文本到图画

在文本到图画的进程中,你给{分散模型|Diffusion model}一个文本提示,它会回来一张图画。

第一步:{安稳分散|Stable Diffusion}潜在空间中生成一个随机{张量|Tensor}

你能够通过设置随机数生成器的种子来操控这个张量。假如你将种子设置为特定的值,每次都会得到相同的随机张量。这个张量代表了潜在空间中的图画,但目前仅仅一片噪声。

Stable Diffusion 是如何运行的

第二步:{噪声猜测器|Noise Predictor} 也便是 U-Net 接收潜在噪声图画文本提示作为输入,并猜测出潜在空间中的噪声(一个4x64x64的张量)。

Stable Diffusion 是如何运行的

第三步:从潜在图画中减去潜在噪声。这将成为你的新潜在图画。

Stable Diffusion 是如何运行的

第二步和第三步将重复进行必定次数的采样进程,例如20次。

第四步:终究,VAE的解码器将潜在图画转化回像素空间。这便是在运转{安稳分散|Stable Diffusion}之后得到的图画。

Stable Diffusion 是如何运行的

以下是图画在每个采样进程中的演化状况。

Stable Diffusion 是如何运行的


噪声调度

图画从喧闹变为明晰。真实的原因是咱们在每个采样进程中测验得到预期的噪声。这便是噪声调度

下面是一个比如。

Stable Diffusion 是如何运行的
噪声调度是咱们自己定义的。咱们能够挑选在每个进程中减去相同数量的噪声。或者咱们能够在开端时减去更多的噪声,就像上面的比如。采样器在每个进程中减去恰好足够的噪声,以达到下一个进程中的预期噪声。这便是你在上面图画中看到的进程。


图生图

图生图是首次在SDEdit办法中提出的一种办法。SDEdit能够运用于任何分散模型。因而,咱们能够运用图生图办法来进行安稳分散

图生图的输入包含输入图画和文本提示。生成的图画将同时遭到输入图画和文本提示的束缚

例如,运用左侧的简略图片和{提示|Prompt}为“拍照完美绿色苹果带茎、水滴和戏剧性灯火”的输入,图生图能够将其转化为专业绘画:

Stable Diffusion 是如何运行的

下面是具体的处理进程。

第一步:将输入图画{编码|Encoder}潜在空间中。

Stable Diffusion 是如何运行的

第二步:向潜在图画中增加噪声。去噪强度操控增加了多少噪声。假如去噪强度为0,不会增加任何噪声。假如去噪强度为1,将增加最大量的噪声,使潜在图画变成彻底随机的张量。

Stable Diffusion 是如何运行的

第三步:{噪声猜测器|Noise Predictor} 也便是 U-Net以潜在的噪声图画和文本提示作为输入,并猜测潜在空间中的噪声(一个4x64x64的张量)。

Stable Diffusion 是如何运行的

第四步:从潜在图画中减去潜在噪声。这成为你的新潜在图画。

Stable Diffusion 是如何运行的

第三步和第四步会重复履行必定数量的采样进程,例如,重复20次。

第五步:终究,VAE的解码器将潜在图画转化回像素空间。这便是在运转图画到图画的进程中得到的图画。

Stable Diffusion 是如何运行的

图生图的含义:它的首要作用是在初始潜在图画中增加一些噪声和一些输入图画。将去噪强度设置为1等同于文本到图画text-to-image)的进程,由于初始潜在图画彻底是随机噪声。


{修正|Inpainting}

{修正|Inpainting}实践上仅仅图生图的一个特殊状况。噪声被增加到需求修正的图画部分。噪声的量同样由去噪强度操控。


{深度到图画|Depth-to-image}

{深度到图画|Depth-to-image}是对图生图的增强,它运用深度图进行附加的条件束缚生成新的图画。

进程1:将输入图画编码为{潜在状态|latent state}

Stable Diffusion 是如何运行的

第2步。MiDaS(一种AI深度模型)从输入图画中估量深度图。

Stable Diffusion 是如何运行的

第3步。向潜在图画增加噪声。去噪强度操控增加的噪声量。假如去噪强度为0,则不增加噪声。假如去噪强度为1,则增加最大噪声,使潜在图画成为随机张量。

Stable Diffusion 是如何运行的

第4步。{噪声猜测器|Noise Predictor}依据文本提示和深度图来估量潜在空间的噪声。

Stable Diffusion 是如何运行的

第5步。从潜在图画中减去潜在噪声,得到新的潜在图画。

Stable Diffusion 是如何运行的

第4步和第5步在采样进程中重复进行。

第6步。VAE的解码器将潜在图画解码。现在你从深度到图画得到了终究的图画。

Stable Diffusion 是如何运行的


CFG 值

CFG是{无需分类器辅佐|Classifier-Free Guidance}的简称。为了了解CFG是什么,咱们需求首要了解它的前身,分类器辅佐

分类器辅佐

分类器辅佐是在{分散模型|Diffusion model}中将图画标签纳入考虑的一种办法。你能够运用标签来辅导分散进程。例如,标签“猫”将引导{逆向分散|Reverse Diffusion} 进程生成猫的照片。

分类器辅佐标准是一个参数,用于操控分散进程应该多大程度上遵从标签。

假设有3组带有标签“猫”、“狗”和“人类”的图画。假如分散是未引导的,模型将从每个组的整体中抽取样本,但有时可能会生成合适两个标签的图画,例如一个男孩抚摸一只狗的图画。

Stable Diffusion 是如何运行的

在高分类器辅佐下,{分散模型|Diffusion model}生成的图画会偏向极端或明确的示例。假如你要求模型生成一只猫的图画,它将回来一张明确是猫而不是其他东西的图画。

分类器辅佐标准操控着辅佐的紧密程度。在上面的图中,右侧的采样比中心的采样具有更高的分类器辅佐标准。在实践中,这个标准值仅仅对朝着具有该标签数据的漂移项的乘法因子。


CFG value

无分类器辅佐(CFG)标准是一个值,用于操控文本提示对分散进程的影响程度。当该值设为0时,图画生成是无条件的(即疏忽了提示)。较高的值将分散进程引导向提示的方向。


Stable Diffusion v1 vs v2

模型差异

Stable Diffusion v2运用OpenClip进行文本嵌入,而Stable Diffusion v1运用Open AICLIP ViT-L/14进行文本嵌入。这个改变的原因如下:

  1. OpenClip的模型比CLIP模型大五倍。更大的文本编码器模型能够进步图画质量。
  2. 虽然Open AICLIP模型是开源的,但这些模型是运用专有数据进行练习的。切换到OpenClip模型使研讨人员在研讨和优化模型时具有更多的透明度,有利于长期的开展。

练习数据的差异:

  • Stable Diffusion v1.4在以下数据集进步行练习:
    • laion2B-en数据集进步行了237,000个进程,分辨率为256256
    • laion-high-resolution数据集进步行了194,000个进程,分辨率为512512
    • 在“laion-aesthetics v2 5+”数据集进步行了225,000个进程,分辨率为512512,而且取消了10%的文本条件。
  • Stable Diffusion v2在以下数据集进步行练习:
    • 在通过过滤的LAION-5B子集进步行了550,000个进程,分辨率为256×256,运用LAION-NSFW分类器进行挑选,设置punsafe=0.1,美学评分>=4.5。
    • 在相同数据集进步行了850,000个进程,分辨率为512×512,而且束缚了图画分辨率>=512×512。
    • 运用v-objective在相同数据集进步行了150,000个进程。
    • 768x768的图画上再进行了额定的140,000个进程。
  • Stable Diffusion v2.1在v2.0的根底进步行了微调,包含:
    • 在相同数据集上额定进行了55,000个进程(punsafe=0.1)。
    • 别的进行了155,000个额定进程(punsafe=0.98),终究关闭了NSFW过滤器。

关键总结

在本文中,我企图用简略的术语解说安稳分散的作业原理。以下是一些关键:

  • 安稳分散是一个首要从文本生成图画的模型(受文本束缚),但也能够依据其他指令(如图画/表明)生成图画。
  • 安稳分散的练习进程包含逐步向图画中增加噪声(前向分散)并练习{噪声猜测器|Noise Predictor}逐步去除噪声以生成更明晰的图画(逆向分散)。
  • 生成进程(逆向分散)从潜空间中的随机噪声图画(张量)开端,并逐步分散成一个明晰的图画,以提示为条件。
  • 有许多技能能够改进安稳分散的成果,包含在嵌入层进步行的文本反演和DreamArtist,以及在分散模型进步行的LoRADreamBoothHypernetworks。而这些技能列表还在不断增加。

跋文

分享是一种情绪

参阅资料:

  1. How does Stable Diffusion work
  2. SD是怎么运转的

全文完,既然看到这里了,假如觉得不错,顺手点个赞和“在看”吧。

Stable Diffusion 是如何运行的