Skip to content
阅读进度0%
Multimodal待复核

扩散模型

DiT、Stable Diffusion 3、ControlNet 与 ComfyUI 工程实践

我的学习与文章检索 →
学习记录仅保存在当前浏览器,可随时取消标记。

扩散模型:生成式多模态革命 ​

学习生成系统时分开看表示空间、建模目标、网络骨干、条件控制和数值采样。DiT 是网络骨干,扩散或 Flow 是训练目标,ControlNet/IP-Adapter 是条件机制,ComfyUI 是执行工作流。


架构演进 ​

代际代表模型骨干网络特点
第一代SD 1.5U-Net 860M开创性工作
第二代SDXLU-Net 2.6B更大规模
第三代SD3, FLUXDiTTransformer 架构

Diffusion Transformer (DiT) ​

DiT 将 Transformer 引入扩散过程,替代传统 U-Net。

核心架构 ​

DiT Block 内部结构 ​

AdaLN-Zero:条件产生归一化的缩放/平移和残差门控,零初始化使残差块初始接近恒等映射,有助于稳定训练;原始 DiT 不应解释成“保护一个预训练扩散主干”。DiT 论文

DiT 优势 ​

Transformer 提供规则的 token 计算结构,DiT 论文研究了增加深度、宽度与 token 数的可扩展性;但 U-Net 也能使用注意力,DiT 也要处理位置编码、分辨率分布和二次 attention 成本。不能据此断言 DiT 在所有预算下更稳定、更省或天然适配任意分辨率。

工程比较需固定 VAE、数据、训练算力和输出分辨率,再测质量与采样成本;仅比较网络名称会把训练规模的作用算到架构头上。


Stable Diffusion 3 (SD3) ​

SD3 技术报告结合 rectified flow 训练与 MMDiT 骨干;这两个概念分别回答“预测什么”和“怎样交换图文条件”。

MMDiT 架构 ​

关键创新 ​

创新点说明
独立权重图像/文本模态有各自的 Transformer 权重
Joint Attention周期性的跨模态注意力交互
Rectified Flow以插值路径学习速度场,采样步数需按质量实测
三重文本编码CLIP + OpenCLIP + T5

Rectified Flow ​

以一种常见约定为例,数据 x₀ 与噪声 ε 构造线性插值 xₜ = (1 − t)x₀ + tε,训练速度场预测 ε − x₀;采样时从噪声端沿学习到的场积分回数据端。不同实现可能反转时间或使用不同参数化,scheduler 必须与 checkpoint 匹配。

线性的是训练用插值路径,学习场诱导的采样轨迹不保证每条都是直线。减少步数是否保持质量取决于模型、调度和求解器,不能统一声称减少 50%。工程上固定 seeds 比较多个步数,同时记录图像约束正确率与耗时。


ControlNet:精细控制 ​

ControlNet 解决了扩散模型生成"不可控"的痛点。

零卷积机制 ​

Zero Convolution 原理 ​

python
import torch.nn as nn

class ZeroConv(nn.Module):
    def __init__(self, channels):
        super().__init__()
        self.conv = nn.Conv2d(channels, channels, 1)
        # 关键:初始化为零
        nn.init.zeros_(self.conv.weight)
        nn.init.zeros_(self.conv.bias)
    
    def forward(self, x):
        return self.conv(x)

设计哲学:"不伤害"

  • 训练初期 ZeroConv 输出为 0
  • 在相同主干、输入和随机状态下,新增残差初始为零;之后逐渐学习控制
  • 随训练进行,控制信号平滑注入

支持的控制条件 ​

条件类型输入应用场景
Canny Edge边缘图保持轮廓
Depth深度图保持空间结构
Pose骨架图人物姿态控制
Segmentation语义分割区域控制
Scribble涂鸦草图生成
Normal Map法线图表面细节

IP-Adapter:风格迁移 ​

IP-Adapter提供图像提示适配,不只用于风格,也可影响主体和构图;身份、局部结构是否保持须单独验证。

解耦交叉注意力 ​

实现细节 ​

python
# IP-Adapter 注入
def forward(self, hidden_states, text_embeds, image_embeds):
    # 原始文本注意力
    text_attn = self.text_cross_attn(hidden_states, text_embeds)
    # 新增图像注意力
    image_attn = self.image_cross_attn(hidden_states, image_embeds)
    # 加权融合
    output = text_attn + self.scale * image_attn
    return output

特点 ​

特性说明
参数量原始论文适配器约 22M,其他基座/变体不同
兼容性在匹配的基座与实现上可组合;权重不可任意跨 SD 系列使用
训练成本随基座、分辨率、数据与冻结范围变化
推理成本有图像编码与新增注意力,需测量

ComfyUI:节点式工作流 ​

ComfyUI 将生成管线解构为有向无环图(DAG)。

核心概念 ​

数据类型 ​

类型颜色说明
MODEL紫色扩散模型权重
CLIP黄色文本编码器
VAE红色变分自编码器
CONDITIONING橙色编码后的提示
LATENT粉色潜在空间数据
IMAGE绿色像素级图像

执行逻辑 ​

  1. 用户点击 "Queue Prompt"
  2. 从输出节点反向遍历 DAG
  3. 计算依赖关系
  4. 按依赖和缓存有效性执行;输入变化可能使下游缓存全部失效,具体规则依节点实现

工作流示例 ​

文生图 + 放大 + ControlNet:


LoRA 微调 ​

扩散模型 LoRA ​

训练配置 ​

以下是小规模角色/风格实验起点,不是保证成功的配方。数据数量不能代替视角、背景、表情与概念覆盖;caption 应区分要学习的主体与不想绑定的背景。训练/验证按拍摄场景切分,避免同一照片近重复泄漏。

参数推荐值说明
Rank4-128低秩维度
Alpharank 或 rank×2缩放系数
Learning Rate1e-4 ~ 1e-5LoRA 学习率
训练图片10-50角色/风格 LoRA

常见 LoRA 类型 ​

类型训练数据用途
角色 LoRA特定人物图片生成一致角色
风格 LoRA特定画风作品风格迁移
概念 LoRA特定概念图片学习新概念

推理优化 ​

采样器选择 ​

先使用 checkpoint 官方工作流的 scheduler 与步数,再一次只改变采样器或步数。Euler、DDIM、DPM 系列的名称不能脱离噪声/时间参数化比较;蒸馏模型也不能机械套用普通模型的 20–50 步配置。

CFG Scale 指南 ​

典型 classifier-free guidance 用 uncond + s × (cond - uncond) 加强条件方向,过大可能过饱和、失真或损害多样性,不保证更遵循每条指令。某些模型使用蒸馏 guidance 或不同控制接口,应以其模型卡为准,而不是通用“5–7 最佳”。

可复现工作流与验收 ​

保存 checkpoint/VAE/文本编码器/adapter 哈希、工作流 JSON、节点版本、尺寸、seed、scheduler、步数、guidance 和控制强度。相同 seed 也未必跨设备/内核逐像素一致。

现象排查顺序验收方式
黑图、NaNVAE/精度兼容、权重与 scheduler中间 latent 数值有限,输出可正常解码
姿态符合但画面僵硬ControlNet 强度与起止步、条件图质量固定 seed 扫强度,人工检查结构与自然度
主体相似但文字/数量错误条件理解与训练覆盖对每条 prompt 约束逐项打分,不只看美观
LoRA 记住背景或重复构图数据重复、caption 与训练时长未见背景、姿态和负例上的泛化

用固定 prompt 集与多 seeds 比较提示遵循、主体一致性、伪影、安全与耗时。CLIP 相似度不能单独验证精确计数、文字或空间关系;生成输出须与 视觉理解评估的目标分开。

参考资源 ​

参考资源 ​

资源说明
Scalable Diffusion Models (DiT)DiT 论文
Scaling Rectified Flow (SD3)SD3 技术报告
Adding Conditional Control (ControlNet)ControlNet
IP-Adapter图像提示适配
ComfyUI节点式 UI

基于 VitePress 构建