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 推理流程,到时候你就全明白了。