Post

扩散模型与文生图

扩散模型(Diffusion Model)分两个过程:

模型原理 阅读 0 点赞 0 评论 0

导语

在生成式 AI 浪潮中,扩散模型(Diffusion Model)凭借其出色的图像生成质量和可控性,成为文生图领域的核心技术。从 Stable Diffusion 到 Midjourney,扩散模型的原理和实现已广泛应用于创意设计、内容创作等场景。本文将从基础原理讲起,逐步拆解扩散模型的核心机制、Stable Diffusion 的架构设计,以及如何通过文本引导、可控生成和模型微调实现更精准的图像创作。无论你是想理解技术本质,还是想上手调试生成参数,这篇教程都能帮你系统掌握扩散模型与文生图的关键知识点。

1. 扩散模型:从“加噪”到“去噪”的逆向工程

扩散模型(Diffusion Model)是一种通过前向加噪反向去噪两个过程实现图像生成的概率模型。它的核心思想是:先将真实图像逐步“污染”为噪声,再通过神经网络从噪声中逐步还原图像——这个过程类似“先打碎再修复”,但修复的方向由模型学习决定。

1.1 前向过程:逐步加噪的“退化”路径

想象我们有一张清晰的图像,比如一只猫。前向过程(Forward Process)的目标是通过马尔可夫链逐步给图像添加高斯噪声,最终让图像完全“消失”为纯噪声。具体来说:

  • 操作:对图像进行 T 次(通常 200~1000 步)微小噪声添加,每一步噪声强度逐渐增大。
  • 数学本质:每一步噪声添加是固定的数学变换(如 $x_t = \sqrt{\alpha_t} x_{t-1} + \sqrt{1-\alpha_t} \epsilon$,其中 $\epsilon$ 是高斯噪声,$\alpha_t$ 是每步保留的图像信息比例)。
  • 关键特性:经过 T 步后,图像会完全退化为纯高斯噪声(接近白噪声)。
  • 为什么要拆成 T 步? 直接从纯噪声一步生成清晰图像难度极大(噪声分布跨度大、多峰),而分步小步长去噪可以将复杂任务分解为多个简单子任务,降低学习难度,保证生成稳定性。

1.2 反向过程:神经网络学习“去噪”的关键

反向过程(Reverse Process)是扩散模型的核心,也是生成图像的核心步骤。我们需要训练一个神经网络(最常用的是 U-Net 结构),让它学会“从带噪图像中预测并移除噪声”。具体流程:

  1. 输入:从纯噪声 $x_T$ 开始(此时图像完全模糊)。
  2. 预测:U-Net 模型预测当前带噪图像 $x_t$ 中“被添加的噪声” $\epsilon$。
  3. 去噪:用预测的噪声 $\hat{\epsilon}$ 减去原噪声,得到去噪后的图像 $x_{t-1} = x_t - \alpha_t \cdot \hat{\epsilon}$。
  4. 迭代:重复上述步骤,从 $t=T$ 逐步回到 $t=0$,最终得到清晰图像 $x_0$。

训练目标:模型需要学习预测“真实噪声” $\epsilon$ 与“预测噪声” $\hat{\epsilon}$ 之间的差异,通过最小化 MSE(均方误差)损失 $\mathbb{E}[( \hat{\epsilon} - \epsilon )^2]$ 优化去噪能力。这意味着模型的目标不是“直接生成图像”,而是“精准识别噪声”——只有能准确识别噪声,才能在反向过程中逐步还原图像。

1.3 为什么拆分“T 步”?——关键追问与解答

你可能会问:为什么扩散模型要拆成 T 步小噪声,而不是一步到位?
解答:直接从纯噪声生成清晰图像,相当于让模型学习“从噪声到图像”的复杂映射,这种映射的分布跨度极大(噪声是白噪声,图像是高维像素矩阵),且可能存在多峰分布(不同噪声可能对应同一图像),导致模型训练困难、生成质量不稳定。而分步小步长去噪将大问题拆解为多个“局部去噪”任务:每一步只需预测“当前噪声的微小变化”,学习难度大幅降低,生成结果也更稳定可控。

2. Latent Diffusion 与 Stable Diffusion:从像素空间到高效潜空间

原始的扩散模型(如 DDPM)直接在像素空间(如 512×512×3)进行加噪和去噪,当图像分辨率较高时,计算量和显存占用会急剧增加。为解决这一问题,Latent Diffusion(LDM) 引入了潜空间(Latent Space) 的概念,通过压缩图像降低计算成本。

2.1 Latent Diffusion 的核心:VAE 压缩与潜空间扩散

VAE(变分自编码器) 是实现潜空间压缩的关键:
- 编码:将原始图像(如 512×512×3)通过编码器压缩到维度更小的潜空间(如 64×64×4,通道数和空间分辨率大幅降低)。
- 解码:在潜空间完成去噪后,再通过 VAE 解码器将潜向量还原为像素图像。

优势:扩散过程从高维像素空间转移到低维潜空间,计算量(参数数量、内存占用)可降低 10 倍以上,让 Stable Diffusion 等模型能在消费级显卡上运行。

2.2 Stable Diffusion(SD)的三大核心组件

Stable Diffusion(SD)是 Latent Diffusion 的代表性实现,其核心架构由三部分组成:

  1. VAE(变分自编码器):负责图像与潜空间的双向转换。
    - 编码:将输入图像压缩为潜向量;
    - 解码:将去噪后的潜向量还原为最终图像。

  2. U-Net:扩散去噪的主干网络,在潜空间中逐步预测噪声。
    - 结构:包含编码器和解码器,通过残差连接和注意力机制捕捉图像特征。

  3. 文本编码器(CLIP Text Encoder):将文本 prompt 编码为语义向量,作为生成的条件。
    - 文本输入(如“a cat wearing sunglasses”)→ 编码为固定维度的 embedding → 注入 U-Net 引导去噪方向。

2.3 Stable Diffusion 代码实战:快速上手生成图像

以下是使用 diffusers 库调用 Stable Diffusion 的关键示例,你可以直接在 Python 环境中运行(需先安装 diffuserstorch):

# 关键调用示例(diffusers)
from diffusers import StableDiffusionPipeline

# 加载预训练模型(需联网下载,首次运行较慢)
pipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5")

# 生成图像:prompt 是文本描述,num_inference_steps 是采样步数,guidance_scale 是引导强度
image = pipe(
    prompt="a cat wearing sunglasses",  # 文本描述
    num_inference_steps=30,            # 去噪迭代步数(默认 50,减少可加速)
    guidance_scale=7.5                 # 引导强度(7~12 常用,越大越贴合 prompt)
).images[0]

# 保存生成的图像
image.save("cat_with_sunglasses.png")

参数说明
- num_inference_steps:去噪迭代次数,步数越多细节越精细,但耗时增加(建议 20~50 步,结合采样器选择);
- guidance_scale:控制生成图像与 prompt 的贴合程度(7~12 为常用范围,过大可能导致细节僵硬);
- prompt:文本描述越具体(如“a cute cat with sunglasses, photorealistic, 8k”),生成质量越可控。

3. 文本如何引导图像生成:交叉注意力与 CFG 机制

Stable Diffusion 能根据文本 prompt 生成图像,核心依赖交叉注意力(Cross-Attention)CFG(Classifier-Free Guidance) 两个机制。

3.1 交叉注意力:让图像“读懂”文本

在 U-Net 的去噪过程中,交叉注意力 是文本引导图像生成的“桥梁”:
- 原理:U-Net 的特征图作为 Query,文本编码器输出的语义向量作为 Key/Value,通过注意力计算让图像特征在每一层都能“关注”到文本语义。
- 类比:想象 U-Net 是在“看”图像,文本编码器是在“告诉”它“应该看什么”,交叉注意力让图像特征与文本语义对齐,从而引导去噪方向。

3.2 CFG(无分类器引导):平衡多样性与贴合度

CFG 是控制生成质量的关键参数,通过“对比有条件和无条件预测”实现:
- 训练阶段:模型同时学习“有条件去噪”(基于文本 prompt)和“无条件去噪”(无文本引导,即空 prompt)。
- 推理阶段:生成时,模型输出“有条件预测”和“无条件预测”,通过公式计算最终噪声预测:
$$\text{噪声预测} = \text{无条件预测} + \text{guidance_scale} \times (\text{有条件预测} - \text{无条件预测})$$
- 参数作用guidance_scale 越大,生成结果越贴合 prompt(但多样性下降);越小则更自由(但可能偏离描述)。常用范围 7~12,需根据需求调整。

4. 可控生成扩展:从文本到结构的精细化控制

除了文本引导,Stable Diffusion 还支持多种扩展方式,实现更精细的图像控制:

4.1 ControlNet:基于结构/条件图的精确控制

ControlNet 是目前最流行的可控生成工具,核心思路是:
- 复用 U-Net 权重:冻结原始 U-Net 权重,新增一个可训练的“条件分支”。
- 输入条件图:通过边缘图(Canny)、深度图、人体姿态骨架(OpenPose)等条件图,精确控制图像的结构/构图。
- 优势:无需重新训练整个模型,只需输入条件图即可稳定生成符合结构要求的图像(如“生成一个站在椅子上的人”)。

4.2 IP-Adapter:基于参考图像的风格迁移

IP-Adapter 允许通过一张参考图像(而非文本)控制生成风格:
- 原理:在 U-Net 中插入额外的适配器(Adapter),学习参考图像的风格特征。
- 应用场景:快速将照片风格迁移到动漫、油画等艺术风格,或保持人物/物体的一致性(如“生成与参考图相同风格的猫”)。

4.3 局部重绘与图生图:更灵活的生成方式

  • Inpainting(局部重绘):通过 mask 标记图像区域,仅对 mask 区域重新生成,其余区域保持不变(常用于修图、换背景)。
  • Img2Img(图生图):以一张已有图像为基础,通过 prompt 调整细节/风格(如“将原图中的猫换成戴帽子的猫”)。

5. 文生图模型微调:从基础模型到个性化定制

Stable Diffusion 的强大之处在于可通过微调适配特定需求(如生成特定人物、风格),常见微调方法如下:

5.1 DreamBooth:少量图像微调特定主体

  • 原理:用少量(5~20 张)特定主体的图像(如“一只叫‘小白’的狗”),微调整个模型或 U-Net 部分权重。
  • 特点:生成效果自然,但需大量计算资源,且微调后模型可能对主体过拟合。

5.2 SD-LoRA:低秩适应,轻量高效的微调方案

SD-LoRA(Low-Rank Adaptation)是目前社区最主流的微调方式:
- 核心思想:在 U-Net(或文本编码器)的权重旁插入低秩矩阵 $W + \Delta W = W + BA$,其中 $A$ 和 $B$ 是低秩矩阵(参数量仅为原始模型的 1%~5%)。
- 优势
- 参数量小(通常 10~100MB),训练速度快(单卡几小时完成);
- 可作为“插件”加载/卸载/叠加(如同时加载“卡通风格”和“写实风格”LoRA 模型)。

5.3 Textual Inversion:轻量嵌入新概念

Textual Inversion 不修改模型权重,而是在文本编码器中学习一个“伪词”embedding:
- 原理:通过少量图像(如 10~30 张)学习一个新 token(如“sks_dog”),插入到文本编码器的词表中。
- 特点:最轻量(仅需训练新 token),但表达能力有限(适合风格/特定物体,不适合复杂场景)。

6. 采样器与关键参数:生成质量与效率的平衡

采样器(Sampler) 决定了从噪声到图像的具体计算路径,而 关键参数 则直接影响生成效果。

6.1 主流采样器对比

采样器 特点 适用场景
DDPM 原始采样方法,理论最贴合训练过程 研究/精度优先(速度慢)
DDIM 确定性路径,可跳步采样 快速生成(30 步内出图)
Euler/Auto 基于欧拉法,平衡速度与质量 日常生成(常用)
DPM++ 高效迭代,收敛快 高分辨率/细节生成(如 1024×1024)

6.2 关键参数调优指南

  • steps(采样步数)
  • 不是越多越好!步数增加到一定阈值(如 50 步)后,细节提升边际递减,反而增加耗时。
  • 建议:优先选择高效采样器(如 DPM++ 2M Karras),步数设为 20~30 即可满足多数场景。

  • guidance_scale(CFG 强度)

  • 7~12 为常用范围,过高(>15)易导致“prompt 幻觉”(如生成不存在的细节),过低(<5)则偏离文本描述。

  • seed(随机种子)

  • 固定种子可复现相同结果,用于对比不同参数效果(如调整 guidance_scale 时,保持 seed 不变)。

  • negative prompt(反向提示词)

  • 明确告诉模型“不要生成什么”(如“blurry, lowres, extra limbs”),可大幅减少错误细节。

7. 高频问题解答:从原理到实践的关键疑问

Q1:扩散模型和 GAN 有什么区别?

  • 扩散模型:通过前向加噪和反向去噪实现生成,训练稳定(无模式坍塌),生成质量高但推理慢;
  • GAN:通过生成器和判别器对抗训练,推理快但训练不稳定(易模式坍塌),生成质量依赖调参。

Q2:为什么 Stable Diffusion 能在消费级显卡运行?

  • 核心:通过 VAE 将图像压缩到潜空间(如 64×64×4),扩散过程在低维潜空间进行,计算量仅为像素空间的 1/10~1/100,显存占用降低 10 倍以上。

Q3:SD 和 DALL·E 有什么区别?

  • SD:开源可本地部署,支持微调(LoRA/DreamBooth)和插件扩展(ControlNet),可控性强;
  • DALL·E:闭源 API 调用,生成质量强但不可微调,依赖 OpenAI 服务器算力,适合快速创意生成。

Q4:采样步数越多越好吗?

  • 不是:步数增加到 50 步后,细节提升有限(尤其用 DPM++ 等高效采样器),反而会增加推理时间。建议:优先选择高效采样器(如 DPM++ 2M),步数设为 20~30 步,平衡速度与质量。

小结

扩散模型通过“前向加噪-反向去噪”的对称过程实现图像生成,而 Stable Diffusion 等模型通过 VAE 潜空间压缩交叉注意力文本引导CFG 平衡控制,大幅提升了生成效率和可控性。从文本 prompt 到结构控制(ControlNet),从风格迁移(IP-Adapter)到个性化微调(SD-LoRA),扩散模型已成为文生图领域的核心技术。掌握本文所述原理和调参技巧,你就能基于 Stable Diffusion 实现高质量、可定制的图像生成,开启创意创作的新可能。

继续阅读

全部归档
文生视频与语音生成
文生视频与语音生成

本文介绍了文生视频和语音生成两大方向。文生视频在图像扩散基础上增加时间维度,采用DiT架构和时空patch(如Sora),核心难点是时序一致性。主流产品包括Sora、可灵、Runway Gen-3和Pika。语音生成TTS经典链路为文本→声学特征→声码器→波形,代表方法有VITS和扩散类TTS,而zero-shot语音克隆(如ElevenLabs、CosyVoice)可用几秒音频合成新语音。ASR(Whisper)与TTS互为逆过程,数字人通过TTS加口型驱动实现。此外,视频生成因时序一致性和算力需求比图像更难;TTS效果用MOS评价;流式TTS需分块生成并低延迟播放;语音克隆存在声音伪造等滥用风险,需授权和风控机制。

什么是 AIGC 与技术全景
什么是 AIGC 与技术全景

AIGC指利用生成式模型自动产出文本、图像、音频、视频等内容,核心是“学习数据分布→采样生成”。发展历经GAN、VAE、Diffusion、自回归到多模态阶段,其中Diffusion因质量与可控性成为文生图/视频主流,自回归统一了多模态生成。四大模型家族(GAN/VAE/Diffusion/自回归)各有优劣:Diffusion质量高但推理慢,自回归通用但串行生成,GAN实时快但训练不稳定,VAE常用作压缩组件。四大任务包括文生图、文生视频、文生语音、文本生成。产业落地覆盖创作工具、营销素材、游戏美术、数字人、代码生成等,典型形态为API调用(快速上线、数据风险)或自托管(数据可控、成本可控)。后端工程师需掌握技术选型、模型调用、成本控制与能力边界判断,以支撑合理的系统设计。

评论