文章主题:自然语言词汇, 语言模型, 图像生成模型, Stable Diffusion

666AI工具大全,助力做AI时代先行者!

编辑:LRS

【新智元导读】小白都能看懂的Stable Diffusion原理!

是否还有记忆中那个风靡全球的图解Transformer呢?近期,知名博主Jay Alammar在个人博客中对备受关注的Stable Diffusion模型进行了深度剖析,为你提供了一份详尽的图解教程,从基础到进阶,全方位助你掌握图像生成模型的核心原理。此外,他还搭配了丰富的视频教学,让你更加直观地理解并应用这些关键知识点。

1701304371836.jpg

文章链接:https://jalammar.github.io/illustrated-stable-diffusion/视频链接:https://www.youtube.com/watch?v=MXmacOUJUaw

图解Stable Diffusion

原内容提到了人工智能模型在图像生成方面的突破性进展,能够根据文字描述生成出令人惊叹的视觉效果。这一技术背后的运行机制虽然神秘,但已经对人类的艺术创作方式产生了影响。稳定扩散(Stable Diffusion)的发布是一个重要的里程碑,为公众提供了一个高性能的图像生成模型。这些生成的图像具有高质量、快速运行以及较低的资源内存需求。文章将揭示稳定扩散的工作原理,让读者对其有更深入的了解。

1701304372277.jpg

Stable Diffusion在功能上主要涉及两个方面:首先,它的核心功能是根据文本提示生成图像(也就是所谓的text2img);其次,用户还可以利用它根据文字描述来修改图像,也就是说,用户可以输入文本并得到相应的图像(即输入为文本图像)。这两个方面的功能共同构成了Stable Diffusion的主要特性。

1701304372476.jpg

在本文中,我们将通过图示来深入解析Stable Diffusion的组成部分以及它们之间的互动关系。同时,我们也将详细介绍图像生成的各项选项与参数所代表的含义。

Stable Diffusion组件

Stable Diffusion是一个复杂的系统,它由多个组件和模型共同构建而成,并非仅由单一模型组成。当我们从整体模型的角度审视其内部结构时,可以看到,该系统包含一个文本理解模块,其主要功能是将文本信息转化为数字形式(numeric representation),以便更好地捕获文本中的深层语义信息。

1701304372805.jpg

尽管我们当前主要从宏观视角分析模型,但随着更多细节的呈现,我们可以对模型做出更深入的推测。事实上,这个文本编码器可以被看作是一种独特的Transformer语言模型,尤其是CLIP模型的文本编码器。该模型的输入为文本字符串,而输出则为数字列表,其中每一个元素都代表文本中的一个单词或token,也就是将每个token转化为相应的向量。之后,这些信息将被送入图像生成器(image generator),它同样拥有多个内部组件。

1701304373129.jpg

在图像生成领域,Stable Diffusion算法采用了独特的双阶段策略。其中,Image Information Creator组件作为Stable Diffusion的核心优势,相较于过往模型,其在性能提升方面取得了显著成果。此组件通过多个步骤产生图像信息,这些步骤均为Stable Diffusion接口及库中的默认参数,通常设定为50或100。

1701304373243.jpg

图像信息创建器在其专属的图像信息空间(或潜在空间)内全速运行,这一独特性质使得其相较于其他在像素空间中运作的Diffusion模型,运行速度更胜一筹。技术层面上,该组件由一个先进的UNet神经网络和一套复杂的调度算法构成。扩散一词在此组件的工作过程中,描绘了信息逐步处理的过程,直至下一个组件(图像解码器)生成出高质量图像。图像解码器的运作原理是,根据从图像信息创建器接收到的信息,绘制出一幅图像,整个过程仅需执行一次,便可生成最终的像素图像。

1701304373410.jpg

可以看到,Stable Diffusion总共包含三个主要的组件,其中每个组件都拥有一个独立的神经网络:1)Clip Text用于文本编码。输入:文本输出:77个token嵌入向量,其中每个向量包含768个维度2)UNet + Scheduler在信息(潜)空间中逐步处理/扩散信息。输入:文本嵌入和一个由噪声组成的初始多维数组(结构化的数字列表,也叫张量tensor)。输出:一个经过处理的信息阵列3)自编码解码器(Autoencoder Decoder),使用处理过的信息矩阵绘制最终图像的解码器。输入:处理过的信息矩阵,维度为(4, 64, 64)输出:结果图像,各维度为(3,512,512),即(红/绿/蓝,宽,高)

1701304373590.jpg

什么是Diffusion?

扩散是在下图中粉红色的图像信息创建器组件中发生的过程,过程中包含表征输入文本的token嵌入,和随机的初始图像信息矩阵(也称之为latents),该过程会还需要用到图像解码器来绘制最终图像的信息矩阵。

1701304373933.jpg

整个运行过程是step by step的,每一步都会增加更多的相关信息。为了更直观地感受整个过程,可以中途查看随机latents矩阵,并观察它是如何转化为视觉噪声的,其中视觉检查(visual inspection)是通过图像解码器进行的。

1701304374295.jpg

整个diffusion过程包含多个steps,其中每个step都是基于输入的latents矩阵进行操作,并生成另一个latents矩阵以更好地贴合「输入的文本」和从模型图像集中获取的「视觉信息」。

1701304374486.jpg

将这些latents可视化可以看到这些信息是如何在每个step中相加的。

1701304374794.jpg

整个过程就是从无到有,看起来相当激动人心。

,时长00:07

步骤2和4之间的过程转变看起来特别有趣,就好像图片的轮廓是从噪声中出现的。

,时长00:06

Diffusion的工作原理

使用扩散模型生成图像的核心思路还是基于已存在的强大的计算机视觉模型,只要输入足够大的数据集,这些模型可以学习任意复杂的操作。假设我们已经有了一张图像,生成产生一些噪声加入到图像中,然后就可以将该图像视作一个训练样例。

1701304374962.jpg

使用相同的操作可以生成大量训练样本来训练图像生成模型中的核心组件。

1701304375207.jpg

上述例子展示了一些可选的噪声量值,从原始图像(级别0,不含噪声)到噪声全部添加(级别4) ,从而可以很容易地控制有多少噪声添加到图像中。所以我们可以将这个过程分散在几十个steps中,对数据集中的每张图像都可以生成数十个训练样本。

1701304375451.jpg

基于上述数据集,我们就可以训练出一个性能极佳的噪声预测器,每个训练step和其他模型的训练相似。当以某一种确定的配置运行时,噪声预测器就可以生成图像。

1701304375558.jpg

移除噪声,绘制图像

经过训练的噪声预测器可以对一幅添加噪声的图像进行去噪,也可以预测添加的噪声量。

1701304375828.jpg

由于采样的噪声是可预测的,所以如果从图像中减去噪声,最后得到的图像就会更接近模型训练得到的图像。

1701304376281.jpg

得到的图像并非是一张精确的原始图像,而是分布(distribution),即世界的像素排列,比如天空通常是蓝色的,人有两只眼睛,猫有尖耳朵等等,生成的具体图像风格完全取决于训练数据集。

1701304376563.jpg

不止Stable Diffusion通过去噪进行图像生成,DALL-E 2和谷歌的Imagen模型都是如此。需要注意的是,到目前为止描述的扩散过程还没有使用任何文本数据生成图像。因此,如果我们部署这个模型的话,它能够生成很好看的图像,但用户没有办法控制生成的内容。在接下来的部分中,将会对如何将条件文本合并到流程中进行描述,以便控制模型生成的图像类型。

加速:在压缩数据上扩散

为了加速图像生成的过程,Stable Diffusion并没有选择在像素图像本身上运行扩散过程,而是选择在图像的压缩版本上运行,论文中也称之为「Departure to Latent Space」。整个压缩过程,包括后续的解压、绘制图像都是通过自编码器完成的,将图像压缩到潜空间中,然后仅使用解码器使用压缩后的信息来重构。

1701304376743.jpg

前向扩散(forward diffusion)过程是在压缩latents完成的,噪声的切片(slices)是应用于latents上的噪声,而非像素图像,所以噪声预测器实际上是被训练用来预测压缩表示(潜空间)中的噪声。

1701304376858.jpg

前向过程,即使用使用自编码器中的编码器来训练噪声预测器。一旦训练完成后,就可以通过运行反向过程(自编码器中的解码器)来生成图像。

1701304377046.jpg

前向和后向过程如下所示,图中还包括了一个conditioning组件,用来描述模型应该生成图像的文本提示。

v2-7bf17cf425214f963f446dfed9f5fdce_b.jpg

文本编码器:一个Transformer语言模型

模型中的语言理解组件使用的是Transformer语言模型,可以将输入的文本提示转换为token嵌入向量。发布的Stable Diffusion模型使用 ClipText (基于 GPT 的模型) ,这篇文章中为了方便讲解选择使用 BERT模型。

v2-917dc069c6479646818b97380591bbe5_b.jpg

Imagen论文中的实验表明,相比选择更大的图像生成组件,更大的语言模型可以带来更多的图像质量提升。早期的Stable Diffusion模型使用的是OpenAI发布的经过预训练的 ClipText 模型,而在Stable Diffusion V2中已经转向了最新发布的、更大的CLIP模型变体OpenClip.CLIP是怎么训练的?CLIP需要的数据为图像及其标题,数据集中大约包含4亿张图像及描述。

v2-49cc3cfba6307edf8f8d5a7980d12c78_b.jpg

数据集通过从网上抓取的图片以及相应的「alt」标签文本来收集的。CLIP 是图像编码器和文本编码器的组合,其训练过程可以简化为拍摄图像和文字说明,使用两个编码器对数据分别进行编码。

v2-35743f22eed9e61d1e2b25342f069b2f_b.jpg

然后使用余弦距离比较结果嵌入,刚开始训练时,即使文本描述与图像是相匹配的,它们之间的相似性肯定也是很低的。

v2-8bb76c5390c6c857806564f82958777f_b.jpg

随着模型的不断更新,在后续阶段,编码器对图像和文本编码得到的嵌入会逐渐相似。

v2-abb78633d59022792d2e4e5d37427de4_b.jpg

通过在整个数据集中重复该过程,并使用大batch size的编码器,最终能够生成一个嵌入向量,其中狗的图像和句子「一条狗的图片」之间是相似的。就像在 word2vec 中一样,训练过程也需要包括不匹配的图片和说明的负样本,模型需要给它们分配较低的相似度分数。

文本信息喂入图像生成过程

为了将文本条件融入成为图像生成过程的一部分,必须调整噪声预测器的输入为文本。

v2-7129bb646baa97b650632e2f4f6d1be3_b.jpg

所有的操作都是在潜空间上,包括编码后的文本、输入图像和预测噪声。

v2-71d4769ff64b62b4e8c98b7864f408a2_b.jpg

为了更好地了解文本token在 Unet 中的使用方式,还需要先了解一下 Unet模型。Unet 噪声预测器中的层(无文本)一个不使用文本的diffusion Unet,其输入输出如下所示:

v2-4bf0824ec6b60ae6bfb96c9b15d74625_b.jpg

在模型内部,可以看到:1. Unet模型中的层主要用于转换latents;2. 每层都是在之前层的输出上进行操作;3. 某些输出(通过残差连接)将其馈送到网络后面的处理中4. 将时间步转换为时间步长嵌入向量,可以在层中使用。

v2-4d36623e10375c2f78aca60c0ff90878_b.jpg

Unet 噪声预测器中的层(带文本)现在就需要将之前的系统改装成带文本版本的。

v2-7d9e323f00d10df9783f3f24e66880cf_b.jpg

主要的修改部分就是增加对文本输入(术语:text conditioning)的支持,即在ResNet块之间添加一个注意力层。

v2-c481e0208afa7cf998ff37369687cdeb_b.jpg

需要注意的是,ResNet块没有直接看到文本内容,而是通过注意力层将文本在latents中的表征合并起来,然后下一个ResNet就可以在这一过程中利用上文本信息。

参考资料:

https://jalammar.github.io/illustrated-stable-diffusion/

https://www.reddit.com/r/MachineLearning/comments/10dfex7/d_the_illustrated_stable_diffusion_video/

自然语言词汇, 语言模型, 图像生成模型, Stable Diffusion

AIGC探索-二维码.jpg

AI时代,拥有个人微信机器人AI助手!AI时代不落人后!

免费ChatGPT问答,办公、写作、生活好得力助手!

搜索微信号aigc666aigc999或上边扫码,即可拥有个人AI助手!

Leave a Reply

Your email address will not be published. Required fields are marked *