Stable Diffusion是一个基于深度学习的文本到图像模型,它主要用于生成以文本描述为条件的详细图像,当然它也可以应用于其他任务,如Inpaint、Outpaint,以及在文本提示词的指导下进行图像到图像的转换。它是慕尼黑路德维希-马克西米利安大学的CompVis小组和Runway的研究人员利用Stability AI的捐赠计算机和非营利组织的数据进行训练而完成开发的。
Stable Diffusion是一个潜在扩散模型(Latent Diffusion Model),是一种深度生成的神经网络。它的代码和模型权重已经公开发布,可以在大多数配备有8GB VRAM的GPU上运行。
Stable Diffusion的创造是基于超分辨率的思路进行的,通过深度学习模型,它可以将带噪声的输入图经过处理转换成高分辨率的图像。我们这里介绍的Stable Diffusion不是一个单一的模型,而是一组由模块和模型组成的复杂系统。本节使用Stable Diffusion Web UI(Automatic1111)来介绍Stable Diffusion的相关使用方式。
Stable Diffusion最初的名称叫作Latent Diffusion Model(LDM),这里Diffusion的过程是在Latent Space(潜在空间)中完成的。而Stable Diffusion的架构包含了3个主要的模块,即VAE、U-Net和Text Encoder。
VAE编码器将图像从像素空间压缩到一个较小维度的潜在空间,捕捉图像更基本的语义,如图3-1所示。高斯噪声在前向扩散过程中被反复应用于压缩的潜在表示由于引入了VAE压缩转换到潜在空间进行整个扩散处理,因此Latent Diffusion Model比单纯的扩散过程速度更快更高效。这也是Stable Diffusion的创新之处。
图3-1 VAE的原理
图3-1中的潜在空间便是Diffusion扩散的过程所在。整个扩散过程包含两部分:前向的扩散过程用来给潜在空间添加噪声,逆向的U-Net用来去除噪声。U-Net模块由ResNet主干组成,用于对前向扩散的输出进行去噪。U-Net的输入为词嵌入(Text Embeddings)和随机的初始图像数组,其输出为一个去噪声潜特征空间表达,最后,通过VAE解码器将表示转换回像素空间来生成最终图像。整个过程如图3-2所示。
图3-2 Latent space向Diffusion扩散的过程
扩散发生在多个步骤中,每个步骤都对输入的潜在矩阵进行操作,同时我们会在Stable Diffusion Web UI中观测到每一步输出的图像,以及整个图像从模糊到清晰的动态过程。
整个去噪声的过程由预设好的步数(steps)来控制,直至达到预定的步数去噪声步骤才会完成。图3-3显示了不同步数下去噪声的过程变化。
图3-3 不同步数下去噪声的过程变化
Transformer语言模型是接收文本提示词并且产生token嵌入的语言理解模块。在Stable Diffusion中使用ClipText作为Transformer语言模型,而这里的Text Encoder是一种特殊的Transfomer语言模型,它吸收输入文本并产生token。
作为CLIP模型的一部分,Text Encoder可以灵活地以一串文本、一幅图像等为去噪声步骤的U-Net模型添加指定的条件。编码的条件数据通过交叉注意机制暴露给去噪声的U-Net模型。对于文本的条件,固定的、预训练的CLIP文本编码器被用来将文本提示词转化为嵌入空间。
这里的CLIP编码器是可选的,输入为文本提示词,其输出为77个token的嵌入向量,每个token包含768个维度。
Stable Diffusion的强大之处是可以接收文本提示词作为输入来影响图像的生成,本节是通过修改U-Net的扩散模型来让Stable Diffusion接收条件完成输入的,如图3-4所示。
对于文本输入,首先使用语言模型 τ θ (如BERT、CLIP)将它转换为嵌入(向量),然后通过注意力模型层映射到U-Net。
对于其他空间的输入(如语义图、图像、Inpaint),可以用串联法进行调节。
图3-4 接收文本提示词影响图像的生成