深入解析Stable Diffusion:从文本到图像的生成奥秘
深入解析Stable Diffusion:从文本到图像的生成奥秘
Stable Diffusion是一种先进的文本到图像生成模型,能够将文字描述转化为高分辨率的图像。本文将深入解析Stable Diffusion的工作原理,帮助读者理解其内部机制,并通过Diffusion Explainer工具进行可视化学习。
什么是Stable Diffusion?
Stable Diffusion是一种文本到图像的模型,能够将文本提示转化为高分辨率图像。例如,如果你输入“a cute and adorable bunny”,Stable Diffusion会在几秒钟内生成描绘这一内容的高分辨率图像——一只可爱的小兔子。点击Diffusion Explainer中的“Select another prompt”可以更改提示,并查看每个提示生成的有趣图像!
Stable Diffusion是如何工作的?
Stable Diffusion首先将文本提示转换为文本表示,即用数值概括提示内容。文本表示用于生成图像表示,图像表示则概括了文本提示中描述的图像。然后,图像表示会被放大为高分辨率图像。
你可能会好奇,为什么Stable Diffusion要引入图像表示,而不是直接生成高分辨率图像。原因是计算效率。在紧凑的图像表示上进行大部分计算,而不是在高分辨率图像上,可以显著减少计算时间和成本,同时保持高图像质量。
图像表示最初是随机噪声,经过多个时间步的细化,最终生成与文本提示高度一致的高质量图像表示。细化时间步的数量通常设置为50或100;在Diffusion Explainer中,我们将其固定为50。
我们将Stable Diffusion的图像生成过程分解为三个主要步骤:
- 文本表示生成
- 图像表示细化
- 图像放大
现在,让我们更详细地了解每个过程。
文本表示生成(Text Representation Generation)
点击“文本表示生成”可以查看文本提示如何被转换为文本表示,即概括提示内容的向量。它包含两个步骤:分词和文本编码。
1. 分词(Tokenizing)
分词是处理文本数据的常见方法,将文本转换为数字并用神经网络处理。
Stable Diffusion将文本提示分词为一系列标记。例如,它将文本提示“a cute and adorable bunny”分解为标记:a、cute、and、adorable、bunny。此外,为了标记提示的开始和结束,Stable Diffusion在标记序列的开头和结尾添加了
为了便于计算,Stable Diffusion通过填充或截断使任何文本提示的标记序列长度保持为77。如果输入提示的标记少于77个,则在序列末尾添加
2. 文本编码
Stable Diffusion将标记序列转换为文本表示。为了使用文本表示来指导图像生成,Stable Diffusion确保文本表示包含与提示中描述的图像相关的信息。这是通过一种称为CLIP的特殊神经网络实现的。
CLIP由图像编码器和文本编码器组成,经过训练可以将图像及其文本描述编码为彼此相似的向量。因此,CLIP的文本编码器计算的提示文本表示很可能包含与提示中描述的图像相关的信息。你可以点击上方的“文本编码器”显示可视化解释。
图像表示细化(Image Representation Refining)
Stable Diffusion生成图像表示,即用数值概括文本提示中描述的高分辨率图像的向量。这是通过在多个时间步上细化随机初始化的噪声来实现的,从而逐步提高图像质量和对提示的贴合度。你可以通过调整Diffusion Explainer中的种子来更改初始随机噪声。点击“图像表示细化器”可以可视化每个细化步骤,包括噪声预测和去除。
1. 噪声预测(Noise Prediction)
在每个时间步,一个称为UNet的神经网络预测当前时间步图像表示中的噪声。UNet接受三个输入:
- 当前时间步(timestep)的图像表示
- 提示的文本表示,用于指导应从当前图像表示中去除哪些噪声以生成符合文本提示的图像
- 时间步(timestep),用于指示当前图像表示中剩余的噪声量
换句话说,UNet在文本提示表示和时间步的指导下预测当前图像表示中的条件噪声。
然而,尽管我们使用文本提示来条件化噪声预测,生成的图像表示通常对文本提示的贴合度不够强。为了提高贴合度,Stable Diffusion通过额外预测基于空提示(“ ”)的通用噪声,并将其从条件噪声中减去,来衡量提示的影响:
提示的影响 = 条件噪声 - 通用噪声(impact of prompt=prompt-conditioned noise-generic noise)
换句话说,通用噪声有助于提高图像质量,而提示的影响则有助于贴合提示。最终噪声是它们的加权和,由称为引导尺度的值控制:
通用噪声 + 引导尺度 × 提示的影响(generic noise+guidance scaleximpact of prompt)
引导尺度为0表示完全不贴合文本提示,而引导尺度为1表示使用原始的条件噪声。较大的引导尺度会导致更强的提示贴合度,但过大的值可能会降低图像质量。在Diffusion Explainer中更改引导尺度值,看看它如何改变生成的图像。
2. 噪声去除
Stable Diffusion然后决定从图像中实际去除多少预测噪声,这是由一种称为调度器的算法决定的。去除少量噪声有助于逐步细化图像并生成更清晰的图像。
调度器通过考虑总时间步数来做出这一决定。然后将缩小后的噪声从当前时间步的图像表示中减去,以获得细化后的表示,该表示成为下一个时间步的图像表示:
时间步 t+1 的图像表示 = 时间步 t 的图像表示 - 缩小后的噪声
image representation of timestep_t+1_=image representation of timestep_t_-downscaled noise
图像放大
在所有去噪步骤完成后,Stable Diffusion使用称为解码器的神经网络将图像表示放大为高分辨率图像。在文本表示的指导下完全去噪的细化图像表示将生成与文本提示高度一致的高分辨率图像。
提示关键词如何影响图像生成?
编写文本提示可能非常依赖经验和重复性。例如,从提示“a cute bunny”开始,你可能需要反复添加和删除关键词,例如“in the style of cute pixar character”,直到达到所需的图像。
因此,了解提示关键词如何影响图像生成对编写和优化提示非常有帮助。点击文本提示中高亮显示的关键词,比较仅关键词不同的两个提示生成的图像。