Stable Diffusion
Stable Diffusion 是 Stability AI 推出的开放权重潜在扩散模型系列,可在消费级 GPU 上根据文本提示生成和编辑图像。
Stable Diffusion 是 Stability AI 推出的一系列开放权重文本生成图像模型,可根据自然语言提示词生成和编辑图像。该系列的首个版本于 2022 年 8 月发布,由慕尼黑 LMU 的 CompVis 团队与 Runway 合作开发,并将他们的潜在扩散研究应用于 LAION-5B 数据集的一个子集中的 512×512 图像。其拥有 8.6 亿参数的 U-Net 和 1.23 亿参数的文本编码器可在至少配备 10 GB 内存的消费级 GPU上运行;由于任何人都可以下载权重,它成为庞大的微调模型、适配器和编辑工具生态的基础。最新版本 Stable Diffusion 3.5 于 2024 年 10 月发布,它用多模态扩散 Transformer取代了 U-Net,并使用整流流进行训练。
Stable Diffusion 的工作原理#
Stable Diffusion 是一种扩散模型,它对压缩图像而非像素进行去噪,并使用三个网络:
- 变分自编码器(VAE):编码器将 512×512×3 的图像压缩为 64×64×4 的潜变量,数值数量减少 48 倍;解码器则将生成完成的潜变量转换回图像。所有去噪操作都在较小的潜变量上进行,这就是模型能够在消费级硬件上运行的原因。
- 文本编码器:将提示词(最多 77 个词元)转换为嵌入。Stable Diffusion 1.x 使用 OpenAI 的 CLIP ViT-L/14,2.x 使用 OpenCLIP ViT-H/14,SDXL 结合两个 CLIP 编码器,而 Stable Diffusion 3 则在两个 CLIP 编码器之外加入 T5-XXL 语言模型,以更好地理解提示词。
- 去噪网络:预测每一步要移除的噪声。1.x、2.x 和 SDXL 使用 U-Net,其交叉注意力层让图像特征能够关注文本嵌入;3 和 3.5 则使用 MMDiT,同时处理图像和文本词元。
生成从一个随机的 64×64×4 潜变量开始。调度器通常会运行去噪网络20 到 50 步,每一步移除一部分预测噪声;无分类器引导会增强提示词的影响。随后,VAE 解码器生成图像:
由于起始潜变量是随机的,同一提示词使用不同种子会生成不同图像;而相同种子和设置则会复现相同结果。
模型版本#
- Stable Diffusion 1.x(2022):支持 512×512 图像生成,采用拥有 8.6 亿参数的 U-Net;1.5 版成为社区微调模型的常见基础,ControlNet论文也以此为基础。权重采用 CreativeML OpenRAIL-M 许可证。
- Stable Diffusion 2.x(2022 年末):改用 OpenCLIP 文本编码器,并新增 768×768 模型。
- SDXL(2023 年 7 月):原生支持 1024×1024 图像生成,采用一个拥有约 26 亿参数的 U-Net 和两个文本编码器。同年 11 月发布的 SDXL Turbo 使用对抗式扩散蒸馏,可通过单步生成图像。
- Stable Diffusion 3 和 3.5(2024):用整流流 Transformer取代 U-Net,并为图像和文本词元使用单独的权重。Stable Diffusion 3.5 Large拥有 81 亿参数,3.5 Medium 拥有 25 亿参数。Stability AI 社区许可证允许年收入低于 100 万美元的组织免费用于商业用途。
使用 Stable Diffusion 编辑图像#
- 图生图:对现有图像进行编码,将其加噪至由强度值设定的中间步骤,再使用新的提示词对其去噪,因此结果会保留原图的布局和颜色,同时改变风格或内容。
- 微调:DreamBooth 和 LoRA可使用几十张图像让模型适应新的主题或风格;ControlNet 则会将边缘、深度或姿态图作为结构条件输入。
- 图像修复:仅重新生成掩码区域,使其符合提示词并融入周围环境。Stable Diffusion 图像修复检查点会为 U-Net 增加五个输入通道:四个用于编码后的掩码图像,一个用于掩码本身。
图像修复掩码中,白色表示图像需要更改的区域,黑色表示保留的区域。Ultralytics YOLO26实例分割模型可以自动生成此类掩码,例如在街景照片中替换或移除某一类别的所有车辆:
import cv2
from ultralytics import YOLO
# 使用 YOLO26 实例分割模型分割公交车(COCO 类别 5)
model = YOLO("yolo26n-seg.pt")
results = model("https://ultralytics.com/images/bus.jpg", classes=[5], retina_masks=True)
result = results[0]
# 白色标记 Stable Diffusion 应重新绘制的像素,黑色标记应保留的像素
mask = (result.masks.data.sum(dim=0) > 0).cpu().numpy().astype("uint8") * 255
cv2.imwrite("bus_inpaint_mask.png", mask)保存的 bus_inpaint_mask.png具有照片的完整分辨率,因为 retina_masks=True会以原始图像尺寸返回掩码。给定照片、这个掩码和“红色双层巴士”等提示词后,图像修复管线会重新生成巴士,同时保留周围的街景。
实际应用#
- 用于视觉模型的合成数据:团队会生成罕见缺陷、异常天气或少见视角的图像,以弥补训练数据集中的不足,并使用图像修复将新物体放入真实背景。
- 概念艺术与设计:游戏工作室、建筑师和产品设计师可以在前期概念设计中用几分钟探索多种风格和构图。
- 营销与电商图像:图生图和 ControlNet 可以固定产品形状,同时通过提示词更改场景、光照和背景。
Stable Diffusion 与相关模型的比较#
- 潜在扩散模型:Stable Diffusion 是潜在扩散架构最知名的实现,因此所有 Stable Diffusion 模型都是潜在扩散模型。
- GAN:通过一次前向传播生成图像,但训练稳定性较差,生成多样性也较低。除非经过蒸馏(如 SDXL Turbo),否则 Stable Diffusion 需要经过许多去噪步骤。
- 闭源生成器:OpenAI 的图像模型和 Midjourney 等服务只能在其提供商的服务器上运行。Stable Diffusion 的权重可以下载、离线运行、检查和微调。
- FLUX.1:Black Forest Labs 于 2024 年由原始潜在扩散论文的幕后研究人员创立,其中包括 Robin Rombach、Andreas Blattmann 和 Patrick Esser。该公司发布了拥有 120 亿参数的 FLUX.1 系列,采用与 Stable Diffusion 3 相同的整流流 Transformer 方法。










