LLaDA-Image:用完全开源配方从零训一个 6B 强图像生成器

Qwen-Image-Bench 上各模型 EN/CN 综合分柱状图,LLaDA-Image 蓝色柱居开源第一
Fig. 1 — Qwen-Image-Bench 结果(按两语种均分排序)。深灰=开源,浅灰=闭源,蓝色=LLaDA-Image。 LLaDA-Image 综合 53.53(EN)/53.38(CN) 是开源第一,已超过闭源的 Imagen 4.0 Ultra、逼近 FLUX.2 Max;离顶级闭源 GPT-Image 2 (65.23) 仍有明显差距。

目标

不是只追生成质量,而是回答一个系统问题:在"可获取的数据预算 + 稳定的大规模训练 + 高效部署"三重约束下,从零训一个强图像生成器要付出什么代价?并把配方完全开源。

数据

220M 生成训练样本,98% 真图;其中 90%+ 是无 caption 的 image-only 数据用于预训练/中训练;配对 image-text 只进入后段 SFT,且真图占比全程 >70%。

方法

冻结的 dLLM 版 VLM(LLaDA2.0-Mini)当理解后端 + RQA/Connector 桥接 + 单流 DiT 做 flow-matching;编辑走绕过 VLM 的参考图双通道。

系统

DiT 全程无参数 RMSNorm + Muon 优化器;序列 bin-packing + 分块扩散;宽高比分桶变分辨率;checkpoint 合并抑制震荡;TwinFlow 蒸馏到 2–4 步。

术语速查

这篇报告的缩写密度很高,先一句话一个:

术语 一句话解释
DiT Diffusion Transformer,用 Transformer(而非 U-Net)做扩散/流匹配的主干;本文是"单流"的——图像 token 和条件 token 在同一套 block 里联合注意力。
dLLM 扩散语言模型(diffusion LLM)。不是自回归逐 token 生成,而是像扩散一样"从全 [MASK] 迭代去噪出文本"。本文的理解后端 LLaDA2.0-Mini 就是 dLLM。
VLM 视觉-语言模型。这里指基于 dLLM 的多模态理解模块,负责把文本指令(和可选图像)编码成生成条件。
RQA Residual Query Adapter,残差查询适配器。一组可学习 query token 去 cross-attend 输入序列,抽出"对生成有用"的信息,再拼回原序列喂给冻结 VLM。
Connector 一个浅层 Transformer,把 VLM 的隐状态投影/对齐到 DiT 的条件空间。
SigLIP-VQ 带向量量化的 SigLIP 视觉编码器,本文既做 VLM 的视觉输入,也在编辑时抽参考图的语义特征。
VAE 变分自编码器,图像↔latent 的压缩器。本文用 FLUX.2 VAE。
Flow Matching 流匹配。学一个把噪声直线插值到数据的"速度场",训练目标是回归 \(z-x\)。
RMSNorm 只按均方根归一化、去掉均值中心化的 Norm;"无参数"= 连缩放增益 \(\gamma\) 都不学。
Muon 一种对权重矩阵做正交化/谱归一更新的优化器,近来在大模型训练里以稳定著称。
DMD / DMD2 Distribution Matching Distillation,用真/假 score 之差匹配分布,把多步模型蒸成少步。
TwinFlow 本文用的蒸馏法:用同一个 DiT 的正时间/负时间两个"角色"分别当生成器和假 score,省掉独立的假 score 网络。
CoT SFT Chain-of-Thought 监督微调,先把理解后端的"边想边答"能力练好。
T2I / I2I 文生图 / 图生图(编辑)。

1. 出发点 (Motivation)

主流文生图配方(Stable Diffusion、SD3 那一系)从第一步就把"学视觉先验"和"学语言对齐"耦在一起——最耗算力的早期训练阶段就需要配对 caption。这带来一串环环相扣的瓶颈:

作者的判断是:这些必须协同设计(监督信号 + 架构 + 训练管线 + 蒸馏),单点优化解决不了。于是提出三条与主流相反的赌注:

  1. 把视觉先验学习和语言对齐解耦——先用 image-only 数据学先验,语言对齐推迟到后段 SFT(i1-2026 恰好相反,靠纯合成 caption 从头训,是很好的对照)。
  2. 真图为主——明知早期 benchmark 涨得慢,也押注"更高的真实感天花板"。
  3. 用扩散语言模型(dLLM)当理解后端——在一片"自回归 VLM / T5 文本编码器"里是个异类。

这篇属于"技术报告 / 系统论文"。 它的价值不在某一个新公式,而在一整套可复现的工程决策 + 每个决策背后的"为什么"。所以下面 §2 用"决策日志 + 关键公式"来读,§4 单独拉一条系统/工程线。

2. 方法 (Model Design)

训练流水线:dLLM CoT SFT → Image-only PT 256² → Image-only MT 512² AR桶 → Text-to-image SFT 512²→1024² → Joint Gen-Edit → LLaDA-Image → Turbo 2-4步
Fig. 2 — 训练与发布路径。虚线(CoT SFT)先把冻结理解后端准备好;实线训练生成器,产出 Base(多步)和 TwinFlow 蒸馏的 Turbo(2–4 步)两个 checkpoint。分辨率从 $256^2$ 一路爬到 $1024^2$。

2.0 消融决策表(读这一节就够拿到主干)

组件 起点/常规做法 本文选择 为什么
早期监督信号 配对 image-text(caption) image-only 自条件(Recipe #3) caption 贵且和降采样后的图不一致;图里本就含有监督它自己所需的语义,冻结 VLM 抠出来当条件即可
数据真/合成比 合成为主,早期收敛快 真图 >70%(PT/MT 100% 真图)(Recipe #2/#4) 合成早期快但传染 artifact;真图收敛慢但真实感天花板更高
DiT 归一化 LayerNorm / 带参数 Norm 全程无参数 RMSNorm(Recipe #1) 长训练地平线上显著更稳;去掉可学增益减少一处漂移源
优化器 AdamW Muon(生成全阶段) 谱/正交化更新,稳住大规模训练
条件流 双流 MMDiT(图/文各一路) 单流 DiT(图文 token 同栈联合注意力) 让语义在每一层都能直接影响像素合成,主干更同质简单
理解后端 自回归 VLM / T5 文本编码器 dLLM 版 VLM(LLaDA2.0-Mini) 统一多模态理解,且能在 image-only 阶段消费视觉 token
编辑参考图注入 进 VLM 一起理解 绕过 VLM,直接进 DiT(语义+像素双通道) 保住 VLM 通用理解;干净 VAE latent 提供未改区域的原生像素证据
时间步采样 均匀 \(U(0,1)\) logit-normal(\(P_{mean}=P_{std}=0.8\)) 把更多监督预算投到高噪声(早期去噪)——那里最敏感、错误会沿轨迹传播
少步部署 独立训练一个少步模型 TwinFlow 蒸馏(共享 DiT 正/负时间双头) 不引入独立假 score 网络,推理时丢掉假 score 头零开销
收敛后选点 选单个最优 checkpoint 多邻近 checkpoint 权重平均 抑制采样噪声导致的分数震荡,更鲁棒

2.1 三段式架构与"单流"DiT

LLaDA-Image 架构:RQA 学习 query cross-attend 输入,拼接后进 LLaDA2.0 Mini 单次 prefill,Connector 投到 DiT 条件空间;FLUX.2 VAE 供 latent;编辑额外用 SigLIP-VQ 语义 + 干净 VAE latent;所有 token 拼接进单流 DiT 预测速度
Fig. 3 — 架构总览。三大件:dLLM-VLM 理解(中)→ RQA+Connector 桥接 → 单流 DiT 生成(上,×N block)。右侧是无参数 RMSNorm 的 FFN/Attention block 细节(zero-init gate、Q/K-Norm)。下方两行分别是 T2I 与 Editing 的数据流:编辑时参考图不进 VLM,走 SigLIP-VQ 语义 + FLUX.2 VAE 干净 latent 两条旁路直接进 DiT。

整个前向可以写成一条嵌套式子(论文 Eq. 5):

\[\hat{v}_t = F_\theta(x_t, t, h_{cond}) = F_\theta\Big(x_t,\, t,\, c_\phi\big(g\left(\text{concat}(c,\, q_\psi(q_0, c))\right)\big)\Big)\]

—— 翻译: 从里到外读——先把可学 query $q_0$ 和输入条件 $c$ 送进 RQA $q_\psi$ 抽出残差 query,拼回 $c$ 后过冻结 VLM $g$ 做一次 prefill,再用 Connector $c_\phi$ 投影成条件 $h_{cond}$;最后 DiT $F_\theta$ 在噪声 latent $x_t$、时间 $t$、条件 $h_{cond}$ 下预测流匹配速度 $\hat v_t$。四个字母就是四个模块的串联。

为什么要 RQA? 冻结的 VLM 不会主动把"生成需要的细粒度视觉先验"暴露出来。RQA 的做法是让一组 query 先去 cross-attend 全部多模态输入(Eq. 2 \(q_{res}=q_\psi(q_0,c)\)),把结果追加到输入序列末尾(而不是替换),再让冻结 VLM 一次 prefill(Eq. 3)——相当于用一段可学的"提示后缀"去撬动冻结 VLM 吐出对生成最有用的隐状态。全程 VLM 参数不动,只训 RQA、Connector、DiT。

"单流"的含义:与 MMDiT 那种"图一路、文一路、各自有独立权重"不同,本文把图像 token 和条件 token 拼成一条序列,同一套 block 的联合自注意力处理。好处是语义能在每一层直接影响像素演化,主干保持同质简单。

2.2 image-only 预训练:从"待生成的那块图"里自造条件

这是全篇最反常识的一步(Recipe #3)。核心观察:一张图本身就含有监督它自己生成所需的高层语义。于是训练时:

\[\tilde{c}_{img} = c_{img} \odot m, \qquad c = \text{concat}(c_{aux},\, \tilde{c}_{img})\]

—— 翻译: $m\in\{0,1\}^N$ 是保留概率 $1-\rho_{img}$ 的二值掩码。留下一部分可见 patch、遮掉其余,任务就从"稠密重建"变成"稀疏→稠密预测":模型必须从可见 patch 推断缺失内容,被逼着学上下文与构图结构,而不是抄答案。

生成器用流匹配训练(Eq. 10)。对高斯噪声 \(z\)、\(t\sim U(0,1)\),构造插值 \(x_t=(1-t)x+tz\),回归常速度场:

\[\mathcal{L}_{FM}(\theta,\phi,\psi) = \mathbb{E}_{y,x,z,t,m}\Big[\big\|F_\theta(x_t, t, h_{cond}) - (z-x)\big\|_2^2\Big]\]

—— 翻译: 目标速度是 $z-x$(从数据指向噪声的直线方向)。这一步只更新 DiT $F_\theta$、RQA $q_\psi$、Connector $c_\phi$;VLM $g$ 和视觉编码器 $v$ 全程冻结。于是"廉价的 image-only 数据"就被吸收成了视觉先验。

中训练(MT)沿用同样的 image-only 公式,只把像素预算从 \(256^2\) 提到 \(512^2\),并引入宽高比分桶。它是一座"桥":先只改分辨率(条件仍来自图自身),到 SFT 再只改监督来源(换成文本)——避免"分辨率+监督来源"同时突变。

2.3 编辑:让参考图绕过 VLM,走语义+像素双旁路

编辑是这套架构最巧的地方——参考图故意不进 VLM(否则会污染 VLM 的通用理解),而是开两条直达 DiT 的旁路:

① 语义旁路(Eq. 6):SigLIP-VQ 抽参考图语义 \(f_{ref}=v(y_{ref})\),过一个 DiT 专用分支 \(b_\omega\)(一个 embedder + 两层 Transformer)得 \(h_{ref}\),与文本条件拼成联合条件 \(h_{joint}=\text{concat}(h_{cond}, h_{ref})\)。

② 像素旁路(Eq. 8):光有语义留不住未改区域的低层外观。所以再用 FLUX.2 VAE 把干净参考图编码成 latent,与噪声目标 latent 在通道上拼接后进 DiT:

\[x_{ref}=\text{VAE}(y_{ref}),\quad x_t^{edit}=\text{concat}(x_t, x_{ref}),\quad \hat{v}_t^{edit}=F_\theta(x_t^{edit}, t, h_{joint})\]

—— 翻译: 语义旁路告诉模型"参考图讲了什么",像素旁路直接把"不该改的区域长什么样"的原生像素塞进去。两者互补,让身份、结构、纹理、背景一致性都稳住——而且没有引入独立的编辑专用主干,一个 checkpoint 通吃 T2I+编辑。

代码里这一步有个漂亮的实现:干净参考 latent 的时间步被强制设成 0,和噪声目标 latent(时间步 \(t\))逐 token 用不同的 AdaLN 调制(详见 §4.2)。

2.4 TwinFlow:一个 DiT 用正负时间当两个角色

要把 50 步的 Base 蒸成 2–4 步,本文用 TwinFlow(建立在 DMD2 上)。DMD2 需要一个在线假 score 模型去追学生分布,通常得多养一个网络。TwinFlow 的技巧是用同一个 DiT 的时间符号当角色开关:正时间 \(+t\in[0,1]\) 训生成器,负时间 \(-t\in[-1,0]\) 训假 score。

一步从噪声到数据的映射(Eq. 12):\(\hat{x}=z-F_\theta(z,+1,h_{cond})\)。假 score 分支用 detach 后的 \(\hat x\) 重新加噪训练(Eq. 13–14),分布匹配的 DMD 目标(Eq. 16):

\[\mathcal{L}_{DMD}(\theta) = \mathbb{E}\big[w(t)\,\langle \text{sg}(s_{fake}-s_{real}),\, \hat{x}_t\rangle\big]\]

—— 翻译: $s_{real}$ 来自冻结的原始模型 $F_{base}$(在 $+t$),$s_{fake}$ 来自被蒸的 $F_\theta$(在 $-t$)。用两者 score 之差(stop-gradient)去推学生样本 $\hat x_t$,只更新正时间的生成器;负时间分支由 Eq. 14 单独更新。交替优化 = 在一个模型里实现 DMD。

三个工程细节:① 借 DuMo 的"一进双出"给共享 DiT 挂两个输出头(假 score 头 / DMD 头),推理只留 DMD 头、零额外开销;② 用4 步反向仿真对齐学生推理轨迹;③ 生成器:假 score 更新按 1:2(比 DMD2 的 1:5 省),蒸完再用 TBSM 做 RL 微调。

3. 结果 (Results)

主战场 Qwen-Image-Bench(1000 条分层 prompt,测质量/美学/对齐/真实感/创意五维,中英双轨):

文字渲染:LongText-Bench EN/ZH 0.923 / 0.913,双语差距小(均衡)但低于最强专用文字模型(Qwen-Image 2512 的 0.956/0.965)。CVTG-2K 平均词准 0.875 排第二(仅次于 SenseNova U1.5 Preview 0.887),且随文字区域从 2→5 增多只从 0.892 降到 0.857,稳定性好。

编辑 GEdit-Bench:综合 EN/CN 7.336 / 7.294,单 checkpoint 双语编辑。分项暴露短板:语义一致性(GSC 8.043) 明显强于感知质量(GPQ 7.182),EN 尤其如此——离专用编辑模型(Qwen-Image-Edit 2511 的 7.877、FireRed 7.943)还有距离。

旧诊断基准(作者明确降权):GenEval 综合 0.85(单物体 1.00、双物体 0.98、属性绑定 0.84 并列最高,但计数只有 0.53 拉低总分,是明确的组合弱点);DPG-Bench 87.48。作者直言 GenEval/DPG 已饱和、与人类偏好排序背离,只作历史对照。

SFT 数据构成环形图:People 37.2%、Nature 26.6%、Design 26.4%、Synthetic 9.9%,内含 Single Portrait 25.2% 等细分
Fig. 4 — SFT 阶段(加权)内容构成。People 37.2%(其中单人像 25.2%)、Nature 26.6%、Design 26.4%、Synthetic 仅 9.9%。人像和文字/设计类占比高,呼应"针对性 refinement 强化文字渲染+高保真人像"。

4. 实现细节与工程线 (Code Cross-Read)

仓库 inclusionAI/LLaDA-Image 目前放出的是模型定义 + 推理 pipeline(transformer_llada_image.py 1874 行、pipeline_llada_image.py 651 行);训练代码仓库标注在陆续释放中。以下引用均来自已开源的推理侧代码,逐条对回论文公式。

4.1 Recipe #1 落地:无参数 RMSNorm 铺满整个 DiT

论文说"把 DiT 里每个 Norm 换成无参数 RMSNorm"。代码里 elementwise_affine=False 就是"无参数"——连缩放增益都不学:

repo/src/models/transformer_llada_image.py:L199-L202, L152-L153 — TransformerBlock 的四处 RMSNorm 与 Q/K-Norm 全部无参数

self.attention_norm1 = RMSNorm(dim, eps=norm_eps, elementwise_affine=False)
self.ffn_norm1       = RMSNorm(dim, eps=norm_eps, elementwise_affine=False)
self.attention_norm2 = RMSNorm(dim, eps=norm_eps, elementwise_affine=False)
self.ffn_norm2       = RMSNorm(dim, eps=norm_eps, elementwise_affine=False)
# 注意力里 Q/K 也各挂一个无参数 RMSNorm(qk_norm 稳定注意力 logits)
self.norm_q = RMSNorm(self.head_dim, eps=norm_eps, elementwise_affine=False) if qk_norm else None
self.norm_k = RMSNorm(self.head_dim, eps=norm_eps, elementwise_affine=False) if qk_norm else None

整个文件里 elementwise_affine=False 出现十余次,覆盖 DiT block、QueryFormer、Connector、SigVQ 视觉塔——确实是"铺满"。这印证了报告把它当一等公民的稳定性手段而非小 trick。

4.2 单流 block:sandwich-norm + zero-init tanh 门 + 逐 token 双调制

论文 Fig. 3 右侧的 block 细节(Scale → RMSNorm → 子层 → RMSNorm → zero-init Gate → 残差)在代码里一字不差,且藏着编辑的关键——noise_mask 逐 token 选择"噪声/干净"两套调制:

repo/src/models/transformer_llada_image.py:L228-L251 — TransformerBlock.forward 的调制与残差

if noise_mask is None:                       # T2I:全序列一套调制
    scale_msa, gate_msa, scale_mlp, gate_mlp = \
        self.adaLN_modulation(adaln_input).unsqueeze(1).chunk(4, dim=2)
    gate_msa, gate_mlp = gate_msa.tanh(), gate_mlp.tanh()   # 门用 tanh 压到 (-1,1)
    scale_msa, scale_mlp = 1.0 + scale_msa, 1.0 + scale_mlp # scale 以 1 为中心
else:                                        # 编辑:噪声 token 与干净参考 token 各一套
    noisy_mod = self.adaLN_modulation(adaln_noisy).chunk(4, dim=1)
    clean_mod = self.adaLN_modulation(adaln_clean).chunk(4, dim=1)
    scale_msa = _select_per_token(1.0+noisy_mod[0], 1.0+clean_mod[0], noise_mask, seq_len)
    gate_msa  = _select_per_token(noisy_mod[1].tanh(), clean_mod[1].tanh(), noise_mask, seq_len)
    # ... mlp 同理
attention_output = self.attention(self.attention_norm1(hidden_states) * scale_msa, ...)
hidden_states = hidden_states + gate_msa * self.attention_norm2(attention_output)
hidden_states = hidden_states + gate_mlp * self.ffn_norm2(
    self.feed_forward(self.ffn_norm1(hidden_states) * scale_mlp))

paper↔code 印证:Eq. 8 说"干净参考 latent 与噪声目标 latent 拼接进 DiT"。代码用 noise_mask 逐 token 判断这个 token 是"噪声目标"还是"干净参考",分别用时间步 \(t\) 和时间步 \(0\) 生成的调制——这样同一个 block 里,参考 token 表现得像"已经去噪完的干净图",目标 token 才被真正去噪。这正是主 forward 里 dual_timestep = torch.cat([t, torch.zeros_like(t)])(L634)的来源。

FFN 是标准 SwiGLU(w2(silu(w1 x) * w3 x),L166-L175),隐藏维 dim/3*8。

4.3 RQA = QueryFormer:256 个可学 query 撬动冻结 VLM

论文 Eq. 2 的 \(q_\psi(q_0,c)\) 就是这个 QueryFormerModel——默认 256 个 meta_queries、单层 cross-attention:

repo/src/models/transformer_llada_image.py:L1338-L1382 — QueryFormer 的可学 query 与前向

self.meta_queries = nn.Parameter(torch.zeros(num_queries, hidden_size))   # q0,默认 256×2048
nn.init.normal_(self.meta_queries, std=1 / math.sqrt(hidden_size))
# ...
def forward(self, inputs_embeds, attention_mask, ...):
    query_embeds = self.meta_queries.unsqueeze(0).expand(batch_size, -1, -1)
    for query_block in self.query_blocks:          # 默认只 1 层
        query_embeds = query_block(query_embeds, inputs_embeds, attention_mask)  # cross-attend 输入
    return LLaDAImageQueryFormerOutput(query_embeds=query_embeds)

4.4 条件编码全链路:RQA → 追加 → 冻结 prefill → Connector

pipeline 侧把 Eq. 2→3→4 串成一条,还有一处论文没细说但很关键的非对称注意力掩码:

repo/src/pipelines/pipeline_llada_image.py:L196-L228 — _encode_text:query 追加 + 冻结 VLM prefill + connector

inputs_embeds = self.text_encoder.get_input_embeddings()(input_ids)
query_embeds = self.queryformer(inputs_embeds, attention_mask).query_embeds   # Eq.2
text_length = inputs_embeds.shape[1]
inputs_embeds = torch.cat([inputs_embeds, query_embeds], dim=1)               # 追加,非替换
# ...构造 backbone 注意力掩码...
backbone_attention_mask[:, :, :text_length, text_length:] = mask_value        # ★关键
hidden_states = self.text_encoder.model(inputs_embeds=inputs_embeds, ...)     # Eq.3 冻结 prefill
prompt_embeds = self.text_projection(hidden_states).hidden_states             # Eq.4 connector→h_cond

那行 ★关键 是点睛之笔:它让原始文本 token 看不见后面追加的 query token,但 query 能看见文本。于是冻结 VLM 对文本的理解完全不被 query 干扰(保住通用能力),而 query 单向地从文本里"吸"出对生成有用的信息——这正是 RQA "residual/旁挂"设计哲学在注意力层面的体现。

4.5 推理:flow-matching 欧拉 + 标准 CFG

repo/src/pipelines/pipeline_llada_image.py:L603-L624 — 去噪循环与分类器无关引导

latent_model_input = torch.cat([latents, latents], dim=0) if do_cfg else latents
model_output = self.transformer(latent_model_input, timestep, cap_feats, glm_cap_feats,
                                source_latents=source_latents, ...)
if do_classifier_free_guidance:
    conditional_output, unconditional_output = model_output.chunk(2)
    model_output = unconditional_output + self.guidance_scale * (
        conditional_output - unconditional_output)          # 默认 guidance_scale=4.5
latents = self.scheduler.step(model_output, timestep, latents, return_dict=False)[0]

用 FlowMatchEulerDiscreteScheduler,编辑时把 source_latents(干净参考 VAE latent)一路传进 DiT。

4.6 训练侧系统工程(来自报告正文)

推理代码没有的这些,报告写得很细,值得单列(复现的真正难点在此):

paper vs code 差异:目前公开仓库只有推理路径,训练循环、image-only 掩码自条件、TwinFlow 蒸馏均未在代码中可见,只能对回报告正文——上面的系统细节属于"报告主张、代码尚未开源验证",复现者需留意。

5. 评价 (Assessment)

亮点

不足与存疑

延伸阅读与交叉验证

把 LLaDA-Image 放进"2026 开源统一图像生成"的坐标系里,和 KB 里三篇同期工作对照,分歧非常有信息量:

维度 LLaDA-Image(本文) boogu-image-2026 i1-2026 qwen-image-2-2026
早期监督 image-only 自条件(90%+ 无 caption) 配对为主,但总数据少 ~1 数量级 纯长合成 caption 从头训 配对 + 长文本
真/合成 真图 >70%(PT 100% 真) 真图为主 合成 caption 反而更好 混合
条件流 单流 DiT 双流/单流 MMDiT 双流 MMDiT + long-skip MMDiT
理解后端 dLLM-VLM(LLaDA2.0-Mini) Qwen3-VL(AR,兼当 prompt 改写器) T5Gemma-2B 文本编码器 Qwen3-VL(冻结)
AdaLN 保留(tanh 门 + zero-init) 保留 砍掉(省 0.23B) 保留
蒸馏 TwinFlow(共享 DiT 双头 DMD) Decoupled DMD 4 步 —— DMD 4-NFE
参数量 6B 10B 3B ——

一致的地方:四家都把"少步蒸馏(DMD 系)"当标配,都用某种强多模态/文本后端当条件,都认同"传统 GenEval/DPG 已饱和、要换 Qwen-Image-Bench 这类人本基准"。

尖锐的矛盾(这才是读一组论文的价值):

  1. 合成 vs 真图,直接对撞。i1 用 300+ 控制实验得出"纯合成长 caption 训练效果更好";LLaDA-Image 则押注"真图为主、承认早期慢但天花板高"。两者不是谁错,而是目标函数不同:i1 优化的是 benchmark(合成 caption 与评测分布更对齐),LLaDA-Image 优化的是"照片级真实感天花板"(合成会传染 artifact)。分歧成因 = 评测代理 vs 真实感的取舍。
  2. 单流 vs 双流。LLaDA-Image 赌"单流让语义每层影响像素、主干更简单";i1/Boogu/Qwen 都用双流 MMDiT。目前没有控制实验能判谁在同算力下更优——这是开源社区值得补的对照。
  3. 要不要 caption 进最贵阶段。这是 LLaDA-Image 与其余三家最根本的分野,也是它数据预算"moderate"的来源。若 image-only 自条件真能规模化,等于给"没有海量配对数据的团队"开了一条路——但需要它把训练代码放出来才能证伪。

研究启发 (Transferable Takeaways)

把监督信号从最贵的阶段挪走

"最耗算力的阶段最好别依赖最贵的标注"。image-only 自条件是这条原则在图像域的实例——任何"早期用廉价数据学先验、后期才引入昂贵对齐"的任务都可借鉴。

用时间符号复用一个网络当两个角色

TwinFlow 用 $+t/-t$ 把生成器和假 score 塞进同一个 DiT,省掉一整个网络。凡是"需要一个在线辅助网络追学生分布"的蒸馏/对抗训练,都可以想想能不能用一个符号位复用主干。

旁挂而非替换:非对称注意力掩码

让可学 query 单向"吸"冻结模型的信息、又不让原输入看见 query(`mask[:, :, :text_len, text_len:]=-inf`),是"在不动冻结主干的前提下榨取它"的通用手法,比全量微调便宜得多。

反直觉点:真实感与 benchmark 会打架

"真图早期涨分慢"被明确写进报告。当你的模型在 benchmark 上被合成数据方案压着时,先分清你要的是"评测代理分数"还是"真实分布"——它们可能指向相反的数据配方。

讨论 / Comments

评论托管在本仓库的 GitHub Discussions, 需 GitHub 账号。