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.py 的 next_token_prediction 是标准 shifted cross-entropy,并忽略 label -100;velocity_prediction 是 masked MSE。train_stage_one.py 先用 VAE 把 pixel_values 编到 image_latents,再由 transport.sample 和 path_sampler.plan 产生 ,其中代码注释明确写作 x0->noise x1->image 和 default: velocity。models/modeling_showo2_qwen2_5.py 的 forward 同时返回 loss_ntp 和 loss_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.jsonl 或 path/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.yaml 和 showo2_1.5b_stage_1_b.yaml:冻结 image_embedder_und, und_trans, showo, position_embedding,learning_rate=0.0001,batch_size_t2i=6,batch_size_mmu=2,max_train_steps=150000/40000,ntp_coeff=0.2,flow_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}.yaml 把 frozen_params 从部分冻结逐步过渡到 null,LR 分为 learning_rate_ve、learning_rate_proj、learning_rate_showo,后两段常见为 / / ,batch_size_t2i=batch_size_mmu=4,ntp_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.sh 从 showo2-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.py 的 Showo2Qwen2_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_tokensStage-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.py 和 inference_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 outputs3.7 Code-to-paper mapping
Code reference:
main@45a5a2de(2026-01-08) — mapping is section-level, not line-level
| Paper Concept | Source File | Key Class/Function |
|---|---|---|
| Qwen2.5-based native unified backbone | show-o2/models/modeling_showo2_qwen2_5.py | Showo2Qwen2_5, forward, forward_und_only |
| Semantic layers | show-o2/models/modeling_showo2_qwen2_5.py, show-o2/models/modeling_semantic_layers.py | image_embedder_und, und_trans, SigLIP initialization |
| Low-level projector and STF | show-o2/models/modeling_showo2_qwen2_5.py | image_embedder_gen, fusion_proj |
| Flow head / DiT-style timestep modulation | show-o2/models/modeling_showo2_qwen2_5.py, show-o2/models/modules.py | diffusion_head_a, diffusion_head_b, TimestepEmbedder, FinalLayer |
| NTP and FM losses | show-o2/models/misc.py | next_token_prediction, velocity_prediction |
| Flow transport sampling | show-o2/transport/transport.py, show-o2/transport/path.py | create_transport, Sampler, path_sampler.plan |
| Stage-1 recipe | show-o2/train_stage_one.py, show-o2/configs/showo2_1.5b_stage_1_{a,b}.yaml | VAE latent preparation, frozen params, ntp_coeff=0.2, flow_coeff=1.0 |
| Stage-2 recipe | show-o2/train_stage_two.py, show-o2/configs/showo2_1.5b_stage_2_{a,b,c}.yaml | full-model tuning, differential LRs, ntp_coeff=flow_coeff=1.0 |
| Inference for MMU/T2I/video/mixed-modality | show-o2/inference_mmu.py, inference_mmu_vid.py, inference_t2i.py, inference_mixed_modality.py | modality-specific wrappers around the same model |
| Evaluation scripts | show-o2/evaluation/inference_geneval.py, inference_dpg.py, compute_dpg_bench.py | GenEval 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 定量评估也还不够完整。