当前位置:首页|资讯|AIGC|Stable Diffusion

AIGC名词解释:Stable Diffusion 稳定扩散模型 I

作者:新设技发布时间:2023-10-20

原标题:AIGC名词解释:Stable Diffusion 稳定扩散模型 I

用设计师能理解的语言

来解释AIGC中的技术名词

AIGC 属于跨学科的产物,涉及领域众多,包括高等数学、统计学、计算机图形图像学、机器学习等各个领域。AIGC 设计软件的界面上往往会涉及到许多这些领域的技术术语。要想搞清楚它们背后的知识体系需要展开的知识树体量十分庞大繁杂。术业有专攻,我们无法全面俱到地在每一个领域都做到精通,但又需要了解到一定的程度,以便更好地使用 AIGC 的相关软件。所以,我们将尽量以设计行业从业者能理解的语言来解释那些经常遇到无法绕开的技术术语。

Stable Diffusion 稳定扩散模型(上)

Stable Diffusion 是 Diffusion扩散模型中最先进的模式,它采用了更加稳定、可控和高效的方法来生成高质量图像。在生成图像的质量、速度和成本上都有显著的提高,因此该模型可以直接在消费级显卡上实现图像生成,可达至少512*512像素的图像。最新的XL版本可以生成1024*1024的图像。生成效率也比以往的Diffusion扩散模型提高了30倍。目前 Stable Diffusion 的应用已经不局限于图像生成领域,它还被广泛应用于自然语言处理、音频生成等领域。

Stable Diffusion 背后的公司 Stability AI,是于2022年8月由 CompVis、Stability AI和 LAION 的研究人员在 Latent Diffusion Model 的基础上创建的。其核心技术来源于 AI 视频剪辑技术创业公司 Runway 的 Patrick Esser,以及慕尼黑大学机器视觉学习组的 Robin Romabach 这两位开发者在计算机视觉大会 CVPR22 上合作发表的潜扩散模型(Latent Diffusion Model)的研究(论文:https://arxiv.org/abs/2112.10752 )。

Stability AI 旗下各大项目

除了 Stable Diffusion,Stability AI 雄心勃勃的计划下面还聚集了 EleutherAI 和LAION 等知名开源项目,以及生物模型 OpenBioML、音频生成 Harmonai、人类偏好学习 Carperai、多模态 DeepFloyd 等更多项目。Stability AI 的迅速崛起给因 ChatGPT 而闻名天下的 OpenAI 公司造成了不小压力,前 Oculus CTO John Carmack 表示:“Stable Diffusion 是一个开源炸弹。OpenAI 虽然资金充裕,但从商业化以及产品化的角度很难与其匹敌。”

Stable diffusion 相比它的祖宗版本 Latent diffusion 主要有以下几点改进:

  • 训练数据:Latent Diffusion 是采用 laion-400M 数据训练的,而 Stable Diffusion 是在 laion-2B-en 数据集上训练的,明显后者用了更多的训练数据,而且后者还采用了数据筛选来提升样本数据质量,比如去掉有水印的图像以及选择美学评分较高的图像。
  • Text Encoder:Latent Diffusion采用一个随机初始化的 Transformer 来编码 text,而 Stable Diffusion 采用一个预训练好的 Clip text encoder来编码 text,预训练的 text model 往往要优于从零开始训练的模型。
  • 训练尺寸:Latent Diffusion 是在256x256分辨率上训练,而 Stable Diffusion 是先在256x256分辨率上预训练,然后再在512x512分辨率上微调优化的,而现在已经再次升级到1024*1024的分辨率了。

然而 Latent Diffusion 可以说是Stable Diffusion的鼻祖,因为它用浅空间的方法解决了 Diffusion 效率低下的问题,它的U-Net是在潜空间的低维度中进行运算,这极大地降低了内存消耗和计算复杂度。例如,一个(3,512,512)的图像,意味着 RGB 三个通道*512*512像素的图像,其像素维度的数据体积在 786432 之上,而潜空间中会变成(4,64,64),内存消耗将会减少到原来的64分之1。

Stable Diffusion 的三个主要组件(每个组件都是一个神经网络) ,也称为三大基础模型:

  • CLIPText 用于文本编码,使文本数字化:

    Input:输入文本;

    Output:77 token embeddings vectors,每个 token 向量有 768 个维度;

  • U-Net + Scheduler 用于逐步处理/扩散被转化到潜空间中的信息:

    Input:文本嵌入和由噪点组成的起始多维矩阵(是一种结构化的数字列表,也称为张量Tensor);

    Output:处理后的信息矩阵;

  • Auto-EncoderDecoder (主要是一个VAE:Variational AutoEncoder )使用处理后的信息矩阵解码绘制出最终图像,把潜空间的运算结果解码成实际图片维度: Input:处理后的信息矩阵,维度: (4,64,64); Output:生成的图像,维度:(3, 512, 512)为(RGB三个通道、和两个像素尺寸);

之前了解了那么多人工智能AIGC领域的概念和词汇,为的就是更系统地了解 Stable Diffusion 。所以我们要用更精细的方式来接续解构和学习 Stable Diffusion 的运作原理。

Jay Alammar

Jay Alammar 专门写了一篇文章,配了35张简明扼要的拓扑图,并配了视频,深入浅出地详细讲解了 Stable Diffusion 的运作原理。(可以通过以下地址访问:https://jalammar.github.io/illustrated-stable-diffusion/)为了讲清楚 Stable Diffusion 的工作原理,我们引用并翻译了其中的部分内容。

Stable Diffusion 稳定扩散模型是多才多艺的,它可以被应用在许多方面。但在 AIGC 设计领域,我们仅关注它的两个主要方面:

第一个是文生图(text2img)。上图展示了一套文本和对应生成的图像。这套文本就是Prompt提示词,图中提示词的例子是:paradise cosmic beach。

文生图:提示词“paradise cosmic beach”生成了对应的图片

第二个是改变图片。很明显,改变图片需要的是输入一张图片,还有提示词。对应的例子是第一次生成的图+一套增加的提示词 Pirate ship。

提示词修图:修图提示词“Pirate ship”在原图上进行了新元素的添加

Stable Diffusion 稳定扩散模型的组成架构

Stable Diffusion,其实它本身并不是一个模型,而是一个由多个模块和模型组成的系统。

当我们把它解剖开来发现,其中首先有一个文本理解组件( Text Understander 图中蓝色模块),它将文本信息转换为用数字表达的信息(通常为一个数据集 ),它的用途是捕捉文本的含义。

蓝色模块为文本理解组件 Text Understander

这个文本理解组件如果按照技术结构组成来说,可以理解为一个文本编码器(Encoder),是一个特殊的 Transformer 语言模型(技术术语: CLIPText ,或 Clip模型文本编码器)。它的输入是文本,输出则为数据集,即用数据集的方式来表达文本中的每个单词/token(通常每个向量对应一个token)。

然后,这些信息输入给由若干模块组成的图像生成器(Image Generator 图中粉色黄色模块 ) 。

蓝色3*5的格子为Token转化的数据集,粉红色黄色模块为图像生成器 Image Generator

这个图像生成器进一步拆解如下:

  • Image information creator 图像信息创建器

    这个模块就是 Stable Diffusion 稳定扩散的核心武器,是它比以前的 Diffusion 版本能够获得更多性能提升的地方。此组件反复运行多步(Steps)来生成用于产生图像的信息。Steps 数值通常默认为 50 或 100。

    图像信息创建器完全在潜在空间中工作,这使它比以前在像素空间中工作的效率提高了64倍。从技术上讲,这个组件由一个 U-Net 神经网络和一个调度算法组成。

    在这个图像信息创建器组件中,信息的运行方式是一个逐层处理的机制,然后输出给下一个模块——图像解码器(Image Decoder)来生成最终的图像。

图像生成器 Image Generator 中的结构

  • Image Decoder 图像解码器

    图像解码器根据从图像信息创建器处获得的信息绘制图像。它只在之前的 Diffusion 过程完全结束时才运行一次,以生成最终的像素图像。

构成 Stable Diffusion 模型的三大组件

通过上述讲解,我们了解到构成 Stable Diffusion 的三个主要组件 CLIPText 用于文本编码(Text Encoder)、U-Net 用于逐步处理/扩散被转化到潜空间中的信息、VAE 使用处理后的信息矩阵解码绘制出最终图像,把潜空间的运算结果解码成实际的图片。

要继续往下进行,我们首先要详细了解一下,到底什么是“Diffusion 扩散”?

“Diffusion 扩散”到底是什么意思?

首先,扩散的过程发生在图中粉红色的部分,即图像信息创建器(Image Information Creator)组件中。这部分同时包含了两个输入:①从文本编码器( CLIP Text模型)输出过来的Token embeddings,和②随机的初始图像信息矩阵,即潜空间的噪点图,然后经过图像信息创建器(Image Information Creator)处理后输出③处理过的图像信息矩阵(图像数据集),最终交给图像解码器来绘制图像。

粉红色部分:图像信息创建器(Image Information Creator)组件

输入① ②,再输出 ③,这些步骤不是一次性完成的,而是一个反复迭代多次的进程 ,每一次迭代都会去掉部分噪点并添加更多与目标图片相关的信息。

不仅仅为了讲述这个模型的方便,在实际执行过程中,都会在每一次迭代步骤后添加一个检查点,以查看图像中的噪点被逐渐去除并生成到了何种程度。这也是我们在使用 Stable Diffusion WebUI 软件时看到的,每过一段时间预览窗口中就会生成出一个中间步骤的图像。

当扩散过程发生时,每迭代一步就引入一个 U-Net 预测噪点矩阵,并用之前一步包含噪点的图片减去这个预测噪点矩阵,产生一个更好的、噪点更少的图片。所谓“更好”的意思就是,这个图片更像从预先训练好的大模型中抽取出的所有与输入文本语义相关的图片在潜空间中的表达。50或100步迭代后,便最终生成了结果,一个不带任何噪点的图片从潜空间矩阵中被解码出来。还是一头雾水?接下来下面我们会详细逐步地介绍。

这里我们可以看出,CLIP 文本语义的潜空间矩阵和大模型中提炼出来的 U-Net 预测噪点潜空间矩阵给 Diffusion 的多次迭代过程提供了不断校准的能力。

如果我们在某一次迭代步骤之后检查一下潜空间矩阵,看看这个扩散过程进展到了什么程度。比如我们在第 1、2、4、5、10、30、50 步后查看,就会发现,它呈现如下图的状态。

在第 1、2、4、5、10、30、50 步后查看噪点去除情况

这就是之前我们提过的Diffusion模型中的反向过程(Reverse Diffusion Process) 。而前向过程就是预训练模型阶段,通过不断地加噪点去训练模型对每一个阶段噪点的预测能力,以便为日后反向过程中为每一次迭代去噪点阶段提供噪点校准的能力。

下面我们先来看看前向(训练)阶段具体发生了什么。如之前所述,Diffusion 扩散模型生成图像(反向过程)的过程中最关键地方是我们事先拥有了一个强大的 U-Net 模型。这个模型预训练的过程可以简述为以下几个步骤。

假设我们有了一张照片(下图中1),并生成了一些随机噪点(下图中2),然后在若干噪点强度中选择其中某一个强度级别(下图中3),然后将这个特定强度级别的噪点加到图片中(下图中4)。这样,我们就完成了一次典型的样本的训练。(注意,噪点并不是直接在像素维度加到图片上的,而是在潜空间中加到图片的潜空间数据矩阵中的。这里的噪点图只是为了方便大家理解。)


Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1