1. Stable Diffusion 前世今生:从扩散模型到潜在扩散模型

大家好,我是你们的老朋友。今天咱们聊聊 Stable Diffusion 的来龙去脉。说实话,我第一次接触扩散模型时,也觉得这东西挺玄乎的。但当你真正拆开来看,其实没那么复杂。

1.1 扩散模型:从物理现象到图像生成

扩散模型这个概念,最早是从热力学里借来的。你想想看,一滴墨水滴进清水里,它会慢慢扩散开,最后均匀分布。这个过程就是「扩散」。那反过来呢?如果我们能学会「逆扩散」,就能从一团噪声里还原出清晰的图像。

我刚开始研究这个方向时,总觉得「从噪声还原图像」听起来像天方夜谭。但后来我意识到,这其实就是一个概率分布转换的问题。模型要学的,就是如何一步步把纯噪声「去噪」成目标图像。

核心思想:扩散模型包含两个过程——前向扩散(加噪)和反向去噪(去噪)。训练时,我们让模型学会预测噪声;推理时,模型从纯噪声开始,一步步去除噪声,最终生成图像。

1.2 潜在扩散模型:为什么要在潜空间里做文章?

好,问题来了。直接在像素空间做扩散,计算量太大了。一张 512x512 的图,像素点就有 26 万多个。你想想看,每次迭代都要处理这么多数据,训练一次得等到猴年马月?

我在项目中遇到过这个瓶颈。当时我们团队想训练一个高清图生成模型,结果一张卡跑了一周还没收敛。后来我们换了个思路——为什么不先把图像压缩到低维空间,再在这个「潜空间」里做扩散呢?

这就是潜在扩散模型(LDM)的由来。它用 VAE(变分自编码器)把图像压缩到潜空间,维度直接降到原来的 1/48。说白了,就是先「瘦身」,再处理。效率提升可不是一星半点。

我的经验:潜空间的大小直接影响生成质量。我建议潜空间维度设置在 4-16 之间,太小会丢失细节,太大又失去了压缩的意义。我一般用 4 维潜空间,效果和速度都比较平衡。

1.3 Stable Diffusion 架构解析:UNet、CLIP、VAE

Stable Diffusion 的架构,说白了就是三个核心组件各司其职。我习惯把它们比作一个「生产线」:

  • VAE(编码器/解码器):负责图像和潜空间之间的转换。编码器把图像压成潜变量,解码器把潜变量还原成图像。
  • UNet(去噪网络):这是整个模型的核心。它在潜空间里做去噪,一步步把噪声变成有意义的潜变量。
  • CLIP(文本编码器):负责理解你的文字提示,把文本转换成模型能理解的向量表示。

我曾经踩过一个坑:一开始我以为 UNet 和 VAE 可以分开训练,结果生成出来的图总是模糊的。后来才发现,这两个组件必须联合调优,尤其是 VAE 的压缩率要和 UNet 的感受野匹配。

注意:CLIP 的文本编码器在推理时是冻结的。不要试图微调它,否则文本理解能力会下降。我见过有人把 CLIP 也一起训练,结果模型连「猫」和「狗」都分不清了。

1.4 模型生态与社区资源

Stable Diffusion 能火起来,社区功不可没。我整理了一下目前主流的资源,方便你快速上手:

资源类型 推荐项目 说明
基础模型 Stable Diffusion 1.5 / 2.1 / XL 官方发布,适合作为基座模型
微调工具 LoRA、DreamBooth、Textual Inversion 轻量级微调,我常用 LoRA
社区平台 Civitai、Hugging Face 模型分享和下载,资源丰富
推理框架 Diffusers、ComfyUI、Automatic1111 各有优劣,我推荐 Diffusers 做开发

我个人习惯用 Hugging Face 的 Diffusers 库做开发。它封装得很好,几行代码就能跑起来。社区里有个叫 Civitai 的网站,上面有成千上万个微调模型,从二次元到写实风格应有尽有。

避坑指南:我曾经从 Civitai 下载过一个模型,结果跑出来的图全是水印。后来才发现,那个模型是用有版权的图片训练的。所以下载模型时,一定要看许可证,别给自己惹麻烦。

嗯,到这里第一章的内容就差不多了。你可能会问:「这些组件具体怎么协同工作的?」别急,下一章我会手把手带你搭建一个完整的 Stable Diffusion 推理流程,到时候你就全明白了。