一句话定位

OminiControl 把图像条件(既包含空间对齐任务如 Canny/depth/inpainting,也包含非对齐任务如 subject-driven 主体生成)统一注入到 DiT(基座是 flux-1)中,仅增加 ~0.1% 参数(12B 模型只训练 14.5M 参数):复用 DiT 自带的 VAE encoder 与 transformer block,把 condition token 直接拼进统一序列做多模态注意力,并用「动态位置编码」区分对齐/非对齐任务。在 depth-to-image 上 F1=0.38、colorization/deblur 的 MSE 较 ControlNetPro 降 93%/77%,subject-driven 的 modification accuracy 平均 75.8%(vs IP-Adapter-FLUX 57.7%)。同时开源了 20 万对身份一致图像对数据集 Subjects200K,成为 DiT 时代 ControlNet 的代表性参考点(ICCV 2025)。

背景与定位

图像条件控制此前主要面向 UNet 架构(ddpm / latent-diffusion-ldm / SD1.5),代表工作有 ControlNet(复制半个网络做 spatial 控制)、T2I-Adapter(轻量 adapter)、UniControl(MoE 统一多条件)、IP-Adapter(额外 CLIP encoder + cross-attention 做主体/风格)。这些方法有三个共性问题:

  1. 参数开销大——ControlNet 复制网络、IP-Adapter 引入独立 encoder;
  2. 任务偏置——要么擅长空间对齐(边缘/深度引导),要么擅长非对齐(主体/风格),很少两者兼顾;
  3. 为 UNet 设计——直接搬到 DiT(flux-1 / stable-diffusion-3 / PixArt)上效果次优,因为架构本质不同(DiT 用 token 序列 + MMA + RoPE,而非卷积 + 空间相加)。

OminiControl 的立场:DiT 自身的组件(VAE、transformer block、多模态注意力)已经具备处理视觉控制信号的能力,无需新增专用模块——只要把 condition 当作普通 token 拼进序列、用 LoRA 微调即可。它与同期的 channel-concat 类方法(FLUX.1 Tools、ACE++、In-Context LoRA)以及专用主体/风格方法(Diffusion Self-Distillation、Style-friendly SNR sampler)形成对比,主打「最小且通用(minimal & omni)」。

模型架构

Backbone:FLUX.1(12B,latent rectified-flow transformer / DiT)。空间对齐任务默认用 FLUX.1-dev;subject-driven 任务改用 FLUX.1-schnell(作者观察其视觉质量更好)。

DiT 处理两类 token:noisy image token X ∈ R^{N×d} 与 text token C_T ∈ R^{M×d}。FLUX 每个 block 是 LayerNorm + 多模态注意力(MMA),用 RoPE 编码空间位置:image token 按 2D 网格位置 (i,j) 旋转,text token 位置固定为 (0,0)。512×512 输入经 VAE 得到 32×32=1024 个 latent token(位置索引 i,j ∈ [0,31])。

OminiControl 在此之上做三件事:

1. 最小架构 / 参数复用(minimal architecture)

  • 复用 FLUX 自带 VAE encoder 把 condition image 编码到与 noisy token 同一 latent 空间——不引入 CLIP(IP-Adapter 做法)或独立控制网络(ControlNet 做法)。
  • condition token 与 noisy image token 共用同一批原始 DiT block;为了让 block 适配 condition token,只加 LoRA 微调(默认 rank=4),不做全参更新、也不复制网络。
  • 处理非 condition token 时 LoRA scale 默认设为 0,以保留基座模型原能力。

2. 统一序列处理(unified sequence processing)

  • 传统方法做特征相加 h_X ← h_X + h_{CI}(要求空间对齐、操作刚性)。OminiControl 反其道:把 condition token C_I 直接拼接进序列 [X; C_T; C_I] 一起过 MMA,让注意力自行发现 token 间的空间/语义关系,不强加空间约束。论文用注意力图证明:Canny→image 任务出现强对角线(空间对齐),subject-driven 任务出现以主体为中心的注意力(语义对齐)。训练 loss 也一致低于 direct-adding(Fig 3a)。

3. 动态位置编码(position-aware token interaction) 为拼进来的 condition token 分配 RoPE 位置时:

  • 空间对齐任务:给 condition token 与对应 noisy image token 相同位置索引 (i,j),强化逐像素对应;
  • 非对齐任务(subject-driven):把 condition token 位置整体平移一个固定偏移 Δ(如 (0,32)),避免与 noisy token 空间重叠,否则共享索引会限制语义关系的建立、收敛更慢、最终效果更差(Fig 3b/5 验证)。 公式:(i,j)_{CI} = (i,j)_X(对齐) 或 (i,j)+Δ(非对齐)。这是「omni-capability」的关键。

4. 推理期条件强度控制(attention bias) 统一序列的联合注意力本身不像「α·h_CI」那样可调强度。OminiControl 在 MMA 里加一个偏置矩阵 B(γ):MMA = softmax(QK^T/√d + B(γ))·V,其中 X↔C_I 的块加 log(γ)、其余块为 0。推理时 γ=0 关闭条件影响,γ>1 增强条件,实现可调控制强度。

参数量(Table 1):12B FLUX 上仅 14.5M 可训练参数(~0.1%);若把 VAE encoder 也计入则 48.7M(~0.4%)。对比 ControlNet-FLUX 3.3B(27.5%)、IP-Adapter-FLUX 918M(7.6%)、FLUX.1 Tools 612M(5.1%)。默认只支持 512×512(后续 omini 版本扩到 1024×1024)。

数据

空间对齐任务训练数据:用 jackyhate/text-to-image-2M 数据集的最后 30 万张图像,配 task-specific 条件(Canny/depth/mask/灰度)。

Subjects200K(论文核心数据贡献,自建合成数据集)——为解决 subject-driven 缺高质量身份一致配对数据的问题:

  • 动机:用「完全相同的图像对」(IP-Adapter 做法)会导致过拟合、模型只会照抄输入;已有带自然变化的数据集规模/多样性又不足。
  • 合成管线(三阶段,全部用 DiT 自生成)
    1. 描述生成:用 GPT-4o(ChatGPT-4o)生成层级结构描述。先生成 42 个物体大类(家具/车辆/电子/服装等),每类衍生实例,共 4,696 个独立物体;每条目含 1 句简述 + 8 个场景描述 + 1 个 studio 照描述(共生成 >30,000 条多样描述)。
    2. 配对图像合成:把「同一物体的两个不同场景」组成结构化 prompt(模板 Two side-by-side images of the same object: {desc}; Left: {scene1}; Right: {scene2}),喂给 FLUX.1-dev 生成左右并排的双视图,尺寸 1056×528,每 prompt 用 5 个随机种子。训练时水平劈开 + 中心裁剪成两张 512×512。Split-2 共生成 211,320 对 subject-consistent 图像对。
    3. 质量评估:用 GPT-4o vision 按三维度打分(composite structure / subject consistency / image quality,0–5 分),每图独立评 5 次、全过才入选。Split-2 筛出 111,767 对高质量,最终训练集 223,534 张高质量图
  • 公开版集合统计(HF dataset card):collection_1 共 18,396 对(8,200 高质量);collection_2 共 187,840 对(111,767 高质量);collection_3 为 1024×1024 版本(独立仓库)。HF 上 train split 共 206,841 examples,约 15.9GB。所有图带 16px padding;许可 Apache-2.0。
  • 消融验证(附录 B.1):用传统数据增强(裁剪/旋转/缩放/色彩)训练的模型只学会照抄输入;用 Subjects200K 训练的模型能在保持身份的同时生成符合文本的新视图。

安全/美学过滤:未单独披露 NSFW/美学过滤模块;质量筛选即上述 GPT-4o 三维度评分。

训练方法

  • 训练目标:沿用 FLUX 的 rectified flow / flow matching(base 模型固有,论文未改训练目标),只通过 LoRA 适配 condition token 的处理。
  • 微调方式:LoRA(默认 rank=4),训练 DiT block 中的 norm 层与注意力投影(W_Q、W_K 关键,W_V 影响较小——见 critical module 消融 Fig 10)。处理非 condition token 时 LoRA scale=0。
  • 优化器:Prodigy(parameter-free,开启 safeguard warmup + bias correction),weight decay=0.01。
  • batch:batch size=1 + 梯度累积 8 步(有效 batch=8)。
  • 训练步数:空间对齐任务 50,000 iterations;subject-driven 任务 15,000 iterations。
  • 无蒸馏/无偏好对齐:论文未使用 consistency/LCM/ADD 步数蒸馏,也未用 RLHF/DPO/reward model——它是一个「在已有 FLUX 上做参数高效条件适配」的工作,加速依赖基座(subject 任务用 schnell 这一已蒸馏的少步模型)。

关键消融结论

  • LoRA rank:1→16 总体单调变好,rank=16 综合最优(FID 19.71、F1 0.407);但 rank=1 也有竞争力(尤其文本对齐),默认用 rank=4 做效率折中。
  • 条件注入深度(conditioning depth):FLUX 早期 block 对 text/image 用独立 norm、后期 block 共享 norm。只在「早期 block」注入 condition(沿用 UNet 时代的做法)controllability 严重不足(F1 0.23 vs full 0.38)——说明让条件信号贯穿整个 transformer stack 是 DiT 时代的必要条件,UNet 经验不能直接照搬。

Infra(训练 / 推理工程)

  • 算力2× NVIDIA H100(80GB),单卡 batch=1 + 梯度累积。这是极轻量的训练配置(与基座 FLUX 12B 训练的算力规模完全不在一个量级),体现了「参数高效 = 工程高效」。
  • GPU·时 / 吞吐 / 并行策略:未披露具体 GPU 小时数与分布式并行细节。
  • 推理形态:以 LoRA 权重形式分发(HF Yuanshi/OminiControl,单文件 diffusion LoRA),可叠加自定义 style LoRA;提供 HF Space 在线 demo。
  • 已知推理代价:作者在 conclusion 明确指出本方法最大局限是 token 数增加——统一序列把 condition token 拼进序列,使网络处理的总 token 数变多,推理计算效率下降。降低 token 开销是后续方向(即后续工作 OminiControl2 / arXiv 2503.08280「Efficient Conditioning」要解决的问题,本仓库 README 已收录但属另一篇论文)。

评测 benchmark(把效果讲清楚)

评测设置:空间对齐任务用 COCO 2017 val 的 5,000 张图(resize 512×512、固定 seed=42),生成任务条件与 caption;subject-driven 用 DreamBooth 数据集的 750 对文本-条件(30 主体 × 25 prompt × 5 seed),评估全部由 GPT-4o vision 完成。

空间对齐任务(Table 2,OminiControl=Ours,基座 FLUX.1)

  • Canny→image:F1 0.50(最高,vs ControlNet 0.35 / T2I-Adapter 0.22 / ControlNetPro 0.21 / FLUX Tools 0.20);FID 24.20、SSIM 0.45、CLIP-Image 0.785(最高)。
  • Depth→image:正文称 F1 0.38(最高,显著超 SD1.5 与 ControlNetPro);但 Table 2 的 depth 行实际报的是 MSE(Ours 537,ControlNetPro 2958,FLUX Tools 767),controllability 列对 depth 用 MSE 而非 F1(F1 仅 Canny 用)。FID 31.04、SSIM 0.39、CLIP-Image 0.749。
  • Mask/Inpainting:Ours MSE 6351、FID 10.20、SSIM 0.78、CLIP-Image 0.892(均为该任务最佳;同任务 ControlNet-SD1.5 MSE 7588 / FID 13.14,FLUX Tools MSE 6610 / FID 11.40)。
  • Colorization:Ours MSE 73(ControlNetPro 994,降约 93%),FID 10.37、SSIM 0.92、CLIP-Image 0.884(vs ControlNetPro 0.781),色彩还原更准。
  • Deblurring:Ours MSE 62(ControlNetPro 338,正文称 降约 77%),FID 表中为 18.89(ControlNetPro 16.27)。⚠️ 论文正文另称「deblurring FID 从 30.38 改善到 11.49」,但 30.38/11.49 在 Table 2 中均查无对应行(30.38 实为 ControlNetPro colorization 行的 FID),属论文正文与表格的内部不一致,此处以表格数字为准。
  • 总体在 SSIM、CLIP-IQA、MAN-IQA、MUSIQ、PSNR 多数质量指标上领先或并列最佳。

Subject-driven generation(Table S1,GPT-4o 五维评分,单位 %)

  • 平均 5 seed:Ours 身份保持 50.6(IP-Adapter-SD 29.4 / SSR-Encoder 46.0 / IP-Adapter-FLUX 11.8);modification accuracy 75.8(IP-Adapter-FLUX 57.7);material quality 84.3、color fidelity 55.0、natural appearance 98.5;综合 average 72.8(全场最高)。
  • 最佳 seed:身份保持 82.3、modification accuracy 90.7、综合 91.9——较最强 baseline 分别高 18.0 / 15.8 个百分点。
  • 用户研究(375 份有效问卷,三维度:身份一致性 / 文图对齐 / 视觉协调性):Ours 在全部三维度领先。

关键对比 / 消融小结

  • 参数效率 0.1% 下仍超过专用方法,证明 DiT 时代无需重型控制模块。
  • 统一序列 > direct-adding(loss 更低、注意力图更清晰)。
  • 动态位置(shifted)对非对齐任务收敛更快、效果更好。
  • 条件信号需贯穿全 stack(early-only 注入不足)。

(注:上述数字均来自已落盘的 arXiv 2411.15098v6 正文 Table 1/2/3 与附录 Table S1;FID/CLIP 等绝对值随 setting 不同表内有多行,已按论文标注摘录。)

创新点与影响

核心贡献

  1. 参数极简的 DiT 条件控制范式——复用 VAE+transformer block + LoRA,仅 0.1% 参数即可同时做空间对齐与非对齐控制,否定了「图像条件必须重型模块」的假设。
  2. 统一序列 + 动态位置编码——把条件当 token 拼进序列、按任务类型分配 RoPE 位置,是 DiT 时代 ControlNet 的一个简洁通用解。
  3. attention-bias 强度控制——在联合注意力框架下恢复了 IP-Adapter 那种推理期可调条件强度的能力。
  4. Subjects200K 数据集——20 万+对身份一致图像对,全部由 FLUX 自生成 + GPT-4o 质检,成为 subject-driven 研究广泛使用的开源数据。
  5. 揭示 UNet 时代经验(仅早期 block 注入条件)不适用于 DiT,需贯穿全栈。

影响:成为「ControlNet-in-the-DiT-era」的代表性参考点,被后续 FLUX 生态控制方法、in-context 类工作(In-Context LoRA、Group Diffusion Transformer)大量对照引用;Subjects200K 被广泛复用;催生作者自己的后续 OminiControl2(聚焦推理效率)与社区 ComfyUI 集成、OminiControl Art 风格化扩展。

已知局限

  1. 统一序列使总 token 数增加,推理计算效率下降(作者自陈的首要局限)。
  2. 主体生成主要适用于物体而非人物——训练数据缺人物数据。
  3. subject-driven 模型在 FLUX.1-dev 上表现可能不佳(论文用 schnell)。
  4. 公开发布模型只支持 512×512(后续 omini 版才到 1024)。

原始链接

一手源存档(sources/)