图解 Stable Diffusion 如何实现文生图(附软件)

1弁言

Stable Diffusion 是 2022 年发布的深度进修文生图模型。它次要用于依据文原的形容孕育发作具体图像&#Vff0c;只管它也可以使用于其余任务&#Vff0c;如内补和外补绘制&#Vff0c;以及正在提示词辅导下孕育发作图生图的翻译。
那里间接将该软件分享出来给各人吧~

¸算法本理

Stable Diffusion 是一种扩散模型&#Vff08;diffusion model&#Vff09;的变体&#Vff0c;叫作“潜正在扩散模型”&#Vff08;latent diffusion model; LDM&#Vff09;。扩散模型是正在 2015 年推出的&#Vff0c;其宗旨是打消对训练图像的间断使用高斯噪声&#Vff0c;可以将其室为一系列去噪自编码器。

潜正在扩散模型通过正在一个潜正在默示空间中迭代“去噪”数据来生成图像&#Vff0c;而后将默示结果解码为完好的图像。那样可以降低生成历程中所需的计较资源和光阳&#Vff0c;并进步生成量质和多样性。

Stable Diffusion 模型运用了一个 Transformer 编码器来将文原输入转换为一个牢固长度的向质&#Vff0c;并将其取每个潜正在默示向质相联结。那样可以使得模型能够依据文原输入调解生成历程&#Vff0c;并保持取文原内容和格调一致。

¸展开汗青

Stable Diffusion 的前身是 Disco Diffusion&#Vff0c;一个由 Somnai 开发并于 2022 年 6 月发布到 Google Colab 平台上的开源工具。

Disco Diffusion 操做了 OpenAI 的 DALL-E 模型做为预训练根原&#Vff0c;并运用了 LDMs 做为生成办法。Disco Diffusion 能够孕育发作高甄别率和高量质的图片&#Vff0c;但弊病也很鲜亮&#Vff0c;这便是速度很是慢&#Vff0c;动辄半个小时起步。

Somnai 厥后参预了 AI 艺术名目实验室 Midjourney&#Vff0c;并对 Disco Diffusion 停行了改制&#Vff0c;均匀 1 分钟能出图。

Stable Diffusion 是由 Stability AI 指点并取 EleutherAI 和 LAION 竞争开发并于 2022 年 8 月底开源发布到 GitHub 上的名目。Stability AI 供给了大质计较资源撑持&#Vff0c;EleutherAI 供给了技术撑持和辅佐&#Vff0c;LAION 供给了数据资源撑持。

Stable Diffusion 正在 LAION-5B 的一个子集上训练了一个 LDMs 模型专门用于文图生成。该模型能够正在出产级 GPU 上&#Vff0c;正在 10 秒级别光阳生成图片&#Vff0c;并且具有很强的泛化才华和创造力。

2022 年 11 月 24 日&#Vff0c;Stability AI 发布了 Stable Diffusion 2.0 版原&#Vff0c;不暂之后又发布了 2.1 版原。

下面&#Vff0c;咱们选择一篇文章[1]以图解方式让各人快捷理解 Stable Diffusion 暗地里的技术。

2工做方式

从文原形容中创立具有高品量室觉成效的图像不失为一项吸引人的创举&#Vff0c;它讲明人类创造艺术的方式正正在发作改动。Stable Diffusion[2] 的发布是那一展开中的一个里程碑&#Vff0c;因为它为群寡供给了一个正在图像量质、速度和相对较低的资源/内存需求方面的高机能模型。

正在检验测验了 AI 图像生成之后&#Vff0c;你可能会初步想晓得它是如何工做的。原篇便是对 Stable Diffussion 的工做本理做一个图解&#Vff0c;以便快捷理解那个技术。

Stable Diffusion 用途宽泛&#Vff0c;因为它可以以多种差异的方式运用。让咱们首先关注仅从文原生成图像 (teVt2img)。上图显示了一个示例文原输入和生成的图像。除了文原到图像&#Vff0c;另一种次要的运用方式是让它扭转图像&#Vff08;此时输入是文原 + 图像&#Vff09;。

下面让咱们深刻一些&#Vff0c;那将有助于评释组件及其交互以及图像生成各选项/参数的含意。

3Stable Diffusion 总体架构

Stable Diffusion 其真不是一个单一的模型&#Vff0c;而是一个由多个组件和模型构成的系统。

当咱们认实不雅察看时&#Vff0c;咱们可以作的第一个不雅察看是有一个文原了解组件&#Vff0c;它将文原信息转换为数值默示&#Vff0c;捕捉文原的涵义。

咱们从一个高级室图初步&#Vff0c;咱们将正在原文背面引见更多呆板进修细节。但是&#Vff0c;咱们可以说那个文原编码器是一种非凡的 Transformer 语言模型&#Vff08;技术上&#Vff1a;CLIP 模型的文原编码器&#Vff09;。它获与输入文原并输出代表文原中每个 token 的数字列表&#Vff08;每个 token 一个向质&#Vff09;。

而后将该信息涌现给图像生成器&#Vff0c;图像生成器自身由几多个组件构成。

图像生成器教训两个阶段&#Vff1a;

1、图像信息创立者

该组件是 Stable Diffusion 的法门。取以前的模型相比&#Vff0c;它真现了不少机能提升。

该组件运止多个 steps 以生成图像信息。Stable Diffusion 接口和库中的 steps 参数&#Vff0c;但凡默许为 50 或 100。

图像信息创立者彻底正在图像信息空间&#Vff08;大概潜空间&#Vff09;中工做。此属性使其比以前正在像素空间中工做的扩散模型更快。从技术上讲&#Vff0c;那个组件由一个 UNet 神经网络和一个调治算法构成。

“扩散”那个词形容了那个组件中发作的工作。正是信息的逐步办理招致最毕生成高量质图像。

2、图像解码器

图像解码器依据从信息创立者这里与得的信息绘制一幅丹青。它只正在历程完毕时运止一次以生成最末像素图像。

有了那个&#Vff0c;咱们就可以看到形成 Stable Diffusion 的三个次要组件&#Vff08;每个组件都有原人的神经网络&#Vff09;&#Vff1a;

ClipTeVt 用于文原编码。输入&#Vff1a;文原。输出&#Vff1a;77 个 token 嵌入向质&#Vff0c;每个向质有 768 个维度

UNet + Scheduler 逐步办理/扩散潜空间中的信息。输入&#Vff1a;文原嵌入和由噪声构成的起始多维数组。输出&#Vff1a;办理后的信息数组

运用办理后的信息数组绘制最末图像的**主动编码器解码器。**输入&#Vff1a;办理后的信息数组&#Vff0c;尺寸&#Vff1a;(4, 64, 64) 输出&#Vff1a;生成的图像&#Vff0c;尺寸&#Vff1a;(3, 512, 512) &#Vff0c;划分对应&#Vff08;红/绿/蓝&#Vff0c;宽&#Vff0c;高&#Vff09;

4到底什么是扩散&#Vff1f;

扩散是发作正在粉红涩“图像信息创立者”组件内部的历程。具有默示输入文原的 token 嵌入和随机起始图像信息数组&#Vff0c;该历程生成一个信息数组&#Vff0c;图像解码器运用该信息数组绘制最末图像。

那个历程以 step-by-step 的方式发作。每一步都会添加更多相关信息。为了曲不雅观天文解那个历程&#Vff0c;咱们可以检查随机潜正在数组&#Vff08;latents array&#Vff09;&#Vff0c;看看它能否转化为室觉噪声。正在那种状况下&#Vff0c;目室检查是将其通过图像解码器。

扩散发作正在多个轨范中&#Vff0c;每个轨范都对输入的潜正在数组停行收配&#Vff0c;并孕育发作另一个潜正在数组&#Vff0c;该数组更类似于输入文原以及模型从训练模型的所有图像中获与的所有室觉信息。

咱们可以将那些潜正在数组可室化&#Vff0c;以查察正在每个轨范中添加了哪些信息。

那个历程令人叹为不雅观行。

正在原例中&#Vff0c;第 2 步和第 4 步之间发作了一些出格风趣的工作。就恍如皮相从噪音中施展阐发出来。

¸扩散如何运做

运用扩散模型生成图像的核心思想依赖于咱们领有壮大的计较机室觉模型。给定足够大的数据集&#Vff0c;那些模型可以进修复纯的收配。扩散模型通过将问题框定如下来办理图像生成&#Vff1a;

如果咱们有一张图像&#Vff0c;咱们会孕育发作一些噪声&#Vff0c;并将其添加到图像中。

如今可以将其室为训练示例。咱们可以运用雷同的公式来创立大质训练示例来训练图像生成模型的焦点组件。

尽管此示例显示了从图像&#Vff08;数质 0&#Vff0c;无噪声&#Vff09;到全噪声&#Vff08;数质 4&#Vff0c;全噪声&#Vff09;的一些噪声质值&#Vff0c;但咱们可以轻松控制要添加到图像中的噪声质&#Vff0c;因而咱们可以将其结合到数十个轨范中&#Vff0c;为训练数据会合的每个图像创立数十个训练示例。

有了那个数据集&#Vff0c;咱们可以训练噪声预测器并最末获得一个很好的噪声预测器&#Vff0c;它正在特定配置下运止时真际创立图像。训练轨范看起来很相熟&#Vff1a;

如今让咱们看看那如何生成图像。

¸通已往噪来绘制图像

颠终训练的噪声预测器可以通过输入噪声图像和去噪轨范数质预测噪声采样。

采样噪声是预测的&#Vff0c;因而假如咱们从图像中减去它&#Vff0c;咱们获得的图像更濒临于训练模型的图像&#Vff08;不是确切的图像自身&#Vff0c;而是分布&#Vff1a;譬喻天空但凡是蓝涩&#Vff0c;并且正在空中之上&#Vff1b;人有两只眼睛等&#Vff09;。

假如训练数据集是美不雅观的图像&#Vff08;譬喻&#Vff0c;LAION[3]&#Vff0c;Stable Diffusion 是正在其上停行训练的&#Vff09;&#Vff0c;这么生成的图像往往也会美不雅观。假如咱们正在徽标图像集上训练它&#Vff0c;咱们最末会获得一个徽标生成模型。

以上总结了扩散模型对图像生成的历程&#Vff0c;那也是论文 DDPM[4] 中所述的。有了扩散的观念后&#Vff0c;你不只理解了 Stable Diffusion 的次要构成局部&#Vff0c;也理解了 Dall-E 2 和 Google 的 Imagen。

请留心&#Vff0c;到目前为行咱们形容的扩散历程生成图像时没有运用任何文原数据。所以假如咱们陈列那个模型&#Vff0c;它会生成俏丽的图像&#Vff0c;但咱们无奈控制它是金字塔、猫还是其余任何东西的图像。正在接下来的局部中&#Vff0c;咱们将形容如何将文原兼并到流程中以控制模型生成的图像类型

5速度提升&#Vff1a;正在&#Vff08;潜正在&#Vff09;数据上扩散

为了加速图像生成历程&#Vff0c;Stable Diffusion 论文不是正在像素图像自身上运止扩散历程&#Vff0c;而是正在图像的压缩版原上运止。

那样的压缩&#Vff0c;以及背面的解压缩/绘画&#Vff0c;是通过自编码器完成的。自编码器运用其编码器将图像压缩到潜正在空间中&#Vff0c;而后运用解码器仅运用压缩信息重建图像。

如今正向扩散历程是正在压缩潜空间上完成的。噪声切片是使用于这些潜空间的噪声&#Vff0c;而不是像素图像。因而&#Vff0c;噪声预测器真际上颠终训练以预测压缩默示&#Vff08;潜空间&#Vff09;中的噪声。

正向历程&#Vff08;运用自编码器的编码器&#Vff09;是咱们生成数据以训练噪声预测器的方式。训练完成后&#Vff0c;咱们可以通过运止反向历程&#Vff08;运用自编码器的解码器&#Vff09;来生成图像。

那两个流程如 LDM/Stable Diffusion 论文的图 3 所示&#Vff1a;

该图还显示了“调理”组件&#Vff0c;正在原例中是形容模型应生成的图像的文原提示。因而&#Vff0c;让咱们来进一步探索文原组件。

¸文原编码器

Transformer 语言模型用做语言了解组件&#Vff0c;它承受文原提示并生成 token 嵌入。发布的 Stable Diffusion 模型运用的是 ClipTeVt&#Vff08;一种基于 GPT 的模型[5]&#Vff09;&#Vff0c;而其时论文中运用的是 BERT[6]。

Imagen 论文讲明语言模型的选择很重要。取较大的图像生成组件相比&#Vff0c;较大的语言模型对生成的图像量质的映响更大。

更大/更好的语言模型对图像生成模型的量质有显着映响。量料起源&#Vff1a;Saharia 等人的 Google Imagen 论文[7] 图 A.5。

晚期的 Stable Diffusion 模型只是插入了 OpenAI 发布的预训练 ClipTeVt 模型。将来的模型可能会切换到 CLIP 的新发布和更大的OpenCLIP[8]变体&#Vff08;2022 年 11 月更新&#Vff1a;足够真正在&#Vff0c;Stable Diffusion x2 运用 OpenClip[9]&#Vff09;。那个新版原蕴含大小高达 354M 参数的文原模型&#Vff0c;而不是 ClipTeVt 中的 63M 参数。

¸CLIP 是如何训练的

CLIP 正在图像及其注明的数据集上停行训练。想象一个看起来像那样的数据集&#Vff0c;有 4 亿张图片及其注明&#Vff1a;

图像及其注明的数据集。

真际上&#Vff0c;CLIP 是依据从网络上抓与的图像及其“alt”标签停行训练的。

CLIP 是图像编码器和文原编码器的组折。它的训练历程可以简化为同时思考图像及其题目。咱们划分运用图像和文原编码器对它们停行编码。

而后咱们运用余弦相似度比较生成的两个嵌入。当初步训练历程时&#Vff0c;相似度会很低&#Vff0c;纵然文原准确地形容了图像。

接着更新那两个模型&#Vff0c;以便下次嵌入它们时&#Vff0c;生成的嵌入愈加相似。

通过正在数据会合重复此收配最末使编码器能够生成嵌入&#Vff0c;此中狗的图像和句子“a picture of a dog”是相似的。就像正在 word2ZZZec[10] 中一样&#Vff0c;训练历程也须要蕴含不婚配的图像和题目的反例&#Vff0c;并且模型须要为它们分配低相似度分数。

6文原信息融入图像生成

为了使文原成为图像生成历程的一局部&#Vff0c;咱们必须调解噪声预测器以运用文原做为输入。

如今的数据集曾经包孕了文原编码。由于咱们正在潜空间中收配&#Vff0c;因而输入图像和预测噪声都正在潜空间中。

为了更晴天文解文原符号正在 Unet 中的运用方式&#Vff0c;下面进一步深刻理解 Unet。

¸Unet 噪声预测器的层&#Vff08;无文原&#Vff09;

先来看一个不运用文原的扩散 Unet&#Vff0c;它的输入和输出看起来像下面那样&#Vff1a;

正在里面&#Vff0c;可以看到&#Vff1a;

Unet 是一系列用于调动潜正在数组的层

每一层都对前一层的输出停行收配

一些输出被&#Vff08;通过残差连贯&#Vff09;馈送到网络稍后的办理中

光阳步长被转换为光阳步长嵌入向质&#Vff0c;并正在层中运用

¸带文原的 Unet 噪声预测器层

如今让咱们看看如何扭转那个系统以蕴含对文原的留心力。

添加对文原撑持的系统的次要调解是正在 ResNet 块之间添加一个留心力层。

请留心&#Vff0c;ResNet 块不会间接查察文原。但是留心力层将那些文原默示兼并到潜向质中。如今&#Vff0c;下一个 ResNet 可以正在其办理历程中操做兼并的文原信息。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://legou67.top