Stable Diffusion的发布是一个里程碑,它让人可以使用高性能模型,就图像质量、速度以及资源/内存要求方面,都很友好。下面是关于Stable Diffusion的简单介绍.
- 它可以生成什么?
Stable Diffusion可以用在很多地方,一个是用来从文字生成图片(text2img),上面的图片就是输入的文字,生成的图片。除了文字转图片,另一个主要的用法是让它改变图片,也就是输入图片和想要改变的文字描述。
-
Stable Diffusion的的二个主要组成部分
一是文本处理部分 Text Encoder
ClipText用于文本编码。
输入:文本。
输出:77个标记嵌入向量,每个向量的维度为768。
二是图像处理部分:
(1)Image information Creator
UNet + Scheduler 可以逐渐处理/扩散信息(潜在)空间中的信息。
输入:文本嵌入和一个由噪声组成的多维数组(结构化数字列表,也称为张量)。
输出:处理后的信息数组
(2)Image Decoder
Autoencoder Decoder 使用处理后的信息数组来绘制最终图像。
输入:处理后的信息数组(维度:(4,64,64))
输出:最终图像(维度:(3,512,512),即(红/绿/蓝,宽度,高度))
- Diffusion是什么?
Diffusion是发生在Image information Creator内部的过程。它的输入有文本处理后的特征向量,以及随机初始化的图像信息数组(random imge information tensor),最后图像解码器image decoder使用所有信息绘制出最终的图像。
这个过程是step by step进行的,每一步都会添加更多相关的信息。
渐变发生在多个步骤中,每个步骤都对输入潜变量数组进行操作,并产生另一个潜变量数组,该数组更加符合输入文本和模型从所有训练图像中捕获的所有视觉信息。
通过可视化的方式来看看每一步添加了哪些信息。
连接中的动态图片,展示了其中的过程:
- diffusion扩散模型是如何运作的?
假设有一张图片,同时生成一些噪声,并将噪声添加到图片中。
这就是一个训练样本,使用同样的方式可以创建大量的训练样本,来训练图像生成模型的核心部分。
现在可以把它看作是一个训练的实例,可以用同样的方法得到很多的训练实例,来训练我们图像生成模型的核心部分。
上图展示了一些可选的噪声量值,从原始图像(级别0,不含噪声)到噪声全部添加(级别4) ,很容易地控制有多少噪声添加到图像中。
这个过程可以分散在几十个steps中,对数据集中的每张图像都可以生成数十个训练样本。
和其他的机器学习类似,最终通过训练得到噪声预测器Noise Predictor,当以某一种确定的配置运行时,Noise Predictor就可以生成图像。
- 怎么生成图像?
去除噪声,绘制图像
经过训练的噪声预测器Noise Predictor可以对一幅添加噪声的图像进行去噪,也可以预测添加的噪声量。
如果从图像中减去噪声,就能得到一张更接近模型训练的图像。不是指完全一样的图像,而是具有相似分布的图。它表示了基础的特征信息,比如天空通常是蓝色的,人有两只眼睛,猫有尖的耳朵。
不止Stable Diffusion通过去噪进行图像生成,DALL-E 2和谷歌的Imagen模型都是如此。
以上是图像生成,它可以生成很好看的图像,因为训练数据就是如此。但没有利用任何的文本数据,也就没法用文本控制生成我们期望的图像。
- 文本控制图像生成
需要将条件文本合并到流程中,就可以控制模型生成的图像类型。
前向过程(使用自动编码器的编码器)是我们如何生成训练噪声预测器的数据。一旦训练完成,就能通过运行反向过程(使用自动编码器的解码器)来生成图像。
这两个流程就是LDM / Stable Diffusion论文中图3所示的:
这张图片还展示了“conditioning”组件,也就是描述模型应该生成什么图像的文本提示。
文本编码器:transformer语言模型
transformer语言模型被用作语言理解组件,它接收文本提示并生成token 的嵌入向量。发布的稳定扩散模型使用ClipText(基于GPT的模型),论文中使用的是BERT。
Imagen论文表明,语言模型的选择是一个重要的选择。与更大的图像生成组件相比,更大的语言模型对生成的图像质量有更大的影响。
7.CLIP 是怎么训练的?
CLIP是在一个图像及其标题的数据集上训练的。想象一下,这个数据集有4亿张图片及其标题:
实际上,CLIP是从网上爬取的图片及其“alt”标签上训练的。
CLIP的训练过程可以简单地理解为,拿一张图片和它的描述,我们分别用图片编码器和文本编码器对它们进行编码,然后用余弦相似度比较它们的编码结果。
一开始,即使文本正确描述了图片,它们的相似度也会很低。
更新两个模型,使得下次编码时,它们的编码结果更加相似。
通过在整个数据集上重复这个过程,并且使用大批量数据,我们最终能够得到一个编码器,它能够把一张狗的图片和“一只狗的照片”这句话的编码结果计算出相似的结果。
就像word2vec一样,训练过程也需要包括图片和描述不匹配的负样本,模型需要给它们较低的相似度分数。
将文本信息输入到图像生成过程中
想要把文本信息作为图像生成过程的一部分,就必须调整噪声预测器Unet,把prompt文本作为输入。
现在就包括了编码后的文本、输入图像和预测噪声,都在潜在空间中。从而完成从文本提示,到图像生成.
8.总的来说:
这是一种将文本信息引入到图像生成过程中的算法,主要包括两个部分:文本编码器和图像生成器。其中,文本编码器用于将给定的文本信息转换为向量表示,而图像生成器则用于根据给定的文本信息生成相应的图像。
模型结构包括:
(1)文本编码器
文本编码器用于将给定的文本信息转换为向量表示。具体来说,是采用了预训练的语言模型来实现文本编码器。预训练的语言模型已经在大规模语料库上进行了训练,可以捕捉到自然语言的语义信息。
论文中使用的预训练语言模型是BERT模型。BERT模型是一种基于Transformer的语言模型,具有良好的性能和广泛的应用。在使用BERT模型对给定的文本信息进行编码时,需要对文本进行分段和嵌入处理。文本首先被分成多个片段,然后每个片段被嵌入到一个固定长度的向量中。最终,这些向量被连接在一起,形成一个固定长度的向量,即为文本信息的向量表示。
(2)图像生成器
图像生成器用于根据给定的文本信息生成相应的图像。稳重使用了条件生成对抗网络(cGAN)作为图像生成器,以确保生成的图像与给定的文本信息相匹配。使用了DCGAN(Deep Convolutional Generative Adversarial Networks)作为cGAN的基础结构,并增加了条件信息的输入。
为了进一步提高生成图像的质量,文章中还提出了一种新的生成器结构——Self-Attention GAN(SAGAN)。SAGAN结构使用了自注意力机制,以提取图像中的重要信息,并增加了全局池化层,以减少图像中的噪声。同时,为了避免模型产生模糊和不清晰的图像,还提出了一个梯度惩罚技巧,用于平衡生成器和判别器之间的损失。
(3)训练过程
在训练过程中,需要使用反向传播算法来优化文本编码器和图像生成器的参数,以最大程度地提高生成图像的质量。具体来说,本文使用了ADAM优化器,以优化生成器和判别器的损失函数。
在损失函数方面,采用了条件生成对抗网络的标准损失函数,并增加了文本编码器的L2正则损失函数,用于限制文本信息的向量表示与生成的图像之间的一致性。具体来说,损失函数分为两个部分:对抗损失和重建损失。对抗损失用于优化判别器的参数,以最小化生成图像与真实图像之间的差距。重建损失则用于优化生成器的参数,以最小化生成图像与给定文本信息之间的差距。
在训练过程中,为了增加生成图像的多样性和可控性,本文还采用了条件变分自编码器(cVAE)技术,将潜在空间分为两个部分:均值和方差。通过调整均值和方差的值,可以在潜在空间中生成不同的样本,从而实现图像的多样性和可控性。
(4)应用:
可以应用于多个领域,包括虚拟现实、电影制作、艺术设计等。
稳定扩散模型可以生成高质量的图像,包括风景、人像、动物等。它可以用于图像生成、图像编辑、图像补全等应用。相比于其他图像生成模型,它生成的图像质量更高,更稳定,更易于控制。
来源:
- https://jalammar.github.io/illustrated-stable-diffusion/
- https://zhuanlan.zhihu.com/p/583124756
3.https://openaccess.thecvf.com/content/CVPR2022/papers/Rombach_High-Resolution_Image_Synthesis_With_Latent_Diffusion_Models_CVPR_2022_paper.pdf
4.https://github.com/PaddlePaddle/PaddleNLP/tree/develop/ppdiffusers
本网站文章皆为作者授权。发布者:虹七,转载请注明出处:https://ruofanseo.com/stable-diffusion/