多模态模型中图像生成器使用的扩散模型组件

多模态模型中的图像生成器,通常不是一个单独网络,而是一套 条件扩散生成系统。典型输入是文本、图像、mask、bbox、姿态、深度图、边缘图、语义图、视频帧或多模态 embedding,输出是目标图像。

最常见结构是 Latent Diffusion Model,LDM,也就是 Stable Diffusion 类路线。


1. 总体结构

典型扩散图像生成器如下:

文本 / 图像 / mask / bbox / 深度图 / 姿态 / 多模态 embedding
        ↓
条件编码器 Condition Encoder
        ↓
条件向量 / 条件 token
        ↓
噪声 latent z_T
        ↓
扩散去噪网络 U-Net / DiT
        ↓
逐步去噪 z_T → z_0
        ↓
VAE Decoder
        ↓
生成图像

如果是 Stable Diffusion 类模型,核心流程是:

Prompt
  ↓
Tokenizer
  ↓
Text Encoder
  ↓
Text Embedding
  ↓
Denoising U-Net / DiT
  ↓
Latent Image
  ↓
VAE Decoder
  ↓
RGB Image

2. 核心组件总览

组件 作用
Tokenizer 把文本 prompt 转成 token id
Text Encoder 把文本 token 编码成语义 embedding
Condition Encoder 编码图像、mask、深度、姿态、bbox 等条件
VAE Encoder 把真实图像压缩到 latent 空间,训练或图生图时使用
VAE Decoder 把 latent 还原成 RGB 图像
Noise Scheduler 控制加噪和去噪时间步
Denoising Network 核心去噪网络,通常是 U-Net 或 DiT
Cross-Attention 让图像生成过程读取文本/多模态条件
Classifier-Free Guidance 控制生成结果与 prompt 的贴合程度
Sampler 决定推理时如何从噪声一步步生成图像
Control Module ControlNet / T2I-Adapter / IP-Adapter 等可控生成模块
Safety / Postprocess 后处理、超分辨率、过滤、裁剪等

3. VAE:图像与 latent 空间的转换器

在 Stable Diffusion 这类 latent diffusion 中,扩散过程不是直接在 RGB 图像上做,而是在压缩后的 latent 空间中做。

原因是 RGB 图像太大:

512 × 512 × 3

经过 VAE 编码后变成:

64 × 64 × 4

计算量大幅下降。


3.1 VAE Encoder

训练阶段或图生图阶段使用。

RGB Image x
   ↓
VAE Encoder
   ↓
Latent z

公式:

z = Encoder_VAE(x)

作用:

把真实图像压缩到连续 latent 空间

3.2 VAE Decoder

推理生成阶段最后使用。

Latent z_0
   ↓
VAE Decoder
   ↓
Generated RGB Image

公式:

x_hat = Decoder_VAE(z_0)

作用:

把去噪后的 latent 还原成最终图像

3.3 为什么需要 VAE?

直接在像素空间扩散:

速度慢
显存大
训练成本高

在 latent 空间扩散:

速度更快
显存更小
更适合大规模训练和部署

所以 Stable Diffusion、SDXL、很多文生图模型都采用 latent diffusion。


4. Text Encoder:文本条件编码器

文本生成图像时,prompt 不能直接输入扩散网络,需要先编码成语义向量。

流程:

"A red bottle on the shelf"
        ↓
Tokenizer
        ↓
Token IDs
        ↓
Text Encoder
        ↓
Text Embeddings

常见 Text Encoder:

CLIP Text Encoder
OpenCLIP Text Encoder
T5 Encoder
Gemini/Qwen/LLaMA 类 LLM encoder hidden states

Stable Diffusion 1.x 常用 CLIP text encoder;SDXL 使用更强的双文本编码器;一些新模型会使用 T5 或大语言模型作为文本编码器。


4.1 文本 embedding 的作用

文本 embedding 会作为条件输入到去噪网络中:

Noise latent + timestep + text embedding
        ↓
Denoising Network
        ↓
Predicted noise

也就是说,扩散模型每一步去噪时都会参考文本语义。


5. Denoising Network:扩散模型的核心生成器

这是扩散模型最关键的组件。

它的任务是:

给定当前带噪 latent、时间步、条件信息,
预测噪声或预测干净图像。

输入:

z_t:当前带噪 latent
t:扩散时间步
c:条件信息,例如文本 embedding、图像 embedding、mask、pose

输出:

预测噪声 ε_theta(z_t, t, c)

公式:

ε_pred = ε_θ(z_t, t, c)

然后 sampler 根据预测噪声更新 latent:

z_t → z_{t-1}

经过多次迭代:

z_T → z_{T-1} → ... → z_1 → z_0

最后 z_0 经过 VAE Decoder 得到图像。


6. U-Net:经典扩散去噪网络

Stable Diffusion 1.x / 2.x / SDXL 主要使用 U-Net 作为去噪网络。

结构:

Noisy Latent
    ↓
Down Blocks
    ↓
Middle Block
    ↓
Up Blocks
    ↓
Predicted Noise

U-Net 特点:

编码器-解码器结构
有 skip connection
适合图像空间/latent 空间的局部细节恢复
可以融合文本 cross-attention

简化结构:

          Text Embedding
               ↓
Noisy Latent → Downsample → Bottleneck → Upsample → Noise Prediction
        ↘____________ skip connections ____________↗

6.1 U-Net 中的主要子模块

子模块 作用
ResBlock 提取局部图像特征
Self-Attention 建模图像内部长距离关系
Cross-Attention 融合文本或多模态条件
Downsample 降低空间分辨率,扩大感受野
Upsample 恢复空间分辨率
Time Embedding 注入当前扩散时间步信息
Skip Connection 保留低层细节

7. DiT:Transformer 式扩散生成器

除了 U-Net,现代图像生成模型越来越多使用 Diffusion Transformer,DiT

DiT 不再用 CNN U-Net,而是把 latent 切成 patch token,再用 Transformer 去噪。

结构:

Latent z_t
  ↓
Patchify
  ↓
Latent Tokens
  ↓
Add Time Embedding + Condition Embedding
  ↓
Transformer Blocks
  ↓
Predict Noise / Velocity
  ↓
Unpatchify

优点:

扩展性强
适合大模型训练
适合和多模态 token 融合
更接近 LLM / VLM 架构

缺点:

小规模训练不一定优于 U-Net
推理成本可能更高
对训练数据和算力要求更高

在多模态模型中,DiT 很有潜力,因为它天然适合统一处理:

文本 token
图像 token
视频 token
深度 token
bbox token
mask token

8. Noise Scheduler:加噪和去噪时间表

扩散模型训练时会不断给图像 latent 加噪:

z_0 → z_1 → z_2 → ... → z_T

其中:

z_0:干净 latent
z_T:近似纯高斯噪声

前向加噪公式:

q(z_t | z_0) = N(√α_t z_0, (1 - α_t)I)

可写成:

z_t = √α_t z_0 + √(1 - α_t) ε

其中:

ε ~ N(0, I)

训练目标是让模型预测这个噪声:

L = || ε - ε_θ(z_t, t, c) ||²

8.1 Scheduler 的作用

Scheduler 决定:

每一步加多少噪声
每一步去多少噪声
推理需要多少步
采样轨迹怎么走

常见 scheduler / sampler:

名称 特点
DDPM 原始扩散采样,稳定但慢
DDIM 可以少步采样,速度更快
Euler 常用、速度快
Euler Ancestral 随机性更强
DPM-Solver 高效高质量
UniPC 少步生成表现较好
Heun 稳定性较好

9. Time Embedding:时间步编码

扩散模型每一步去噪难度不同。

t 大:图像接近纯噪声,需要生成大结构
t 小:图像接近完成,需要修复细节

所以去噪网络必须知道当前是第几步。

timestep t
   ↓
Time Embedding
   ↓
加入 U-Net / DiT

常见实现:

Sinusoidal Embedding
MLP Time Embedding
AdaLN / FiLM 调制

作用:

让模型根据不同噪声强度执行不同去噪策略

10. Cross-Attention:文本控制图像生成的核心

Cross-Attention 是文生图扩散模型最关键的条件融合方式。

在 U-Net 或 DiT 中,图像 latent token 作为 Query,文本 token 作为 Key / Value:

Q = image latent features
K = text embeddings
V = text embeddings

计算:

Attention(Q, K, V) = softmax(QK^T / √d) V

含义:

每个图像区域在生成时,都会关注 prompt 中相关的文本 token。

例如 prompt:

A red Coca-Cola bottle on the second shelf

图像区域可能分别关注:

red
Coca-Cola
bottle
second shelf

这就是文本能控制图像内容、颜色、物体、布局的核心原因。


11. Classifier-Free Guidance:提示词引导强度

Classifier-Free Guidance,简称 CFG,是扩散模型推理中的关键技巧。

它会同时计算两次预测:

无条件预测:ε_uncond
有条件预测:ε_cond

然后组合:

ε_guided = ε_uncond + s × (ε_cond - ε_uncond)

其中 s 是 guidance scale。

含义:

s 越大,越贴合 prompt
s 越小,越自然、自由

常见设置:

CFG = 5 ~ 9

太低:

图像可能不听 prompt

太高:

图像可能过饱和、失真、细节崩坏

12. Sampler:从噪声生成图像的推理算法

推理时,从随机噪声开始:

z_T ~ N(0, I)

然后使用去噪网络和 sampler 逐步更新:

z_T → z_{T-1} → ... → z_0

最终:

image = VAE_Decoder(z_0)

不同 sampler 会影响:

生成速度
细节质量
稳定性
随机性
风格

常见推理步数:

20 steps
30 steps
50 steps

少步生成更快,但质量可能下降;多步生成更稳定,但延迟更高。


13. ControlNet:可控图像生成组件

在多模态模型中,图像生成经常不只受文本控制,还会受结构条件控制,例如:

边缘图
深度图
人体姿态
分割 mask
草图
法线图
语义图
布局 bbox

ControlNet 的作用是:

在不破坏原始扩散模型能力的情况下,
额外注入结构控制信号。

结构上可以理解为:

Control Image
     ↓
Control Encoder
     ↓
Control Features
     ↓
注入 U-Net 多层

整体:

Prompt Embedding ─────────────┐
                              ↓
Noisy Latent → U-Net → Predicted Noise
                  ↑
ControlNet Features
                  ↑
Depth / Pose / Edge / Mask

13.1 ControlNet 常见条件

条件 用途
Canny Edge 控制边缘轮廓
Depth Map 控制空间结构
OpenPose 控制人体姿态
Segmentation Map 控制语义区域
Normal Map 控制表面方向
Lineart 控制线稿
Scribble 草图生成
Inpaint Mask 局部重绘
Tile 超分辨率 / 细节增强

14. IP-Adapter:图像参考条件

IP-Adapter 主要用于:

参考图像 → 控制生成图像的主体、风格、身份或外观

例如:

给一张商品包装图
生成同款商品在不同货架位置的图像

它不像 ControlNet 那样强控制结构,而是更偏向:

风格一致
主体一致
身份一致
外观一致

结构:

Reference Image
      ↓
Image Encoder
      ↓
Image Prompt Embedding
      ↓
Cross-Attention / Adapter 注入扩散模型

15. T2I-Adapter:轻量条件适配器

T2I-Adapter 和 ControlNet 类似,也用于条件控制,但通常更轻量。

Condition Image
      ↓
Adapter
      ↓
Feature Injection
      ↓
U-Net

适合:

边缘部署
多控制条件组合
低成本微调

16. Inpainting 组件:局部重绘

图像编辑时常用 inpainting 模型。

输入:

原图
mask
prompt

输出:

只修改 mask 区域后的图像

结构:

Original Image
Mask
Prompt
   ↓
VAE Encoder + Mask Encoder + Text Encoder
   ↓
Denoising U-Net
   ↓
VAE Decoder
   ↓
Edited Image

对自动售货柜场景可以用于:

遮挡补全
商品包装替换
缺失区域生成
hard negative 数据增强

17. Image-to-Image 组件

图生图不是从纯噪声开始,而是从原图 latent 加噪后开始。

流程:

Input Image
   ↓
VAE Encoder
   ↓
z_0
   ↓
加一定强度噪声
   ↓
z_t
   ↓
根据 prompt 去噪
   ↓
VAE Decoder
   ↓
Output Image

关键参数是 denoise strength

strength 小:保留原图更多
strength 大:变化更大

18. 多模态模型中的条件来源

在多模态大模型中,扩散图像生成器的条件不一定只有文本。

常见条件包括:

条件来源 作用
文本 prompt 控制语义内容
图像 embedding 控制主体/风格
OCR 文本 控制文字或商品标签
bbox / layout 控制物体位置
mask 控制局部生成
depth 控制空间结构
pose 控制人物姿态
segmentation 控制区域类别
LLM hidden state 由语言模型规划生成内容
VLM visual token 用视觉理解结果指导生成
RAG 检索结果 注入知识、商品属性、参考图

19. 多模态 LLM + 扩散生成器的组合方式

多模态模型中,LLM/VLM 和扩散模型通常有三种组合方式。


19.1 LLM 生成 prompt,扩散模型生成图像

这是最常见方式。

用户需求
   ↓
LLM 解析并改写 prompt
   ↓
Stable Diffusion / SDXL / Flux / DiT
   ↓
生成图像

优点:

简单
工程成熟
易接入现有扩散模型

缺点:

LLM 和 diffusion 之间只是文本连接
深层语义对齐有限

19.2 LLM hidden state 直接控制 diffusion

更深度的融合方式:

多模态输入
   ↓
MLLM
   ↓
Hidden States
   ↓
Projection Adapter
   ↓
Diffusion Cross-Attention
   ↓
Generated Image

这样图像生成不只依赖 prompt,而是可以依赖 MLLM 的内部语义表示。

适合:

复杂推理后生成图像
多图参考生成
图文混合理解后生成

19.3 统一 token 模型

把图像也离散化成 token,直接由 Transformer 生成图像 token。

Text Tokens + Image Tokens
        ↓
Unified Transformer
        ↓
Generated Image Tokens
        ↓
Image Decoder
        ↓
Image

这类路线更接近:

AnyGPT
Unified-IO
VILA-U
Chameleon 类架构

它不一定使用传统扩散模型,但目标类似:统一多模态输入输出。


20. 扩散图像生成器的训练过程

训练目标通常是让模型学会从带噪 latent 中预测噪声。

训练数据:

图像 x
文本 caption c

步骤:

1. x 经过 VAE Encoder 得到 z_0
2. 随机采样时间步 t
3. 随机采样高斯噪声 ε
4. 构造带噪 latent z_t
5. 输入 z_t、t、caption embedding c
6. Denoising Network 预测 ε_pred
7. 用 MSE 约束 ε_pred 接近真实噪声 ε

公式:

z_t = √α_t z_0 + √(1 - α_t) ε

损失:

L = E[ || ε - ε_θ(z_t, t, c) ||² ]

有些模型不预测噪声,而是预测:

x_0:干净 latent
v:velocity
score:梯度方向

21. 推理过程详细展开

输入 prompt:

一瓶红色可乐放在自动售货柜第二层

推理步骤:

1. Tokenizer 编码 prompt
2. Text Encoder 得到 text embedding
3. 初始化随机 latent z_T
4. 设置 scheduler 时间步,例如 30 steps
5. 对每个时间步 t:
   - U-Net/DiT 输入 z_t、t、text embedding
   - 预测噪声 ε_pred
   - CFG 调整 ε_pred
   - Sampler 更新 z_t → z_{t-1}
6. 得到最终 latent z_0
7. VAE Decoder 解码成 RGB 图像
8. 后处理保存图像

伪代码:

text_ids = tokenizer(prompt)
text_emb = text_encoder(text_ids)

z = randn(latent_shape)

for t in scheduler.timesteps:
    eps_cond = denoiser(z, t, text_emb)
    eps_uncond = denoiser(z, t, empty_text_emb)

    eps = eps_uncond + guidance_scale * (eps_cond - eps_uncond)

    z = scheduler.step(eps, t, z)

image = vae_decoder(z)

22. 在 sVLM / 自动售货柜中的应用方式

对于你的自动售货柜项目,扩散图像生成器可以不是主识别模型,而是辅助数据和鲁棒性增强模块。


22.1 生成训练数据

用于:

新包装模拟
不同光照模拟
遮挡模拟
不同货架背景模拟
商品摆放变化模拟
反事实样本生成

例如:

输入:可乐商品图 + 货架背景 + bbox
输出:不同角度、不同遮挡、不同光照下的可乐货架图

22.2 Hard Negative 生成

自动售货柜最怕相似商品混淆:

可口可乐 vs 百事可乐
农夫山泉不同容量
同品牌不同口味
新旧包装

可以用 diffusion 生成 hard negative:

相似颜色
相似瓶型
相似标签布局
不同 SKU

用于提升 embedding / classifier 区分能力。


22.3 遮挡补全与低质量增强

对于拍摄质量差的图像:

局部遮挡
反光
模糊
标签缺失
角度偏斜

可以用 inpainting / ControlNet 做辅助恢复或数据增强。

但工程上要注意:

生成图不能直接作为事实依据
只能作为训练增强或候选参考
不能替代真实检测结果

22.4 结构条件生成

结合 M2 货柜结构:

shelf line
cabinet mask
product bbox
segmentation mask

可以生成符合货柜布局的合成数据:

货架结构图 + 商品 prompt → 合成货柜图像

推荐组合:

ControlNet + bbox/layout condition + product reference image

23. 面向工程实现的组件拆分

可以把图像生成器设计成如下模块:

ImageGenerator
├── TextPromptEncoder
├── ImageConditionEncoder
├── LayoutConditionEncoder
├── VAEEncoder
├── VAEDecoder
├── DenoisingUNet / DiT
├── Scheduler
├── Sampler
├── ControlModule
│   ├── ControlNet
│   ├── T2IAdapter
│   └── IPAdapter
├── InpaintModule
├── SafetyChecker
└── PostProcessor

C++/部署侧可以抽象为:

struct DiffusionCondition {
    std::string prompt;
    std::string negative_prompt;

    Image reference_image;
    Image mask;
    Image depth;
    Image edge;
    Image segmentation;

    std::vector<BBox> layout_boxes;
    std::vector<std::string> layout_labels;
};

struct DiffusionConfig {
    int width = 512;
    int height = 512;
    int steps = 30;
    float guidance_scale = 7.5f;
    float denoise_strength = 1.0f;
    uint64_t seed = 42;
};

struct GeneratedImage {
    Image image;
    float generation_time_ms;
    std::string prompt_used;
    uint64_t seed;
};

接口:

class DiffusionImageGenerator {
public:
    bool Init(const std::string& model_dir);

    GeneratedImage TextToImage(
        const DiffusionCondition& condition,
        const DiffusionConfig& config
    );

    GeneratedImage ImageToImage(
        const Image& input,
        const DiffusionCondition& condition,
        const DiffusionConfig& config
    );

    GeneratedImage Inpaint(
        const Image& input,
        const Image& mask,
        const DiffusionCondition& condition,
        const DiffusionConfig& config
    );
};

24. 组件之间的数据流

24.1 Text-to-Image

Prompt
  ↓
Text Encoder
  ↓
Text Condition
  ↓
Random Noise
  ↓
Denoising U-Net / DiT
  ↓
Latent z_0
  ↓
VAE Decoder
  ↓
Generated Image

24.2 Image-to-Image

Input Image
  ↓
VAE Encoder
  ↓
Latent z_0
  ↓
Add Noise by strength
  ↓
Denoising with Prompt
  ↓
VAE Decoder
  ↓
Edited Image

24.3 Inpainting

Input Image + Mask + Prompt
        ↓
VAE Encoder
        ↓
Masked Latent
        ↓
Denoising U-Net
        ↓
VAE Decoder
        ↓
Inpainted Image

24.4 ControlNet

Prompt
Control Image
Random Latent
        ↓
Text Encoder
Control Encoder
        ↓
U-Net with Control Injection
        ↓
Generated Image

25. 与 GAN / VAE 的区别

方法 生成方式 特点
GAN 一步生成 快,但训练不稳定
VAE 编码-解码重建 稳定,但图像容易模糊
Diffusion 多步去噪生成 质量高、可控性强,但推理慢
Autoregressive Image Token token 逐个生成 统一性强,但高分辨率成本高

扩散模型优势:

图像质量高
训练稳定
条件控制能力强
可编辑性好
适合图文、多条件、多模态生成

缺点:

推理速度慢
多步采样成本高
部署复杂
对显存和算力要求较高

26. sVLM 场景下最关键的组件

如果目标是边缘端或工业视觉,最重要的不是完整文生图能力,而是下面几个组件:

组件 重要性 原因
VAE 决定 latent 压缩效率和重建质量
Denoising U-Net / DiT 极高 核心生成能力
Scheduler / Sampler 决定速度和质量
ControlNet / Adapter 极高 让生成结果符合结构约束
IP-Adapter 保持商品外观一致
Inpainting 局部补全、包装替换、遮挡模拟
Text Encoder 中高 决定 prompt 理解能力
CFG 控制 prompt 贴合度
LoRA 快速适配新商品、新风格、新场景

27. 推荐理解路径

学习扩散图像生成器,可以按这个顺序:

1. DDPM 原理:加噪 / 去噪 / 噪声预测
2. Latent Diffusion:为什么在 latent 空间生成
3. U-Net:扩散去噪网络结构
4. Text Encoder + Cross-Attention:文本如何控制图像
5. Scheduler / Sampler:推理过程怎么加速
6. CFG:prompt 引导强度
7. ControlNet:结构可控生成
8. IP-Adapter:参考图像控制
9. Inpainting / Img2Img:图像编辑
10. DiT:Transformer 化扩散模型

28. 总结

多模态图像生成器中的扩散模型,核心组件可以概括为:

Text / Image / Layout Condition Encoder
        +
VAE Latent Space
        +
Denoising U-Net / DiT
        +
Scheduler / Sampler
        +
Cross-Attention / CFG / ControlNet
        ↓
逐步从噪声 latent 还原出目标图像

其中最关键的是:

VAE 负责图像压缩与还原;
Text Encoder 负责理解 prompt;
U-Net / DiT 负责逐步去噪生成;
Scheduler 负责控制去噪路径;
Cross-Attention 负责文本/多模态条件注入;
ControlNet / Adapter 负责结构化可控生成。

对于 sVLM ,扩散图像生成器最适合作为:

训练数据增强器
新包装模拟器
遮挡/光照/角度扰动生成器
hard negative 样本生成器
结构约束合成数据生成器
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐