OmniGen2: Towards Instruction-Aligned Multimodal Generation
一句话概括:OmniGen2 的核心不是再堆一个图像生成器,而是把“可理解多模态指令的 VLM”“专注高保真合成的扩散 Transformer”“面向多图上下文的 Omni-RoPE”以及“按 Edit → GenEval → IC 排序的多任务 RL 对齐”组合成一个统一的图像生成、编辑与 in-context 生成系统。
1. Motivation(研究动机)
多模态生成模型在 2025–2026 年已经从单纯的 text-to-image 扩展到图像编辑、文本渲染、风格迁移、知识驱动生成和 reference-based / in-context generation。论文认为真正的瓶颈不只是“能不能生成清晰图片”,而是模型在复杂真实指令下是否能同时保持三件事:第一,理解用户给出的文本、图像、多个参考对象和场景约束;第二,在生成或编辑时保持语义一致性、主体一致性和局部细节;第三,在多个任务之间对齐而不被某个单一奖励或美学偏好过度优化。换句话说,作者把问题定义为 generalized instruction alignment for multimodal generation。
已有路线的不足主要有三类。第一类是架构层面:一些统一模型试图让同一个自回归模型同时承担语言/视觉理解和图像生成,容易让理解能力与扩散式高保真合成互相牵制;另一些系统把 VLM 和图像生成器串成复杂管线,能力强但端到端统一性差,也不利于 in-context 多图条件。第二类是数据层面:公开数据对普通 T2I 很充足,但对细粒度编辑、一致主体跨场景生成、多图组合和反思式修正的覆盖不足;仅靠 inpainting 生成编辑数据容易质量不稳定,从互联网检索 reference 数据则任务覆盖有限。第三类是对齐层面:对图像生成做 RL 时,单一审美或偏好奖励容易 reward hacking;OCR 等专门任务虽然可验证,但和通用编辑、in-context 组合控制的技能重叠低,可能降低模型可塑性。
OmniGen2 因此选择一个两阶段思路:先构造一个足够强且灵活的 foundation model,使它具备广泛世界知识、视觉理解和基础生成/编辑/in-context 能力;再通过多任务强化学习对齐,把任务与奖励按顺序组织,利用技能重叠做正迁移。这里“instruction-aligned”不是只做 SFT,也不是只在 T2I 上做偏好优化,而是把 T2I、Edit、IC 三个基本任务族放进同一对齐课程里:Edit 使用 EditScore,T2I 使用 GenEval 的可验证奖励,IC 使用 Qwen2.5-VL-72B 作为 reward signal。
论文还指出 in-context generation 的评测本身不够成熟。DreamBench 只有 30 个对象和 25 个模板,且常用的 CLIP-I / DINO 类指标对多主体一致性和解释性不足。OmniGen2 因此同时提出 OmniContext benchmark,用 Character、Object、Scene 三类 reference 图像构成 SINGLE、MULTIPLE、SCENE 三类任务,并用 GPT-4.1 给 Prompt Following、Subject Consistency 和 Overall 分数及理由。这个 benchmark 的作用是把“参考图像一致性”从单对象相似度提升到多图、多主体、多场景的可解释评估。
2. Idea(核心思想)
这篇论文最核心的新意可以压缩成三句话:用解耦架构避免 VLM 理解和扩散生成抢同一个参数空间;用 Omni-RoPE 把“第几张图”和“图内局部坐标”分离,从而让多图 reference 与输出图保持空间对应;用任务选择和任务顺序约束 RL,使 Edit、T2I、IC 的奖励互相补强而不是互相干扰。
第一层思想是“理解与合成解耦”。OmniGen2 的 autoregressive transformer 初始化自 Qwen2.5-VL-3B,承担多模态上下文理解和指令语义编码;diffusion transformer 随机初始化,专门负责高保真图像合成。输入 prompt 中的特殊生成 token <|img|> 作为理解阶段和生成阶段的边界:VLM 处理文本与图像上下文,生成 token 触发图像生成,VLM 的 hidden states 被抽取出来作为扩散解码器的高层语义条件。同时,模型还把 Flux-VAE 的低层图像 latent 特征提供给扩散解码器,使编辑任务能保留细节。这相当于把“知道要改什么”和“怎么在像素/latent 里精确改”分别交给更合适的模块。
第二层思想是 Omni-RoPE。传统多图位置编码容易把不同图片按全局高度/宽度偏移串起来,或把图像 instance 与空间坐标耦合在一起。Omni-RoPE 给第 k 张图的 token 分配三维位置标识: 其中 表示 instance identity,同一张图内所有 token 共享; 则是图内局部二维坐标,从每张图自身的 开始计算。这样的好处是,输入 reference 图和输出图中语义对应的 patch 可以得到相同的局部空间坐标,利于编辑和主体保持;不同图片又通过 区分,避免多个 reference 或输入/输出图被混淆。玩具重建实验证明这个分解有效:Lumina-Image-2.0 类 RoPE 到达 loss < 0.014 约需 2500 steps、final loss 0.017;Qwen2-VL 类设计约 1200 steps、0.005;Omni-RoPE 约 800 steps、0.003;再加 image index embedding 后 final loss 0.002。
第三层思想是“对齐不是奖励越多越好,而是任务与奖励的 curriculum 要能产生迁移”。作者把任务定义为 ,其中 , 是任务实例, 是奖励信号。最终 curriculum 是 Edit → GenEval → IC:先用 general editing + EditScore 建立细粒度指令执行与局部保持能力,再用 GenEval 可验证奖励强化对象/属性/关系组合,最后用 in-context + Qwen2.5-VL-72B 强化 reference consistency。论文的 ablation 显示,OCR-only 会把 GEdit Overall 从 base 的 6.28 降到 6.13;Edit & HPSv3 虽然使 PQ 到 8.22,却严重牺牲 SC 和 IC;最终 Edit & GenEval & IC 达到 GenEval 0.95、OmniContext 7.95、GEdit Overall 7.21。
3. Method(方法)
3.1 总体架构:Qwen2.5-VL-3B 负责理解,扩散 Transformer 负责合成
OmniGen2 的推理路径是串行但端到端的。输入可以包含文本、单张或多张 reference 图像;Qwen2.5-VL-3B 风格的 VLM 先把上下文编码成 hidden states。遇到 <|img|> 后,系统不让 VLM 自己回归图像 token,而是把相应 hidden states 交给 diffusion transformer。扩散侧使用 Flux-VAE 编码图像 reference,生成过程使用 FlowMatch / Euler 类 scheduler 在 latent space 迭代去噪。论文强调这比共享一个 Transformer 更稳,因为自回归语言建模和扩散去噪的目标不同;把二者硬塞在一起会导致理解或生成一端退化。
从代码看,官方仓库在 OmniGen2-RL/omnigen2/pipelines/omnigen2/pipeline_omnigen2.py 中实现 OmniGen2Pipeline,注册 OmniGen2Transformer2DModel、AutoencoderKL、FlowMatchEulerDiscreteScheduler 与 Qwen2_5_VLForConditionalGeneration。encode_vae() 调用 VAE encoder 采样 latent,并应用 shift_factor、scaling_factor;prepare_image() 把 reference image 转成 ref_latents;__call__() 中先 encode_prompt(),再准备 reference latents、初始噪声 latent、RoPE 参数与 timesteps,最后循环调用 transformer 与 scheduler。代码中的默认 guidance 与 README 一致:text_guidance_scale 默认 4.0,image_guidance_scale 在 pipeline 默认 1.0;RL 配置中常用 image guidance 2、text guidance 4。
Code reference:
main@18e6f9d5(2026-03-20)
| Paper Concept | Source File | Key Class/Function |
|---|---|---|
| VLM + diffusion decoder 的推理管线 | OmniGen2-RL/omnigen2/pipelines/omnigen2/pipeline_omnigen2.py | OmniGen2Pipeline.__call__, encode_vae, prepare_image, encode_prompt |
| 扩散 Transformer 主体 | OmniGen2-RL/omnigen2/models/transformers/transformer_omnigen2.py | OmniGen2Transformer2DModel, forward, img_patch_embed_and_refine |
| Omni-RoPE / 三轴 RoPE 配置 | OmniGen2-RL/omnigen2/models/transformers/repo.py; OmniGen2-RL/options/omnigen2_edit_rl_4machine_editscore7b_avg8.yml | OmniGen2RotaryPosEmbed; axes_dim_rope: [40,40,40], axes_lens: [10000,10000,10000] |
| Flow-GRPO / PPO 风格更新 | OmniGen2-RL/train.py; OmniGen2-RL/omnigen2/grpo/utils.py | evaluate_images, process_grpo_rewards, compute_single_step_ppo_loss |
| EditScore 奖励服务训练配置 | OmniGen2-RL/options/omnigen2_edit_rl_4machine_editscore7b_avg8.yml | reward_server_config, num_images_per_prompt, clip_range, kl_loss_weight |
推理伪代码(按官方 pipeline 控制流概括):
def omnigen2_generate(prompt, ref_images, size, num_steps):
# 1. 多模态上下文由 Qwen2.5-VL 风格 text_encoder / processor 编码
prompt_embeds, attention_mask = encode_prompt(prompt, use_cfg=True)
# 2. reference 图像经 Flux-VAE 进入 latent space,供扩散侧保细节
ref_latents = prepare_image(ref_images, num_images_per_prompt)
# 3. 采样初始噪声 latent,并根据 patch_size、axes_dim_rope 准备旋转位置编码
latents = prepare_latents(size, channels=transformer.config.in_channels)
timesteps = scheduler.set_timesteps(num_steps)
# 4. 每个扩散步:VLM hidden states + ref latents + noisy latents 一起进入 diffusion transformer
for t in timesteps:
model_pred = transformer(
hidden_states=latents,
encoder_hidden_states=prompt_embeds,
ref_image_hidden_states=ref_latents,
timestep=t,
text_guidance_scale=text_guidance_scale,
image_guidance_scale=image_guidance_scale,
)
latents = scheduler.step(model_pred, t, latents)
# 5. VAE decode 得到最终图像
return vae.decode(unscale_and_unshift(latents))3.2 Omni-RoPE:把 instance identity 与局部空间坐标拆开
Omni-RoPE 针对的是多图输入下的位置语义冲突。编辑任务需要输入图和输出图在局部 patch 上保持一一对应;in-context generation 又需要模型知道“第 1 张 reference 的角色”和“第 2 张 reference 的物体”不是同一个视觉 instance。若只用累积的全局二维坐标,不同图片之间不会有明确 instance 轴;若把 instance 偏移也加到 h、w 上,又破坏了局部 patch 对齐。Omni-RoPE 的三元位置 正好把这两个需求拆开。
代码侧对应到 OmniGen2Transformer2DModel:构造函数检查 hidden_size // num_attention_heads == sum(axes_dim_rope),并创建 OmniGen2RotaryPosEmbed(axes_dim=axes_dim_rope, axes_lens=axes_lens, patch_size=patch_size)。
在 forward() 中,flat_and_pad_to_seq_ref_img() 先把不同 reference images 展平成可 batch 的序列,rope_embedder() 生成 context_rotary_emb、ref_img_rotary_emb、noise_rotary_emb 和合并后的 rotary_emb;
随后模型先用 context_refiner 处理文本 hidden states,再通过 img_patch_embed_and_refine() 处理 noisy image latents 与 reference latents,最后把文本和图像 hidden states 拼进 joint sequence 送入 transformer layers。配置文件中的 axes_dim_rope: [40, 40, 40] 与 axes_lens: [10000, 10000, 10000] 说明实现确实保留了三轴 RoPE。
Omni-RoPE 伪代码(按代码符号和论文公式抽象):
def build_omni_rope(context_tokens, ref_latents, noisy_latents):
# text token: 退化为一维上下文位置
context_rotary_emb = rope_embedder.for_text(context_tokens)
# 第 k 张 reference 图:instance 轴为 Delta_I[k],空间轴为局部 patch 坐标 h,w
ref_pos = []
for k, img in enumerate(ref_latents):
for h, w in local_patch_grid(img):
ref_pos.append((delta_I(k), h, w))
# 输出 noisy image 也使用局部 patch 坐标,利于与输入图 patch-wise 对齐
noise_pos = [(delta_I_output(), h, w) for h, w in local_patch_grid(noisy_latents)]
ref_img_rotary_emb = rope_embedder(ref_pos)
noise_rotary_emb = rope_embedder(noise_pos)
return context_rotary_emb, ref_img_rotary_emb, noise_rotary_emb3.3 数据构建:T2I 大规模基础数据 + 编辑 / in-context / reflection 专门数据
基础数据覆盖两类:多模态理解使用 LLaVA-OneVision;T2I 使用约 140M 开源图文对,并补充 10M 由 Qwen2.5-VL-72B 标注的 proprietary images。这个规模的目标是给 VLM 和扩散生成器提供足够世界知识,而不是只在少量指令数据上微调出表面能力。
复杂任务数据主要补齐编辑和 in-context 的缺口。编辑数据来自 SEED-Data-Edit、OmniEdit,以及额外的 inpainting / video-based pipelines。in-context generation 数据从视频构造:先抽关键帧并选 base frame,用 Qwen2.5-VL-7B-Instruct 找主要 subject,再用 GroundingDINO 得到 box,用 SAM2 分割和跟踪 subject,选择包含全部 subject 且外观变化更大的帧作为 target;对输入帧用 FLUX.1-Fill-dev outpaint 新背景,并用 DINO 相似度过滤 subject 外观偏移过大的样本。in-context editing 也从同一对象的两帧出发:context clip 保留对象但换背景,target clip 则先移除对象作为 input,再由 Qwen2.5-VL-72B-Instruct 生成从 input 到 target 的自然语言编辑指令。
此外,论文还构造 interleaved frames 和 reflection data。Interleaved 数据从视频场景中抽取最多 5 帧序列,并用 Qwen2.5-VL-7B-Instruct 描述动作、环境和外观变化,最终得到 0.8M 视频来源的 interleaved samples,用来训练连续多模态序列处理。Reflection 数据让模型先生成,再对生成图进行多模态反思并尝试修正;论文承认当前 reflection 仍会过度反思,原因包括 3B 规模 MLLM 感知能力有限和 reflection 数据不足。
3.4 训练流程:pre-training → SFT → RL alignment
训练分三大阶段。Pre-training 使用 resolution curriculum:256×256 上 T2I-only 50k steps + Mixed-Task 50k;512×512 上 T2I-only 30k + Mixed-Task 30k;1024×1024 上 T2I-only 50k + Mixed-Task 50k。随后 SFT 在 1024×1024 上 Mixed-Task 100k steps,用 curated datasets 和 proprietary model distilled data 强化推理、组合和视觉质量。最后 RL Alignment 在 512×512 上 Mixed-Task 2.4k steps。论文正文说 foundation model 使用 FlashAttention2 处理 variable context lengths,并用 Rectified Flow objective 优化扩散解码器。
官方仓库公开了 RL / fine-tuning 相关实现和配置,而不是完整复刻所有预训练数据管线。
以 omnigen2_edit_rl_4machine_editscore7b_avg8.yml 为例,模型配置指定 pretrained_vae_model_name_or_path: black-forest-labs/FLUX.1-dev、pretrained_text_encoder_model_name_or_path: Qwen/Qwen2.5-VL-3B-Instruct、diffusion transformer checkpoint pretrained_models/OmniGen2/transformer/pytorch_model.bin,结构参数为 patch_size=2、in_channels=16、hidden_size=2520、num_layers=32、num_attention_heads=21、num_kv_heads=7、axes_dim_rope=[40,40,40]。
训练配置包含 global_batch_size=576、batch_size=18、max_train_steps=1000、learning_rate=4e-4、Adam betas 0.9/0.95、weight decay 0.01、max grad norm 1、bf16、LoRA rank 32 / alpha 64。
RL 子配置包括每次 sampling 48 unique prompts、每 prompt 12 张图、20 inference steps、text guidance 4、image guidance 2、CFG range 0.0–0.6、训练 60% timesteps、PPO clip range [1e-4, 5e-4]、adv clip 5、KL weight 0.04。
RL 更新伪代码(按 train.py 与 grpo/utils.py 抽象):
def flow_grpo_update(batch):
# 1. 对每条 instruction 采样多张图,保留 latents / log_probs / timesteps
samples = pipeline.sample_with_log_probs(
batch.prompt,
num_images_per_prompt=12,
num_inference_step=20,
cfg_range=(0.0, 0.6),
)
# 2. 调用 reward server,例如 EditScore 7B avg8,得到 rewards 和 reasoning
rewards, reasoning = evaluate_images(samples.images, batch.instructions)
# 3. 在同一 prompt 的 group 内标准化 advantage
advantages = process_grpo_rewards(
rewards=rewards,
group_ids=batch.prompt_ids,
std_level="group",
)
# 4. 随机抽取部分 diffusion timesteps,计算 PPO clipped policy loss
for t in sampled_train_timesteps(fraction=0.6):
step_log_probs = forward_logprob(current_policy, samples.latents, t)
loss_pg = compute_single_step_ppo_loss(
step_log_probs,
old_step_log_probs=samples.old_log_probs[t],
advantages=advantages,
clip_range=(1e-4, 5e-4),
adv_clip_max=5,
)
loss = loss_pg + 0.04 * kl_loss(current_policy, reference_policy)
backward_and_step(loss)代码和论文之间的一个重要差异是:论文描述完整的 pre-training / SFT / dataset construction pipeline,但公开仓库中可直接核验的是 inference、evaluation、fine-tuning/RL 训练代码与若干配置;140M + 10M 的原始预训练数据混合、专有蒸馏数据和完整生产级数据生成管线不能仅凭当前仓库完整复现。因此这篇笔记把 pre-training 规模和阶段作为 paper-sourced facts,把 RL hyperparameters 和实现控制流作为 code-sourced facts。
4. Experimental Setup(实验设置)
评测覆盖四个能力簇:视觉理解、图像生成、图像编辑、in-context generation。总表中的理解指标为 MMB、MMMU、MM-Vet;图像生成指标为 GenEval 和 OneIG-Bench-EN;图像编辑指标为 ImgEdit-Bench 和 GEdit-Bench-EN;in-context generation 用 OmniContext 的 Single、Multiple、Scene。OmniGen2 参数量写作 3B + 4B,其中 3B 对应文本/理解侧,4B 对应图像生成侧。
OmniContext 是本文最重要的新评测。它使用人工收集的高质量图像,包括个人照片、开源图片、动画 stills 和 AI-generated images,并分成 Character、Object、Scene 三类。任务层面,SINGLE 只给一张 context image,要求生成同一个角色或物体的新图;MULTIPLE 要组合多个 context image 中的主体;SCENE 要在 reference scene 的环境条件下生成。每个 subtask 50 个 examples。图文对由 MLLM 和人工标注结合构造:MLLM 先过滤低质量样本,人工专家按清晰度、美学和多样性筛选,prompt 由 GPT-4o 生成后再改写以保证语义和句法多样性。评估时使用 GPT-4.1 给 0–10 分的 Prompt Following、Subject Consistency 和 Overall,其中 Overall 是 PF 与 SC 的 geometric mean,并要求模型给 rationale。
编辑评测包含 Emu-Edit、GEdit-Bench-EN、ImgEdit-Bench。Emu-Edit 关注编辑后图像与指令的一致性和未编辑区域保持,论文引用 CLIP-Out、CLIP-I、DINO;GEdit-Bench 报 Semantic Consistency、Perceptual Quality、Overall;ImgEdit-Bench 包含 add、adjust、extract、replace、style、background、tone、appearance 等更细任务。T2I 评测重点是 GenEval,因为它提供 object count、color、position、attribute binding 等可验证信号,适合作为 RL curriculum 中的中间任务。
RL ablation 专门比较任务选择和训练顺序。表中规定 T2I、Edit、IC 分别训练 1500、700、200 steps,用来验证四个问题:单任务 RL 是否有帮助;低重叠任务如 OCR 是否引入负迁移;偏好奖励 HPSv3 是否 reward hacking;同样三种任务不同顺序是否有差异。OOD ablation 进一步在不直接对齐的 Emu-Edit 和 OneIG-Bench 上测迁移能力。
定性结果覆盖 T2I、image editing、in-context generation/editing、limitations。图 5 展示 OmniGen2 的 T2I 文本渲染、复杂描述和视觉保真能力;图 6 展示对象插入、替换、风格和局部修改;图 7 展示 reference object / identity 在新上下文中重绘;图 8 展示中文 prompt、低质量图像、人体形状修改和多图歧义等失败模式。
5. Experimental Results(实验结果)
总体比较中,OmniGen2 在 3B + 4B 参数设置下取得 MMB 79.1、MMMU 53.1、MM-Vet 61.8、GenEval 0.95、OneIG-Bench-EN 0.47、ImgEdit-Bench 3.69、GEdit-Bench-EN 7.21、OmniContext Single 8.41、Multiple 7.73、Scene 7.86。与 OmniGen 的 3.8B 相比,OmniGen2 在 GenEval 从 0.68 到 0.95,ImgEdit-Bench 从 2.96 到 3.69,GEdit 从 5.06 到 7.21,OmniContext Single/Multiple/Scene 从 6.46/5.26/4.34 到 8.41/7.73/7.86,提升非常明显。和 Qwen-Image-Edit-2509、Gemini 2.5 Flash Image 等强模型相比,OmniGen2 不是每项都最高,但在 in-context 场景整体最好,尤其 Scene 7.86 是表中最高。
编辑结果显示 OmniGen2 的局部编辑和保真之间平衡较好。在 Emu-Edit 上,它取得最高 CLIP-Out 0.311,说明更有效执行 requested edits;同时 CLIP-I 0.896 为第二高,DINO 0.876 为最高,说明未编辑区域保持也强。在 GEdit-Bench 上,OmniGen2 的 Semantic Consistency 为 7.58、Perceptual Quality 为 7.94、Overall 为 7.21;论文称 Overall 超过 Gemini-2.5-Flash-Image,仅次于 Qwen-Image-Edit。ImgEdit-Bench 上 OmniGen2 的 overall 是 3.69,虽低于 Qwen-Image-Edit-2509 的 4.41 和 Gemini 2.5 Flash Image 的 4.28,但明显超过 OmniGen 的 2.96。
OmniContext 是本文最能体现“instruction-aligned multimodal generation”的结果。总表中 OmniGen2 在各子类 overall 为 Char 8.19、Obj 8.63、Char+Obj 7.45、Char+Char 7.91、Obj+Obj 7.93、Hybrid 7.75、Character scene 7.91、Object scene 7.93、Scene 7.95。论文正文总结其 overall score 7.95 超过 Qwen-Image-Edit-2509 这个强开源模型,并在所有任务类型上展示更好的 prompt-following 与 subject consistency。Supplement 更细地给出 SINGLE、MULTIPLE、SCENE:SINGLE 的 OmniGen2 为 PF 7.92/SC 8.68/Overall 8.19(Char),PF 8.98/SC 8.44/Overall 8.63(Obj),平均 8.45/8.56/8.41;MULTIPLE 平均 PF 7.63/SC 8.06/Overall 7.73;SCENE 平均 PF 8.07/SC 7.77/Overall 7.86。
RL ablation 的结论比单纯刷新 benchmark 更有价值。Base without RL 是 GenEval 0.78、OmniContext 7.18、GEdit SC/PQ/Overall 为 6.72/7.20/6.28。Edit only 使 OmniContext 到 7.71、GEdit Overall 到 7.01,但 GenEval 只有 0.79;GenEval only 使 GenEval 到 0.94,但 OmniContext 只有 7.24、GEdit Overall 6.30;IC only 对 OmniContext 只到 7.38。Edit & GenEval 取得 GenEval 0.95、OmniContext 7.68、GEdit Overall 7.19,证明有技能重叠的任务组合能互相增强。Edit & HPSv3 则把 PQ 推高到 8.22,却让 OmniContext 降到 6.82、GEdit Overall 6.88,是论文所说 reward hacking 的证据。最终 Edit & GenEval & IC 达到 GenEval 0.95、OmniContext 7.95、GEdit SC 7.58、PQ 7.94、Overall 7.21,是表中综合最优。
OOD ablation 支持“没有只过拟合训练奖励”的说法。在 Emu-Edit / OneIG-Bench 上,Base 是 CLIP-I 0.877、CLIP-Out 0.309、DINO 0.823、OneIG Align 0.7870;最终 Edit+GenEval+IC 是 CLIP-I 0.896、CLIP-Out 0.311、DINO 0.876、OneIG Align 0.8289。虽然 GenEval+Edit 的 CLIP-I 0.909、DINO 0.894 在某些单项更高,但完整 curriculum 在 OneIG 和整体迁移上最好,说明 IC stage 对 reference-based generation 的泛化仍有价值。
局限性也比较清楚。论文和 README 都承认当前模型仍可能不完全遵循指令,实际使用时可增加每 prompt 生成图数再挑选;默认输出 1024×1024,不能自动决定任意尺寸;对中文 prompt、低质量输入图、人体形状修改和多图来源歧义较敏感。Reflection 示例也显示模型会 over-reflect,把正确答案误判为错误,或者生成额外不必要要求。作者把原因归结为 3B-scale MLLM 感知能力和 reflection 数据不足,并提出未来可扩大模型、用 RL 改善 reflection quality。
我的判断是,OmniGen2 对后续工作的主要启发有三点:一是 unified multimodal generation 不一定要单 Transformer 全包,VLM + diffusion decoder 的轻解耦可能是更稳的工程折中;二是 reference-based generation 的关键在位置编码和数据构造,不只是把 reference image 拼进 prompt;三是生成模型 RL 需要把 reward 的泛化性、任务重叠和训练顺序当成主要变量,而不是把 HPS、OCR、编辑分数等奖励简单相加。对复现实验而言,当前公开仓库足以验证推理、Omni-RoPE/transformer 结构、RL loss 与一部分训练配置,但完整 foundation pre-training 和专有数据仍是不可完全复现部分。