一、前言
回顾 AI 绘画的历史,GAN(Generative Adversarial Nets)是比较出众的一个。GAN 的出现让 AI 绘画成为可能,当时 GAN 给 AI 绘画提供了一种新的思路,现在回顾当时的绘画可以算是相当粗糙。

初代 GAN 出现后,出现了大量 GAN 的变种,比如 StyleGAN、CycleGAN、DCGAN 等。而 StyleGAN 已经可以生成非常逼真的图像了,下面是 StyleGAN 的一些结果。

GAN 提出已经过去十年,AI 绘画也得到了颠覆性的进步。Diffusion Model(DM)逐渐取代了 GAN 在 AI 绘画领域的地位。在此基础上,AI 绘画领域还融合了其它深度学习方法,比如 Controlnet、LoRA 等。如今,AI 绘画达到了以假乱真的地步,同时给与用户极高的可控性,对资源的要求也逐步降低,每个人都可以在自己的电脑上运行 AI 绘画模型。
今天我们的主角是 Stable Diffusion,它是如今最流行的开源 DM。基于 Stable Diffusion,开源社区涌现了繁多的开源项目和模型。比如 Stable Diffusion Webui、Comfyui、Fooocus 等集成应用;分享模型的 Civitai 网站;HuggingFace 提供的 Diffusers 模块。
今天我们将介绍 Stable Diffusion 的整体架构,分解每个部件,最后借助 Diffusers 模块实现 AI 绘画。
二、网络结构
Stable Diffusion 由多个子网络组成,包括文本编码器、UNet 和 VAE 三大部分。组合在一起可以看做一个接收文本输入,输出图像的模型。下面我们将从整体出发,而后拆分每个部件。
2.1 整体架构
Stable Diffusion 的架构如图所示:

整体上看是一个接收文本输入,并输出图像的模型。Stable Diffusion 处理的过程如下:
- 输入文本,使用 CLIP 模型对文本进行编码,获得文本 Embedding
- 从潜空间生成噪声 Latent
- 将文本 Embedding 和 Latent 输入 UNet 模型,预测 Latent 中的噪声
- 将去除 Latent 中的噪声,去除噪声后的结果重新赋值为 Latent
- 重复步骤 3、4
- 将 Latent 传入 VAE 解码器,得到最终图片
模型的核心是一个 UNet 噪声预测网络。不同于 GAN 直接从噪声中生成图片,Stable Diffusion 会进行多次预测噪声并降噪,最终生成图片。
2.2 文本编码器
Stable Diffusion 是一种带条件的图像生成模型,可以根据输入的文本生成与文本相符的图片。我们可以直接使用训练良好的 Bert 模型作为文本编码器,但是这样生成的文本向量和图像的关系不太密切,为了图像生成能更遵循文本条件,Stable Diffusion 使用了 CLIP 模型。
CLIP 模型的提出是为了更好的解决视觉任务,CLIP 可以在 zero-shot 的情况下在 ImageNet 上与 ResNet50 有同等的表现。
下面是 OpenAI 提供的 CLIP 工作图:









