十分钟搞懂 Stable Diffusion 的基础概念

十分钟搞懂 Stable Diffusion 的基础概念

一、扩散模型:逆向思维的图像生成

Stable Diffusion 的核心建立在扩散模型(Diffusion Model)之上。与传统生成模型(如GAN)不同,扩散模型采用”先破坏后重建”的逆向思维:

  1. 前向过程(加噪):逐步向原始图像添加高斯噪声,经过T步后得到纯噪声
    1. # 伪代码示例:前向扩散过程
    2. def forward_diffusion(image, T=1000):
    3. for t in range(1, T+1):
    4. noise = torch.randn_like(image)
    5. alpha_t = compute_alpha(t) # 噪声调度系数
    6. image = alpha_t * image + (1-alpha_t) * noise
    7. return noise
  2. 逆向过程(去噪):训练神经网络学习从噪声逐步还原图像的路径
  3. 关键优势:通过马尔可夫链设计,将复杂生成问题分解为多个简单去噪步骤

二、Stable Diffusion 的三大核心组件

1. U-Net 架构:时空维度的降噪专家

作为去噪网络的核心,U-Net采用编码器-解码器结构:

  • 下采样路径:通过卷积和下采样提取多尺度特征(如128x128→64x64)
  • 注意力机制:在关键层插入交叉注意力模块,实现文本条件控制
  • 跳跃连接:将浅层特征直接传递到对应解码层,保留细节信息
  • 时间嵌入:通过正弦位置编码将扩散步数t注入网络

2. 文本编码器:语义空间的翻译官

采用CLIP的文本编码部分,将提示词转换为768维向量:

  • 分词处理:使用BPE算法将句子拆解为token序列
  • 上下文建模:通过Transformer层捕捉词间关系
  • 池化策略:取[CLS]标记或均值向量作为整体表示
    ```python

    文本编码示例(简化版)

    from transformers import CLIPTokenizer, CLIPModel

tokenizer = CLIPTokenizer.from_pretrained(“openai/clip-vit-large-patch14”)
model = CLIPModel.from_pretrained(“openai/clip-vit-large-patch14”)

inputs = tokenizer(“A cute cat sitting on a mat”, return_tensors=”pt”)
text_embeddings = model.get_text_features(**inputs) # 输出形状:[1, 768]

  1. ### 3. 潜在空间压缩:效率革命的关键
  2. 传统扩散模型在像素空间(1024x1024x3)运算,Stable Diffusion通过VAE实现:
  3. - **编码器**:将图像压缩到4x4x8(原尺寸1/64)的潜在表示
  4. - **解码器**:从潜在空间重建高质量图像
  5. - **计算优势**:在潜在空间运算使内存占用减少32-64
  6. ## 三、核心训练机制解析
  7. ### 1. 噪声预测目标
  8. 模型学习预测给定时间步t的噪声ε,损失函数为:
  9. $$ L = \mathbb{E}_{x_0,ε,t} [||ε - ε_θ(x_t, t, c)||^2] $$
  10. 其中:
  11. - $x_0$:原始图像
  12. - $ε$:实际添加的噪声
  13. - $ε_θ$:模型预测的噪声
  14. - $c$:文本条件向量
  15. ### 2. 分类器引导(CFG)技术
  16. 通过额外分类器增强文本控制:
  17. ```python
  18. # 分类器引导伪代码
  19. def classifier_guided_sampling(model, classifier, prompt, guidance_scale=7.5):
  20. for t in reversed(range(1, T+1)):
  21. noise_pred = model(x_t, t, prompt)
  22. grad_norm = classifier.get_gradient(x_t, prompt) # 获取文本条件梯度
  23. noise_pred = noise_pred + guidance_scale * grad_norm
  24. x_{t-1} = denoise_step(x_t, noise_pred)
  • 原理:沿提升文本匹配概率的方向调整预测噪声
  • 效果:显著增强图像与提示词的相关性

四、实用操作建议

1. 提示词工程技巧

  • 结构化提示:主体描述 + 细节修饰 + 风格指定(如”A photorealistic golden retriever, sunny park, cinematic lighting, 8k resolution”)
  • 权重调整:使用(word:factor)语法(如”(red hair:1.3)”)
  • 负面提示:通过Negative prompt排除不需要的元素

2. 参数调优指南

参数 典型范围 作用
采样步数 20-50 值越大质量越高但越慢
CFG尺度 7-15 值越大越贴合文本但可能过拟合
分辨率 512x512/768x768 影响构图和细节

3. 常见问题解决方案

  • 模式崩溃:检查是否使用了重复的seed值
  • 文本无关生成:提高CFG尺度或优化提示词
  • 细节缺失:增加采样步数或使用高清修复

五、技术演进方向

  1. ControlNet:通过额外条件(边缘图、深度图)实现精确控制
  2. LoRA微调:低成本适配特定风格或角色
  3. 3D扩散:从单图像生成扩展到三维空间
  4. 视频生成:时序扩散模型的应用

结语

Stable Diffusion 通过创新的扩散模型架构、高效的潜在空间设计和强大的文本条件机制,重新定义了AI绘画的技术边界。理解其核心原理不仅能帮助开发者更好地使用工具,更为自定义模型训练和高级应用开发奠定基础。建议从官方模型开始实践,逐步探索微调和ControlNet等高级功能,在实践中深化对技术本质的理解。