Stable Diffusion 模型原理与本地部署实战
Stable Diffusion(简称 SD)是一个基于潜在扩散模型(Latent Diffusion Models, LDMs)的文图生成模型。它建立在自注意力机制和扩散过程的基础上,设计灵感源自在自然图像建模领域取得巨大成功的扩散模型。
论文核心解析
本文主要参考 CVPR 2022 收录的论文《High-Resolution Image Synthesis with Latent Diffusion Models》。SD 通过一系列扩散步骤生成图像:从含较少信息的噪声开始,逐步预测条件分布并生成包含更多细节的图像。
背景与架构
在生成模型研究中,扩散过程模型和自注意力机制是两个关键领域。扩散模型模拟随机过程演化来生成图像,而自注意力机制则能捕捉序列中不同位置的依赖关系。Stable Diffusion 将两者结合,采用了一系列扩散步骤来逐渐生成图像,每个步骤中模型需预测图像的条件分布。
Stable Diffusion 的核心流程:
-
训练自编码模型(AutoEncoder)
- 编码器负责将输入图像压缩成潜在表示(latent representation),解码器负责将其还原为原始像素空间图像。
- 这一步骤将图像压缩到低维潜在表示空间,为后续扩散操作做准备。
-
感知压缩(Perceptual Compression)
- 利用训练好的自编码模型对图片进行压缩,转换到潜在表示空间。
- 该过程保留了重要的图像特征,同时忽略了一些不太重要的高频信息,大幅降低了计算复杂度。
-
潜在表示空间上的 Diffusion 操作
- 在潜在表示空间上进行类似标准扩散模型的操作。
- 具体实现为 time-conditional UNet,结合了时间条件信息,用于在潜在表示空间上进行图像生成。
技术细节
图片感知压缩
感知压缩利用预训练的自编码模型(如变分自编码器 VAE)学习图像的潜在表示空间。这个空间在感知上等同于图像空间,但维度更低。基于此的扩散模型训练通常是两阶段过程:首先训练自编码器学习潜在空间,避免高度异化;其次在潜在空间训练扩散模型。Stable Diffusion 主要采用 AutoencoderKL 实现,结合了 KL 正则化方法。
潜在扩散模型
扩散模型可理解为一种时序去噪自编码器,目标是根据输入图像预测对应的去噪后变体或噪音。其目标函数表述如下:

其中 $x_t$ 是模型预测的下一个时间步的图像,$x_{t-1}$ 是当前时间步的输入图像,$ε_t$ 是从均匀分布中采样得到的噪音。
在潜在扩散模型中,引入了预训练的感知压缩模型(编码器 E 和解码器 D)。相应的目标函数调整为:

在这里,$z_t$ 是模型预测的下一个时间步的潜在表示,$E_φ$ 是编码器,$D_φ$ 是解码器。这种结构使得模型能够在潜在表示空间中操作,同时通过解码器将结果转换回图像空间。
条件机制
为了控制图片合成过程,论文提出了拓展的条件时序去噪自编码器。通过在 UNet 主干网络上增加 cross-attention 机制来实现条件图片生成。模型会重点关注与条件变量相关的信息,从而在生成过程中加入条件的影响。为了处理来自多个不同模态的条件变量,引入了一个领域专用编码器,将不同模态的条件变量映射为一个统一的中间表示。
实验结果
模型在不同数据集(CelebAHQ、FFHQ、LSUN-Churches 等)上训练的 LDMs 生成的样本分辨率均为 256×256 像素。图表展示了在 ImageNet 数据集上,通过观察类别条件下的不同下采样因子 f,对类别条件下的扩散模型进行训练的情况。不同的标记代表使用 DDIM 采样器进行的采样步骤,展示了推断速度和样本质量之间的比较。
代码复现与部署
环境配置
在实际操作中,我们建议使用带有 NVIDIA 显卡的设备,显存至少 6GB 以保证运行效率。电脑需要能够访问 GitHub 并安装 Git 工具,方便下载代码。
-
Python 环境准备 建议使用 Conda 管理环境,创建独立的 Python 环境。
conda create -n sd python=3.10.9 conda activate sd -
拉取官方代码 克隆 AUTOMATIC1111 的 Stable Diffusion WebUI 仓库。
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git -
启动服务 进入
stable-diffusion-webui文件夹,双击运行webui-user.bat文件(Windows 系统)。注意不要点击.sh文件,那是 Linux 的安装脚本。安装过程可能需要等待一段时间,请耐心等待。安装结束后,浏览器通常会自动打开网页。如果没有自动打开,请在浏览器输入
http://127.0.0.1:7860访问命令行提示的地址。
提示词准备
提示词的设定是一门技术,好的提示词能引导模型生成符合要求的图像。提示词需要使用英文。
推荐参考 Civitai 网站获取风格模型和提示词灵感。提示词一般分为正面提示词(想要的内容)和负面提示词(不想要的内容)。
正面提示词示例:
1girl,hair with bangs,black long dress,orange background,
负面提示词示例:
(worst quality:2),(low quality:2),(normal quality:2),lowres,watermark,
准备好提示词后,即可设置模型生成的参数。针对不同风格的图像,建议调整相应的参数以获得最佳效果。
模型加载
下载模型文件(例如 majicmixRealistic_v7.safetensors)到 stable-diffusion-webui\models\Stable-diffusion 文件夹下。务必确保文件放在正确的目录下,否则无法被检测到。

生成图像
以上设置完毕后,点击生成按钮即可开始绘画。多次尝试不同参数和提示词,通常能获得满意的效果。

总结
Stable Diffusion 结合了扩散过程和自注意力机制,通过潜在空间操作显著降低了计算成本,同时保持了高质量的图像生成能力。通过本地部署 WebUI,开发者可以快速上手 AI 绘画应用,探索文本到图像的生成潜力。


