Show-o2: Improved Native Unified Multimodal Models

Paper: arXiv:2506.15564 Code: showlab/Show-o Code reference: main @ 45a5a2de (2026-01-08)

1. Motivation (研究动机)

现有 Unified Multimodal Models (UMMs) 通常在三个维度上不够统一。第一,很多系统虽然宣称 any-to-any,但理解侧和生成侧仍使用不同视觉表征:理解依赖 CLIP/SigLIP encoder 的语义特征,生成依赖 VAE latent 或扩散 latent;Janus 系列、BAGEL 等就属于 decoupled visual representation 的路线。第二,不少系统是 assembling tailored models:语言模型只负责规划或生成条件,最终图像/视频由外部 Stable Diffusion / video generator 解码,这削弱了“单模型原生输出文本、图像、视频”的能力。第三,早期 native unified 方法主要覆盖 text-image,视频要么不支持,要么把视频当作额外 tokenizer/decoder 接上去,缺少可扩展到 image + video 的统一 latent 设计。

Show-o2 要解决的具体问题是:在一个语言模型骨架里,用同一组连续视觉表征同时服务 multimodal understanding、image/video generation 和 mixed-modality generation。它不走“理解 encoder + 生成 VAE 两套视觉空间”的 decoupled 方案,而是在 3D Causal VAE latent 上构造统一视觉 token;同时对文本 token 用 autoregressive next-token prediction,对视觉 latent 用 flow matching,让模型可以在同一 interleaved sequence 内预测文本,也可以在检测到 [BOI] / [BOV] 后逐步生成图像/视频 latent。

这个问题值得研究,因为统一模型真正有价值的地方不是“把 VQA 和 T2I 放在同一 demo 页面”,而是让理解、生成、混合输出共享上下文和模型状态:模型可以读图回答,也可以根据历史生成后续图像;可以处理 image/video 输入,也能输出 image/video;还能避免为每个输出模态拼接独立 decoder 的工程复杂度。Show-o2 的实验还给了一个直接证据:spatial (-temporal) fusion 的 ablation 同时改善 MME-p/GQA/FID-5K,这说明“同一视觉表征”至少在小规模 pilot 中没有简单牺牲一侧能力来换另一侧能力。

2. Idea (核心思想)

核心 insight 是:理解侧需要高层语义、生成侧需要低层可还原细节;两者不必使用两套视觉表征,而可以在 3D Causal VAE latent 上用 dual-path extraction 同时取出 semantic path 和 low-level path,再做 spatial (-temporal) fusion。这样视觉 token 既能被 LLM 当作可理解的上下文,又能被 flow head 当作可生成的连续 latent。

关键创新可以压缩成三点:一是以 Wan2.1 风格的 3D Causal VAE latent 作为 image/video 的共同连续空间;二是用 SigLIP 初始化/蒸馏的 semantic layers 加上 projector ,通过 STF 融合为 unified visual representation;三是在 Qwen2.5 LLM 上同时接 language head 和 flow head,用 原生训练文本预测和视觉生成。

与 Janus-Pro 的根本差异是:Janus-Pro 明确 decouple understanding encoder 与 generation tokenizer/decoder,Show-o2 则试图让理解和生成共享一个 3D VAE latent 派生出的 visual representation。与 NExT-GPT/SEED-X 这类 assembling tailored models 的差异是:Show-o2 的输出不是只作为外部生成器的条件,而是由模型内部 flow head 直接预测视觉 latent 的 velocity,再交给 3D Causal VAE decoder 解码。

3. Method (方法)

3.1 Overall framework:文本 token + 3D Causal VAE latent 的统一序列

Figure 1 解读:整条链路先把 text 经 tokenizer/embedding 变成文本 embedding,把 image/video 经 3D Causal VAE encoder 变成连续视觉 latent。视觉 latent 不是直接塞进 LLM,而是先走 dual-path:semantic layers 捕获语义上下文,projector 保留低层生成细节,二者经 spatial (-temporal) fusion 得到统一视觉表示。随后文本 embedding 和视觉表示按 [BOS] {Text} [BOI/BOV] {Image/Video} [EOI/EOV] ... [EOS] 组成 interleaved sequence;Qwen2.5 LLM 用 omni-attention 做序列建模,其中序列间保持 causal attention,视觉表示内部保持 full attention。输出端有两个 head:language head 做 autoregressive text prediction,flow head 做 image/video latent 的 velocity prediction,最后由 text de-tokenizer 和 3D Causal VAE decoder 解码。

为什么用 3D Causal VAE latent

Show-o2 把 image 和 video 都放在 3D Causal VAE 空间里,论文实现采用 Wan2.1 的 3D Causal VAE,空间压缩 、时间压缩 。这使模型不需要为图像和视频分别设计离散 tokenizer;单帧图像可视作时间维为 1 的视频 latent,视频则多了时间维 。在默认 训练分辨率下,配合 patch embedding 后得到 个 image visual tokens,这与 SigLIP patch feature 对齐;高分辨率配置还提供 对应的 个 image tokens。

Sequence format 与 omni-attention

论文采用通用 interleaved format: 这个格式的关键不是 token 字符串本身,而是它允许理解、生成、mixed-modality generation 共享同一自回归上下文。对文本位置,模型像普通 LLM 一样只看历史;对某个视觉块内部,omni-attention 允许 full attention,让视觉 latent 内部互相建模,避免生成/理解视觉块时被严格 left-to-right 破坏空间结构。

3.2 Unified Visual Representation:semantic path + low-level path

视觉 latent 的 noising 形式为: 其中 是真实 image/video latent。Show-o2 的 semantic layers 使用 SigLIP vision transformer blocks,并替换为新的 patch embedding。为了让 semantic path 能在 clean latent 和 noised latent 上都抽取语义,作者先把它预蒸馏到 SigLIP patch features: 其中 是输入图像, 是 cosine similarity。论文报告 semantic layers 预蒸馏 200K iterations,batch size 512,cosine LR ;最后 20K iterations 才以 0.3 概率加入 Eq. 1 的 noised visual latents。干净 latent 的 semantic features 在 66M image-text pairs 上与原 SigLIP features 的平均 cosine similarity 约 0.9。

low-level path 是一个 2D patch embedding projector,用来保留生成所需的细粒度 latent 信息。二者通过 feature dimension concat,再经过 RMSNorm 和两层 MLP 得到统一视觉表示: 这里 STF 对 image 是 spatial fusion,对 video 则自然扩展为 spatial-temporal fusion。直觉上,semantic path 让 LLM 更容易把视觉块当作“可读语义”,projector path 则避免把 VAE latent 过度语义化后丢掉像素/运动细节;fusion 后的 token 同时服务回答问题和预测生成 velocity。

3.3 Flow Head 与统一目标

Flow head 不替代语言模型本体,而是在 LLM hidden states 上接若干 transformer layers,并用 DiT 风格 adaLN-Zero blocks 做 timestep modulation。训练时,language head 对文本 token 做 next token prediction,flow head 对视觉位置预测 velocity 在 released code 中,models/misc.pynext_token_prediction 是标准 shifted cross-entropy,并忽略 label -100velocity_prediction 是 masked MSE。train_stage_one.py 先用 VAE 把 pixel_values 编到 image_latents,再由 transport.samplepath_sampler.plan 产生 ,其中代码注释明确写作 x0->noise x1->imagedefault: velocitymodels/modeling_showo2_qwen2_5.pyforward 同时返回 loss_ntploss_flow;训练脚本用 config.training.ntp_coeff * loss_ntp + config.training.flow_coeff * loss_flow 汇总。

论文公式与 released code 实现差异 / caveat

论文把 semantic layer 蒸馏写成 Eq. 2,但当前 released repo 主要提供下游 Stage-1/Stage-2 训练脚本,train_stage_one.py 直接加载 pre-distilled_semantic_layers.pt;我没有在仓库中找到完整的 semantic-layer distillation training script。另一个可复现性 caveat 是:论文给出 64/128 H100 训练规模和真实数据量,released configs 中训练数据路径多为 path/to/your.jsonlpath/to/your/image/dir,Stage-2 的 max_train_steps 也在训练代码中动态计算,因此仓库更像 recipe/code skeleton + released checkpoints,而不是完整数据/集群配置的逐字复现。

3.4 Two-stage training recipe

两阶段训练是 Show-o2 避免语言能力崩塌的关键。作者认为直接从 LLM/LMM/full model 一阶段联训会消耗 web-scale high-quality text corpus,否则语言知识容易退化;因此先局部学习视觉生成/融合,再全模型 instruction tuning。

Stage-0:semantic layers 预蒸馏

在两阶段之前,先把 蒸馏到 SigLIP-so400m-patch14-384,训练 200K iterations、batch size 512、LR 。默认输入 ,得到 个 visual latents;其他分辨率/video 使用 bicubic interpolation 调整 position embeddings。

Stage-1:冻结 LLM/semantic path,只训练视觉生成相关模块

Stage-1 只训练 projector、spatial (-temporal) fusion 和 flow head。数据侧先使用约 66M image-text pairs,并逐步加入 interleaved data 和 video-text pairs。论文中 1.5B variant:先在 66M image-text pairs 上训练 150K iterations,AdamW,constant LR ,resolution ,context length 1024,understanding/generation total batch sizes 为 128/384,;caption 以 0.1 概率 drop 以支持 classifier-free guidance,64 H100 约 1.5 天。随后将 generation data 替换为从 66M 里筛出的 16M high-quality data,继续 40K iterations。

released code 对应 configs/showo2_1.5b_stage_1_a.yamlshowo2_1.5b_stage_1_b.yaml:冻结 image_embedder_und, und_trans, showo, position_embeddinglearning_rate=0.0001batch_size_t2i=6batch_size_mmu=2max_train_steps=150000/40000ntp_coeff=0.2flow_coeff=1.0

Stage-2:全模型联合微调理解 + 生成

Stage-2 使用约 9M multimodal understanding instruction data、16M high-quality generation data、1.6M video understanding data。论文说 1.5B Stage-2 总计约 35K iterations,,训练约 15 小时。released configs showo2_1.5b_stage_2_{a,b,c}.yamlfrozen_params 从部分冻结逐步过渡到 null,LR 分为 learning_rate_velearning_rate_projlearning_rate_showo,后两段常见为 / / batch_size_t2i=batch_size_mmu=4ntp_coeff=flow_coeff=1.0,并开启 noise_und_image=True

Scaling to 7B

7B variant 基于 Qwen2.5-7B-Instruct。作者不是从零训练 flow head,而是 resume 1.5B 预训练的 flow head,并用轻量 MLP transformation 对齐 hidden size。论文写到:先额外训练 newly initialized STF/projector/MLP transformations 3K iterations,其中 2K warm-up;随后训练 STF、projector、MLP transformations 和 flow head,再按 1.5B 的 Stage-1/Stage-2 继续。7B 全流程约 128 H100 2.5 天;由于成本,larger model 未纳入 interleaved 和 video data。released shell train_showo2_7b_stage1.shshowo2-1.5b-stage-2-c/checkpoint-final 初始化,train_showo2_7b_stage2.sh 使用 multi-node DeepSpeed config。

3.5 Mixed-modality generation

在 mixed-modality fine-tuning 中,输入是 interleaved image-text sequence。作者对序列中所有图像以 0.3 概率加噪;否则随机保留前面若干图像,只对后续图像加噪。生成时模型先在文本上下文中预测 [BOI],一旦检测到 [BOI],就在序列中 append noise,并由 flow head 逐步生成 image latent;生成出的 text tokens 和 images 又作为后续上下文,继续产生下一段文本或图像。这个机制让 Show-o2 可以在视觉故事数据上生成“文字—图像—文字—图像”的连贯输出。

Figure 2 解读:该图把理解、图像生成、视频生成和 mixed-modality generation 放在同一模型展示中。上部示例说明 Show-o2 能做一般图像问答、计数、OCR/文本识别、世界知识步骤推理以及中英文问答;中部展示 text-to-image / text-to-video / image-to-video 的视觉质量;下部则展示 visual storytelling 式的交错文本和图像输出,体现 unified sequence format 的作用。

Figure 3 解读:补充的 text-to-video 和 image-to-video qualitative examples 用来证明 3D Causal VAE latent + flow head 不只适用于静态图片。论文特别强调模型能生成相对一致的视频帧和合理运动,例如 smiling girl、lapping waves、floating clouds 等,但这些仍是 qualitative evidence,主要展示 capability coverage,而不是替代 VBench quantitative comparison。

3.6 Code-grounded pseudocode

Code reference: main @ 45a5a2de (2026-01-08) — pseudocode and mapping based on this commit

Dual-path fusion 对应 models/modeling_showo2_qwen2_5.pyShowo2Qwen2_5.forward

class Showo2VisualFusion(nn.Module):
    def forward(self, image_latents, t):
        # image_latents: [B, C, H, W] or video latents [B, C, T, H, W]
        if image_latents.ndim == 5:
            b, c, frames, h, w = image_latents.shape
            flat_latents = rearrange(image_latents, "b c t h w -> (b t) c h w")
        else:
            b, c, h, w = image_latents.shape
            frames = 0
            flat_latents = image_latents
 
        semantic_tokens = self.image_embedder_und(flat_latents)       # SigLIP-dim path
        generation_tokens = self.image_embedder_gen(flat_latents)     # LLM hidden-size path
 
        semantic_tokens = semantic_tokens + interpolate_or_lookup_pos_embed(h, w)
        semantic_tokens = self.und_trans(semantic_tokens).last_hidden_state
 
        if frames:
            semantic_tokens = rearrange(semantic_tokens, "(b t) l d -> b (t l) d", b=b)
            generation_tokens = rearrange(generation_tokens, "(b t) l d -> b (t l) d", b=b)
 
        fused = torch.cat([semantic_tokens, generation_tokens], dim=-1)
        fused = self.fusion_proj(fused)                               # RMSNorm + MLP
        time_tokens = self.time_embed(t)
        return fused, time_tokens

Stage-1 training step 对应 train_stage_one.py

def stage_one_step(batch, model, vae, transport, optimizer, cfg):
    text_tokens = batch["input_ids"].cuda()
    text_labels = batch["text_labels"].cuda()
    pixel_values = batch["pixel_values"].cuda()
    image_masks = batch["image_masks"].cuda()
 
    # Wan2.1 VAE: image/video pixels -> continuous latents
    image_latents = vae.sample(pixel_values)
 
    # Flow matching path: x0 is noise, x1 is image latent.
    t, x0, x1 = transport.sample(image_latents, max_t0=cfg.training.und_max_t0)
    t, xt, velocity_target = transport.path_sampler.plan(t, x0, x1)
 
    logits, loss_ntp, loss_flow = model(
        text_tokens=text_tokens,
        image_latents=xt,
        t=t,
        attention_mask=batch["attention_mask"].cuda(),
        text_labels=text_labels,
        image_labels=velocity_target,
        image_masks=image_masks,
        modality_positions=batch["modality_positions"].cuda(),
    )
    loss = cfg.training.ntp_coeff * loss_ntp + cfg.training.flow_coeff * loss_flow
    loss.backward()
    optimizer.step()
    optimizer.zero_grad(set_to_none=True)
    return {"loss_ntp": loss_ntp.item(), "loss_flow": loss_flow.item()}

loss 细节对应 models/misc.py

def next_token_prediction(logits, labels, vocab_size):
    return F.cross_entropy(
        logits[:, :-1].contiguous().view(-1, vocab_size),
        labels[:, 1:].contiguous().view(-1),
        ignore_index=-100,
    )
 
 
def velocity_prediction(v_pred, velocity_target, mask=None):
    if mask is None:
        return F.mse_loss(v_pred, velocity_target)
    per_token = F.mse_loss(v_pred, velocity_target, reduction="none")
    return per_token[mask.bool()].mean()

mixed-modality generation 对应 train_mixed_modality_simple.pyinference_mixed_modality.py 的逻辑:

def mixed_modality_generate(model, tokenizer, context):
    tokens = encode_interleaved_context(context)  # text + existing images
    outputs = []
    while not finished(tokens):
        next_token = sample_language_token(model, tokens)
        tokens.append(next_token)
        if next_token == tokenizer.boi_token_id:
            noise_latents = torch.randn_like_image_latents()
            image_latents = flow_sample(model.flow_head, tokens, noise_latents)
            image = vae.decode(image_latents)
            outputs.append(image)
            tokens.extend(encode_generated_image_as_context(image_latents))
        else:
            outputs.append(tokenizer.decode(next_token))
    return outputs

3.7 Code-to-paper mapping

Code reference: main @ 45a5a2de (2026-01-08) — mapping is section-level, not line-level

Paper ConceptSource FileKey Class/Function
Qwen2.5-based native unified backboneshow-o2/models/modeling_showo2_qwen2_5.pyShowo2Qwen2_5, forward, forward_und_only
Semantic layers show-o2/models/modeling_showo2_qwen2_5.py, show-o2/models/modeling_semantic_layers.pyimage_embedder_und, und_trans, SigLIP initialization
Low-level projector and STFshow-o2/models/modeling_showo2_qwen2_5.pyimage_embedder_gen, fusion_proj
Flow head / DiT-style timestep modulationshow-o2/models/modeling_showo2_qwen2_5.py, show-o2/models/modules.pydiffusion_head_a, diffusion_head_b, TimestepEmbedder, FinalLayer
NTP and FM lossesshow-o2/models/misc.pynext_token_prediction, velocity_prediction
Flow transport samplingshow-o2/transport/transport.py, show-o2/transport/path.pycreate_transport, Sampler, path_sampler.plan
Stage-1 recipeshow-o2/train_stage_one.py, show-o2/configs/showo2_1.5b_stage_1_{a,b}.yamlVAE latent preparation, frozen params, ntp_coeff=0.2, flow_coeff=1.0
Stage-2 recipeshow-o2/train_stage_two.py, show-o2/configs/showo2_1.5b_stage_2_{a,b,c}.yamlfull-model tuning, differential LRs, ntp_coeff=flow_coeff=1.0
Inference for MMU/T2I/video/mixed-modalityshow-o2/inference_mmu.py, inference_mmu_vid.py, inference_t2i.py, inference_mixed_modality.pymodality-specific wrappers around the same model
Evaluation scriptsshow-o2/evaluation/inference_geneval.py, inference_dpg.py, compute_dpg_bench.pyGenEval and DPG-Bench generation evaluation

4. Experimental Setup (实验设置)

Datasets and scale

  • Stage-1 image-text:约 66M curated image-text pairs,图片宽高至少 512 px,来自 CC12M、COYO、LAION-Aesthetic-12M 和 AI synthetic data;除 synthetic data 外,图片由 LMMs recaption。
  • Stage-1 extra data:progressively add WebVid、Pandas video-text data,以及 OmniCorpus interleaved data。
  • Stage-2 instruction / generation:约 9M high-quality multimodal understanding instruction data,来自 DenseFusion-1M 和 LLaVA-OneVision;16M high-quality visual generation data 从 66M image-text pairs 中筛出。
  • Video understanding / mixed-modality:1.6M video understanding data;video understanding fine-tuning 还加入 1.1M image-level samples;mixed-modality 使用 VIST、CoMM 等 interleaved/story data。
  • High-resolution / text rendering:额外训练 image generation,并引入 TextAtlas subset 改善 text-rich image rendering。

Baselines

理解侧对比包括 LLaVA-v1.5、Qwen-VL-Chat、LLaVA-OneVision、NExT-GPT、SEED-X、MetaMorph、TokenFlow-XL、ILLUME、BAGEL、Show-o、JanusFlow、SynerGen-VL、Janus-Pro、Emu3、VILA-U、MUSE-VL、Liquid、Mogao 等。视频理解对比 proprietary models GPT-4V/GPT-4o/Gemini-1.5,以及 VILA、PLLaVA、LongVA、IXC-2.5、LLaVA-OV、VideoLLaMA2。

图像生成对比 SD3-Medium、SEED-X、TokenFlow-XL、ILLUME、MetaQuery-XL、Show-o、Emu3、MUSE-VL、Transfusion、D-DiT、Janus-Pro、BAGEL、Mogao 等;DPG-Bench 还包括 Hunyuan-DiT、Playground v2.5、PixArt-、DALL-E 3、SD3-Medium、Emu3-DPO。视频生成对比 ModelScope、LaVie、OpenSoraPlan、Show-1、AnimateDiff-V2、Gen-2、Pika-1.0、VideoCrafter-2.0、CogVideoX、Kling、Step-Video-T2V、Gen-3、Emu3、VILA-U、HaploOmni;I2V 对比 DynamiCrafter、SEINE、I2VGen-XL、Animate-Anything、ConsistI2V、VideoCrafter-I2V、SVD-XT、MarDini。

Metrics

  • Image understanding:MME-p、GQA、SEED-Bench (all)、MMBench (en)、MMMU-val、MMStar、AI2D。
  • Video understanding:ActivityNet-QA、MVBench、NExT-QA、PerceptionTest、LongVideoBench、VideoMME with/without subtitles,均为 zero-shot accuracy。
  • Image generation:GenEval 的 Single Obj. / Two Obj. / Counting / Colors / Position / Color Attribute / Overall;DPG-Bench 的 Global / Entity / Attribute / Relation / Other / Overall;OneIG-Bench 的 Alignment / Text / Reasoning / Style / Diversity。
  • Video generation:VBench total、quality score、semantic score,以及 subject/background consistency、temporal flickering、motion smoothness、dynamic degree、aesthetic/imaging quality 等细分项。
  • Ablation / language retention:FID-5K、MMLU、GPQA、GSM8K、HumanEval、ChartQA、DocVQA-val、InfoVQA-val、TextVQA-val。

Training config

1.5B 使用 Qwen2.5-1.5B-Instruct,7B 使用 Qwen2.5-7B-Instruct;VAE 使用 Wan2.1 3D Causal VAE。默认 image input ,visual tokens 为 ;high-resolution token count 为 ;video token count 在 released configs 中为 3645。Stage-1 1.5B:150K + 40K iterations,LR ,context length 1024,understanding/generation total batch 128/384,,64 H100 约 1.5 天。Stage-2 1.5B:约 35K iterations,,约 15 小时。视频训练随机采样 2s、480p 或 、17 frames、frame interval 3,context length 7006。7B:resume 1.5B flow head,额外 3K alignment iterations,其中 2K warm-up,完整流程约 128 H100 2.5 天。

5. Experimental Results (实验结果)

5.1 Multimodal understanding

在 image understanding 上,Show-o2 1.5B 达到 MME-p 1450.9、GQA 60.0、SEED 65.6、MMB 67.4、MMMU 37.1、MMStar 43.4、AI2D 69.0。与 Janus-Pro 1.5B 相比,MME-p 从 1444.0 到 1450.9,GQA 从 59.3 到 60.0,MMMU 从 36.3 到 37.1,但 SEED/MMB 低于 Janus-Pro 1.5B 的 68.3/75.5。

7B 版本更强:MME-p 1620.5、GQA 63.1、SEED 69.8、MMB 79.3、MMMU 48.9、MMStar 56.6、AI2D 78.6。它在 MME-p/GQA/MMB/MMMU/MMStar/AI2D 上超过 Janus-Pro 7B (1567.1/62.0/79.2/41.0) 和 Mogao 7B 的若干指标,但 SEED 69.8 低于 Mogao 74.6、Janus-Pro 72.1。

视频理解的 Show-o2 1.5B 使用 32/32 frames,ActNet-QA 52.7、MVBench 49.8、NExT-QA 72.1、PerceptionTest 56.1、LongVideoBench 49.2、VideoMME 48.0/51.6。7B 使用 16/32 frames,分别为 56.4、55.8、79.0、61.9、55.5、57.4/60.9。它接近 LLaVA-OV 7B 的 NExT-QA 79.4 和 VideoMME 58.2/61.5,但 LongVideoBench 55.5 略低于 LLaVA-OV 的 56.5。

5.2 Image generation

GenEval 上,Show-o2 1.5B 的 single object / two objects / counting / colors / position / color attribute / overall 为 0.99 / 0.86 / 0.55 / 0.86 / 0.46 / 0.63 / 0.73;Show-o2 7B 为 1.00 / 0.87 / 0.58 / 0.92 / 0.52 / 0.62 / 0.76。它超过 Show-o 0.68、Emu3 0.66、Transfusion 0.63、D-DiT 0.65,但低于 Janus-Pro 7B 0.80、BAGEL 0.88、Mogao 0.89。作者强调 Show-o2 只用 66M generation image-text pairs,而 Janus-Pro 用 144M、BAGEL 用 1600M。

DPG-Bench 上,Show-o2 1.5B 的 Global / Entity / Attribute / Relation / Other / Overall 为 87.53 / 90.38 / 91.34 / 90.30 / 91.21 / 85.02;Show-o2 7B 为 89.00 / 91.78 / 89.96 / 91.81 / 91.64 / 86.14。7B overall 86.14 高于 SD3-Medium 84.08、Janus-Pro 84.19、Mogao 84.33,是该表中 best overall。

OneIG-Bench 上,Show-o2 1.5B 的 Alignment/Text/Reasoning/Style/Diversity 为 0.798/0.002/0.219/0.317/0.186;Show-o2-1024×1024 为 0.798/0.125/0.274/0.351/0.186;Show-o2 7B 为 0.817/0.002/0.226/0.317/0.177。1024×1024 版本显著改善 Text 和 Reasoning,但 Text 仍低于 SD3.5-Large 0.629、Flux.1-dev 0.523、OmniGen2 0.680,说明 text rendering 仍是主要短板。

5.3 Video generation and mixed-modality generation

VBench text-to-video 表中,Show-o2 2B total 为 81.34,quality score 82.10,semantic score 78.31。它优于 ModelScope 75.75、Show-1 78.93、Emu3 80.96、VILA-U 74.01、HaploOmni 78.10,并接近 CogVideoX 81.61、Kling 81.85、Step-Video-T2V 81.83。细分上 Show-o2 的 object class 94.81、multiple objects 76.01、human action 95.20 较强,但 dynamic degree 40.83 明显低于 Emu3 79.27、CogVideoX 70.97,说明运动幅度/动态性不足。

I2V VBench 中,Show-o2 的 I2V subject 96.94、I2V background 98.83、camera motion 28.41、subject consistency 93.83、background consistency 97.45、motion smoothness 97.76、dynamic degree 25.85、aesthetic quality 61.92、imaging quality 69.87。相比专门 I2V 模型,它的 background 高,但 subject consistency 和 aesthetic/imaging quality 不占优。

mixed-modality generation 没有大规模定量表,主要以 VIST downstream examples 展示。训练策略是在 interleaved image-text sequence 中部分保留早期图像、对后续图像加噪,让模型在生成 [BOI] 后把噪声 latent 填入上下文并继续生成后续文本/图像。结论是 capability 覆盖成立,但缺少像 GenEval/DPG/VBench 一样的统一定量评估。

5.4 Ablations and language retention

STF ablation:在 LLaMA-3.2-1B pilot 上,用约 1M multimodal understanding data 和 ImageNet-1K generation data,加入 fusion 后 MME-p 从 1164.7 到 1187.8,GQA 从 56.2 到 57.6,POPE 持平 82.6,FID-5K 从 21.8 降到 20.5。这个结果支持“融合 semantic + low-level features 可同时帮助理解和生成”,也是本文和“生成/理解互相抢资源”讨论最相关的实验之一。

CFG / inference steps:1.5B 模型上,CFG 2.5/50 steps 得 GenEval 0.65、DPG 81.6;CFG 5.0/50 得 0.71/83.9;CFG 7.5/50 得 0.71/84.8;CFG 10/50 得 0.71/85.0;固定 CFG 7.5 时,25 steps 为 0.71/84.6,100 steps 为 0.73/84.7。结论是 CFG 和步数在一定范围内有帮助,但 GenEval 在 CFG > 5 后收益不明显。

Stage-2 ablation:只有 Stage-1 时 GenEval 0.63、DPG-Bench 83.28;Stage-1 + Stage-2 后 GenEval 0.73、DPG-Bench 84.70。Stage-2 对 generation 也有明显收益,说明 instruction/full-model tuning 并非只服务 understanding。

Two-stage vs one-stage language retention:1.5B one-stage with RefinedWeb 的 MMLU/GPQA/GSM8K/HumanEval 为 28.25±0.38 / 25.00±2.05 / 4.55±0.57 / 3.05±1.35;two-stage 为 56.75±1.37 / 29.24±2.15 / 49.43±1.38 / 35.54±3.70,接近原 Qwen2.5-1.5B Instruct 的 60.20 / 28.12 / 51.86 / 35.37。7B one-stage 为 28.43 / 26.34 / 1.52 / 4.01,two-stage 为 70.73 / 31.47 / 75.28 / 70.73,接近原 Qwen2.5-7B Instruct 的 71.75 / 32.37 / 82.49 / 65.24。这是本文最强的训练 recipe 证据:保语言能力不是靠继续堆普通 text corpus,而是靠先冻结主 LLM 学视觉模块、再联合微调。

Image token count:Show-o2 7B 在 729 image tokens 下 ChartQA 48.00、DocVQA-val 59.34、InfoVQA-val 42.31、TextVQA-val 62.92;提升到 image tokens 后,ChartQA 66.92、DocVQA-val 77.26、InfoVQA-val 45.80、TextVQA-val 71.54。高 token count 对 chart/document/text VQA 很关键,但也意味着长上下文和训练/推理成本增加。

5.5 局限与结论 (Limitations and conclusion)

作者承认 Show-o2 的视频生成能力仍在持续开发中。论文当前最完整的证据集中在 image understanding、image generation、video understanding 和初步 video generation/mixed-modality demos;对于真正长视频、复杂多轮 interleaved generation、强文字渲染,仍有明显提升空间。OneIG 文本指标和 VBench dynamic degree 的结果也显示,统一架构并不会自动解决 text rendering 或运动多样性。

总体结论是:Show-o2 是 native unified multimodal model 的一个强工程化推进。它的核心贡献不是单个 benchmark SOTA,而是给出了一套可扩展到 text-image-video 的连续 latent 统一方案:3D Causal VAE space + dual-path STF + AR language head + flow head + two-stage training。实验上,它证明了这种统一表征能在理解和生成之间取得较好平衡,并且两阶段 recipe 能显著避免语言能力崩塌;但生成质量在最高开源/闭源专用模型面前仍非全面领先,video 和 mixed-modality 定量评估也还不够完整。