一句话定位

Versatile Diffusion(VD)是首个「多流(multi-flow)多模态」统一扩散框架,用一套带”全局/数据/上下文”三类可共享、可切换层模块的 U-Net,在单一模型内同时承载 text-to-image、image-to-text、image-variation、text-variation 四个任务,并衍生出语义-风格解耦、双/多上下文混合等新能力。最亮眼数字:四流 VD 在 COCO 验证集上把 image-variation 的 FID 从 SD-variation 基线的 18.81 压到 4.57,T2I FID 11.10,全部训练仅用单节点 8×A100 完成。

背景与定位

2022 年下半年扩散模型(DALL·E 2 / Imagen / Stable Diffusion)已在文生图上立下里程碑,但当时的范式几乎清一色是「单流(single-flow)」:一个模型只解一个跨模态任务(如文→图),换任务就要换/微调一套模型。VD 想回答的问题是「下一步往哪走」——作者主张多模态、多任务统一模型才是通向通用生成 AI 的路径,并把扩散模型选作”workhorse”。

技术脉络上 VD 直接站在 latent-diffusion-ldm / Stable Diffusion 肩上:复用其 latent-space 扩散思路、AutoKL VAE、U-Net + cross-attention 主干,扩散基础回溯 ddpm / ddim。它的独特之处是把单流管线泛化成 N×M 跨模态网络(N 种输出类型 × M 种上下文类型),通过层共享让模型规模从朴素 ensembling 的 O(N×M) 降到 O(max(N,M)),四流 VD 因此只有四套独立扩散模型一半的参数量。它早于后续统一扩散浪潮(UniDiffuser、OmniGen 等),是”用一个扩散网络做多模态多任务”这一思路的早期代表作。

注意:VD 与同样讲”image-variation”的 SD image-to-image 有本质区别——IV 从纯噪声扩散、保高层语义但放松低层结构;I2I 从”图像+半噪声”扩散、只复制低层结构、不保证高层语义。

模型架构

整体三件套:(a) 遵循多流框架的 diffuser;(b) 把数据样本映射到 latent 的 VAEs;(c) 把上下文编码成 embedding 的 context encoders。训练时左侧 VAE 编码器把数据压成 latent,推理时编码器被高斯噪声替代、仅保留右侧 VAE 解码器出图/出文。

多流框架(核心创新):把 diffuser 的所有层分为三组——

  • Global layers(全局层):与流无关、永远激活,对应 SD 的 time-embedding 层。
  • Data layers(数据层):与”输出类型”绑定,生成对应模态时才激活,对应 SD 的 residual blocks。
  • Context layers(上下文层):与”输入上下文类型”绑定,对应模态作为条件输入时才激活,对应 SD 的 cross-attention。

一次”flow”= 把前向传播路由经过共享 global 层 + 选中的 data/context 层,其余层静默。例:文→图走 image-data-block + text-context-block;图→图变体走 image-data-block + image-context-block。VD 默认是四流模型

Diffuser:以带 cross-attention 的 U-Net 为主干,部分沿用 SD。图像数据层用 residual block,文/图上下文层用 cross-attention。针对文本数据层作者新设计了 FCResBlock(全连接残差块):把 768 维文本 latent 向量扩展成 320×4 的隐藏特征,结构是两组 FC + GroupNorm + SiLU + skip-connection(输入 x 为文本 latent,t 为时间 embedding)。

VAEs:图像端用与 SD 相同的 AutoencoderKL(kl-f8);文本端用 Optimus(Bert 编码器 + GPT-2 解码器,双向把句子映射成 768 维正态分布 latent 向量)。

Context encoders:图、文都用 CLIP 的图/文编码器。与 SD 直接用原始文本 embedding 不同,VD 用 归一化+投影后、最小化 CLIP 图文对比损失的 embedding——作者发现把图、文上下文的 embedding 空间拉近能加快收敛、提升效果。

关键尺寸:CLIP 图像上下文 embedding 为 257×768(1 个全局向量 + 256 个局部 patch 向量),这一结构正是后续解耦/掩码应用的操作对象。分辨率策略为先 256 后 512 的两段式(见训练)。

数据

  • 数据源Laion2B-enlaion 的 20 亿英文图文对子集)+ COYO-700M(KakaoBrain,7 亿图文对)。图像取自网页、caption 取自 HTML。
  • 过滤规则(5 条硬阈值):①图文 CLIP 相似度 > 0.3;②NSFW/安全分 < 0.3;③含水印概率 < 0.3;④图像长宽比在 0.6–1.6667;⑤图像面积 > 256²×0.75。
  • caption 清洗(仅用于”to-text”流,因要喂 Optimus VAE):去除 HTTP 链接/URL/邮箱、HTML 语法、方/花括号内容、多余符号(破折号/斜杠/下划线)、各类引号但保留 ’s。注意**“to-image”流不做此清洗**。
  • 数据用 img2dataset API 打包成 tar/parquet;因 Laion2B 极大、典型训练不足一个 epoch,实际无需下全量。

训练方法

  • 训练目标:标准 DDPM 式扩散——对每条流计算式(3)的变分加权 L2 损失(预测与真值均值之差),常规反向传播。核心新意在梯度累积逻辑(Algorithm 1):遍历 N 种数据 × M 种上下文的每条流分别求梯度 δθ′,累加所有流梯度后再统一更新权重。
  • 分层梯度缩放(关键 trick):更新时对 data/context 层手工设不同梯度尺度以适配多流设定(Table 1)。例如四流 VD:Data(I)=0.2、Data(T)=1.0、Ctx(I)=1.0、Ctx(T)=1.0、Global=0.1;单/双流时 Data(I)=0.1。目的是”大致平衡每个梯度步”。
  • 渐进式三阶段训练:①单流(image-variation)→②双流(T2I + IV)→③四流(主模型)。单流用 SD v1.4 checkpoint 作初始权重,后续阶段在上一阶段最新 checkpoint 上继续微调。
  • 扩散设置贴近 DDPM/SD:1000 步,β 从 8.5e-5 线性增到 1.2e-2。
  • 学习率:单/双流 1e-4,四流 5e-5。有效 batch size:单流 2048、双流 1024、四流 512。
  • 两段分辨率:所有模型先在 256 分辨率上训 3000 万样本,再在 512 上训 640 万样本。作者强调成本可控——对比 SD v1.4 在 256/512 上分别训 5 亿+2.3 亿样本,VD 便宜得多。
  • 训练灵活性:附录验证可改用 T2I 作”起始任务”(VD-Alt),效果相近,说明多流模型的训练顺序不唯一。
  • 未使用偏好对齐(RLHF/DPO)或蒸馏/一致性加速——属 DDPM 时代经典扩散训练,无这些 2023+ 技术。

Infra(训练 / 推理工程)

  • 算力:所有实验在**单节点 8×A100(80G)**上完成(附录 C.3)。未报告总 GPU·时。
  • 并行/吞吐:用梯度累积让有效 batch 对齐目标值——单次反传的 per-GPU batch 在 256 分辨率为 64、512 分辨率为 16;累积循环数 = 有效batch /(per-GPU batch × 8),如单流 256 训练累积 4 次。未披露具体并行框架/混合精度训练配置。
  • 推理/部署:提供 fp16 权重(vd-four-flow-v1-0-fp16.pth,体积为 fp32 一半);集成进 HF 🧨diffusers,提供统一 VersatileDiffusionPipeline 及各任务专用 pipeline(task-specific pipeline 仅把所需权重载上 GPU,更省显存);附带支持全部应用的 WebUI(app.py)。未报告量化/步数蒸馏/缓存等加速。

评测 benchmark(把效果讲清楚)

评测协议:生成 30000 张样本与 COCO-caption 验证集比 FID;T2I 基线 SD v1.4、IV 基线 SD-variation、I2T 基线 BLIP。DALL·E 2 / Imagen 因无公开代码模型未对比。

(A) 文生图 FID(↓,越低越好)

方法FID(T2I)
CogView27.10
LAFITE26.94
GLIDE12.24
Make-a-Scene11.84
LDM12.63
SD(基线)11.21 ±0.03
VD(four-flow)11.10 ±0.09

(B) Image-Variation FID(↓)

方法FID(IV)
SD(baseline / SD-variation)18.81 ±0.06
VD(four-flow)4.57 ±0.02

→ T2I 上 VD 略胜 SD 基线(11.10 vs 11.21);image-variation 上 VD 大幅领先(4.57 vs 18.81,约 1/4),是论文最强结果。

其它评测

  • classifier-free guidance 扫描:画了 FID 随无条件引导尺度变化曲线(Figure 6),并讨论 IV 两种无条件上下文(全零 CLIP-empty-image embedding vs 全零 embedding)的取舍。
  • 人评(user study):4 名评审在 COCO-Caption 抽 2000 样本上对 T2I 和 IV 投票(SD / VD / 平局),结果倾向 VD(Figure 7,仅给柱状图未给精确比例)。
  • image-to-text:仅与 BLIP 定性对比(Figure 5c),未报告 caption 定量指标(无 CIDEr/BLEU/SPICE 等)。
  • 关键消融:单流 IV 性能略低于双/四流(归因于 caption-agnostic 且训练不足),双流与四流大体相当 → 说明多任务联合不掉点甚至更稳。
  • GenEval / T2I-CompBench / DPG-Bench / MJHQ-30K / HPSv2 / ImageReward / PickScore 等 2023+ 基准在本文时代尚未流行,均未报告

创新点与影响

核心贡献

  1. 提出首个 multi-flow multimodal 扩散框架,把单流扩散管线泛化为”global/data/context 三类可共享可切换层”的统一网络,一套模型同解四任务,参数复杂度 O(max(N,M)) 远低于 ensembling 的 O(N×M)(四流仅占四套模型一半参数)。
  2. 工程实现上贡献了文本数据层 FCResBlock、用 Optimus 作文本 VAE、用 CLIP 对齐后 embedding 作上下文、以及多流的分层梯度缩放 + 渐进式训练配方。
  3. 多流特性”免费”衍生出一批新应用:语义-风格解耦(对 257×768 CLIP 图像 embedding 做 PCA——保留主成分=风格,去掉主成分=语义;为首个在自然图像、扩散 latent 空间做无监督风格/语义解耦的工作)、双/多上下文混合(提出 attention-level mixing 优于 layer-level/model-level,在深层而非扩散步浅层融合多上下文)、带掩码/缩放的多图混合(改 CLIP 在卷积投影后按 mask 置零)、I2T2I 编辑(图→文→编辑→图,首个此类尝试)、以及与 ControlNet 结合的 position-agnostic CLIP(CLIP-PA)变体。

影响:作为”用一个扩散网络统一多模态多任务”的早期范例,预示并启发了后续统一扩散方向(UniDiffuser、OmniGen 等)。代码、模型 MIT 开源并入 HF diffusers,DALL·E 2 当时未开放图像变体能力,VD 提供了开源可用的 image-variation/dual-guided 方案。

已知局限

  • image-to-text 缺定量评测,且 caption 偏”creative”、可控性弱。
  • I2T2I 在官方 WebUI 中被下线(“seeking a better way of image editing”),论文也承认其受图→文与文→图双向质量制约、可编辑性无保证。
  • 文本 VAE(Optimus)限定英文、清洗后训练;规模与质量上限受限于 SD v1.4 起点与 DDPM 时代技术(无偏好对齐、无加速蒸馏)。
  • 上下文混合在”形状差异大”的语义冲突下仍可能结构失真(layer-level 尤甚)。

原始链接

一手源存档(sources/)