Lance: Unified Multimodal Modeling by Multi-Task Synergy

Paper: arXiv:2605.18678 Code: bytedance/Lance Code reference: main @ 348b687d (2026-05-23)

1. Motivation (研究动机)

Lance 关注的是 unified multimodal model 的一个现实问题:能否用一个原生统一模型同时覆盖图像/视频理解、图像/视频生成、图像/视频编辑和 subject-driven generation,而不是把理解模型、图像生成模型、视频生成模型、编辑模型拼成一个系统。当前多模态模型的发展长期分成两条路线。MLLM 侧以 LLaVA、Qwen-VL、InternVL 等为代表,擅长图像/视频理解、OCR、VQA、reasoning 和 instruction following;视觉生成侧以 diffusion / flow-based image-video generators 为主,擅长高保真合成、时序动态、编辑和视觉纹理。这两类能力的目标函数、视觉表示和优化节奏都不同,因此直接统一并不容易。

论文指出已有 unified models 有两个关键限制。第一,understanding 和 generation 对视觉表示的需求天然错位:理解任务需要与语言对齐的高层 semantic features,例如 Qwen2.5-VL ViT tokens;生成任务需要保留纹理、几何、运动和低层视觉细节的 continuous VAE latents。完全共享一套 visual representation 虽然简洁,但容易在语义推理和视觉保真之间折中;完全解耦又会削弱上下文交互,甚至把统一模型退化成模块化系统。第二,现有模型的任务覆盖仍不完整。许多模型只覆盖 text-image,或只覆盖 image understanding + image generation,或把 editing / subject-driven generation 当作下游微调能力,而不是从训练阶段就纳入 unified multi-task objective。Table 1 中 Lance 是少数显式覆盖 image-to-text、video-to-text、T2I、image editing、S2I、T2V、I2V、video editing、S2V 和 emergent generalization 的模型。

Lance 的动机不是单纯堆模型容量。作者强调它是一个 lightweight native unified model,只有约 3B activated parameters,并且在 128-GPU 预算内训练。它试图验证一个更实用的命题:通过 collaborative multi-task training,理解、生成、编辑这些看似异构的能力是否可以互相增强。论文的核心假设是,广覆盖任务不是简单“能力拼盘”,而是可以让模型学到跨任务、跨模态的上下文对齐机制。例如理解数据能增强生成时的 semantic grounding;编辑和 subject-driven generation 数据不仅提升编辑,也能反过来提升基础生成和视频理解。

这篇论文值得读的地方在于,它把 unified multimodal modeling 拆成两个设计原则:unified context modeling 和 decoupled capability pathways。前者保证所有任务共享 interleaved multimodal sequence,使文本、语义视觉 tokens、clean VAE latents、noisy VAE targets 能在同一个上下文中交互;后者避免 understanding 和 generation 在同一个参数流里互相干扰,用 dual-stream mixture-of-experts 和不同 objective 分别服务语义推理与视觉合成。

2. Idea (核心思想)

Lance 的核心思想可以概括为:上下文统一,能力路径解耦,训练任务协同。上下文统一指所有 X2T、X2I、X2V 样本都被组织成一个 interleaved multimodal sequence;能力路径解耦指 understanding expert 处理 text + ViT semantic tokens 并做 next-token prediction,generation expert 处理 VAE latent tokens 并做 flow matching / velocity prediction;训练任务协同指 PT、CT、SFT、RL 四阶段逐步扩大任务空间和数据难度,使理解、生成、编辑之间形成正迁移。

Lance 与完全 autoregressive unified models 的差别在于,它没有把视觉生成也离散化为 next-token prediction,而是在 continuous VAE latent space 里做 flow matching。这避免了视觉生成的序列化解码成本和离散 token fidelity trade-off。它与纯 diffusion / flow generator 的差别在于,生成分支不是孤立模型,而是在 shared multimodal context 中 conditioned on text、semantic visual tokens 和 clean VAE condition tokens,可以处理 T2I/T2V、I2I/I2V、editing、subject-driven generation 等复杂输入。

Lance 与一些 decoupled models 的差别在于,它不是简单地将理解 backbone 和生成 backbone后接桥接器,而是把二者放在同一个 interleaved sequence 与 generalized 3D causal attention 下。模型仍然能看到跨模态上下文,只是参数路径和 objective 被区分开。为了减少不同视觉 token group 在位置空间中的混淆,作者提出 Modality-Aware Rotary Positional Encoding (MaPE),对 ViT semantic tokens、clean VAE condition tokens、noisy VAE target tokens 加入 modality-specific temporal offset,从而在不破坏空间布局和视频时间相对顺序的前提下显式区分 token 功能。

3. Method (方法)

3.1 Overall architecture

Figure 6 解读:这张图是 Lance 的方法总览。输入任务横跨 Caption、VQA、OCR、T2I、I2I、S2I、T2V、I2V、V2V、S2V 等。文本经 Text Tokenizer,理解用视觉经 ViT Encoder,生成/编辑用视觉经 VAE Encoder。所有 token 进入同一个 MaPE-enhanced multimodal context sequence。底部两个输出路径对应两类 objective:理解侧用 Next-token Prediction 输出文本,生成侧用 Velocity Prediction 输出 VAE latent space 中的 flow velocity。图中不同颜色 token 也对应论文的核心序列构成:ViT semantic tokens、text tokens、clean VAE tokens、noisy VAE tokens。

Lance 把每个样本写成统一的 interleaved sequence: 其中 这个定义的意义是,Lance 不再为每类任务设计单独输入格式,而是用同一套 block wrapper 表示文本块和视觉块。理解任务可以是 text + ViT tokens text;生成任务可以是 text + noisy VAE tokens VAE velocity;编辑任务可以是 text + clean VAE condition + noisy VAE target VAE velocity;subject-driven 任务可以同时包含 reference visual tokens 与 target noisy latents。统一序列让跨任务上下文融合成为可能。

3.2 Decoupled capability pathways

Lance 的 backbone 初始化自 Qwen2.5-VL 3B,但使用 dual-expert architecture。理解专家 主要处理 text tokens 和 semantic visual tokens,输出 language hidden states,再通过 LM head 做自回归文本预测。生成专家 主要处理 VAE latent tokens,输出 generation hidden states,再通过 LLM-to-VAE connector 和 flow head 预测 latent velocity。两个专家在统一 context 中交互,但 pathway-specific parameters 不同。

理解路径的目标函数是标准 next-token prediction: 生成路径使用 flow matching。令 是 clean VAE latent, 是 Gaussian noise,采样 ,构造: 模型预测从 noise 指向 data 的 velocity: 总体目标: released code 中对应 modeling/lance/lance.pyLance.forward()。代码先构造 packed_sequence,把 text embedding 放进 packed_text_indexes,把 ViT embedding 放进 packed_vit_token_indexes,再把 VAE latents patchify 后经 vae2llm 投影到 hidden size,并加 timestep embedding 与 3D latent position embedding。最后调用 self.language_model(...),如果是 visual generation,则 llm2vae(last_hidden_state[mse_loss_indexes]) 预测 latent velocity;如果是 understanding,则 lm_head(last_hidden_state[ce_loss_indexes]) 做 CE loss。这个实现与论文的双目标一致。

论文公式与 released code 实现差异:论文公式写 且目标为 。released code 中 packed_latent = (1 - packed_timesteps) * packed_latent_clean + packed_timesteps * noise,并设置 target = noise - packed_latent_clean。这相当于代码中的 timestep 方向与论文记号相反:代码的 对应 clean data, 对应 noise,因此 velocity 指向 noise;只要 scheduler/inference 使用同一方向,训练是自洽的。论文 Table 2 写 loss weight (CE:MSE) 在 PT 为 0.25:1、CT 为 0.5:1、SFT 为 0.25:1,而 released code 的 forward() 只返回 per-token msece,具体加权通常在训练 loop / config 中完成;当前仓库公开树主要包含推理与 benchmark 代码,未完整公开论文训练 launch 配置。

3.3 Generalized 3D causal attention

Lance 的 attention 需要同时服务文本、语义视觉和 VAE latent。论文描述的规则是:序列被分成 modality-specific segments,每个 segment 可以 attend 到之前的 clean segments,以保持 causal dependencies;segment 内部,text tokens 使用 causal attention,visual tokens 使用 bidirectional attention 来捕获空间/时空结构。这是统一建模的关键,因为生成目标中的 noisy VAE tokens 需要看到前面的文本和条件视觉,但不能破坏因果格式;视觉块内部又不能像文本一样只能左到右,否则会损害图像/视频空间结构。

released code 的 process_attention_mask() 通过 attn_modessplit_lens 创建 sparse mask,再调用 create_block_mask()full_noise / full_noise_target 等模式会被转成 full 视觉注意力模式。forward() 中还统计 N_vit_split = attn_modes.count("full"),说明 ViT semantic visual split 用 full attention;generation 的 VAE noisy blocks 通过 mse_loss_indexes 指定需要预测 velocity 的位置。

3.4 Modality-Aware Rotary Positional Encoding (MaPE)

Figure 7 解读:MaPE 的核心是沿 temporal coordinate 给不同视觉 token group 加不同 offset。图中 ViT semantic、Clean VAE、Noisy VAE 在同一空间布局上有不同的时间轴偏移 。这样模型在 RoPE 位置空间中能区分“这个 token 是理解用语义视觉”“这个 token 是生成条件”“这个 token 是需要 denoise 的目标”,同时保留相同的 height/width 坐标,避免破坏空间结构。

Qwen2.5-VL 原始 3D-RoPE 中,文本第 个 token 的位置是: 视觉 token 在 处的位置为: Lance 的 MaPE 对每个 modality group 定义 base 3D-RoPE: 然后只在 temporal 维加 offset: 只偏移时间维有两个好处。第一,不同 token group 在全局位置空间中分离,减少 heterogeneous visual tokens 的角色歧义。第二,空间坐标不变,因此图像和视频内部的布局仍然对齐;同一 modality group 内的时间相对距离也不变,所以不会破坏视频 temporal order。released code 中 shift_position_ids(...)full_noisefull 等 attention modes 做 position shift;Lance.__init__() 中还设置了 pos_shift = max_latent_size * max_latent_size * max_num_latent_frames + safety,这与论文中“给不同视觉 token group 做位置偏移”的机制一致。

3.5 Staged multi-task training

Lance 的训练分四阶段。PT 阶段建立基础 alignment 和生成能力,冻结 VAE 和 ViT encoder,优化 multimodal backbone、QK-Norm、MLP connectors。PT 数据包括约 1B image-text samples 和 140M video-text samples,采用 192p 360p 480p progressive resolution curriculum,image:video sampling ratio 约 1:4。

CT 阶段把模型从 paired supervision 扩展到 unified multi-task learning。理解数据包括 2.73M interleaved multimodal understanding samples,细分为 T2T 41K、captioning 443K、classification 142K、conversation 72K、grounding 200K、reasoning 194K、VQA 600K、OCR 120K 等。生成侧加入 2.8M image editing、2.6M video editing、3.6M subject-driven image generation、1M subject-driven video generation。CT 使用 progressive mixture schedule,让 editing / subject-driven 等更难任务比例逐步上升。

SFT 阶段使用高质量监督精修 instruction fidelity、visual consistency、editing accuracy 和 identity preservation。数据包括 190K high-quality image captioning、5K high-quality video captioning、2.73M interleaved understanding、190K high-quality image generation、84K high-quality image editing、5K high-quality video generation、9K high-quality video editing、5.5K high-quality subject-driven video generation。

RL 阶段只进一步优化 image generation,使用 20K 强调 text-related requirements 的 prompts,通过 GRPO 和 PaddleOCR reward model 直接优化文本渲染准确性、image-text correspondence 和 prompt compositional adherence。这说明 Lance 的最终生成能力不仅来自 supervised data,也来自对细粒度文本约束的 reward-based post-training。

Figure 13 解读:训练动态显示 image generation 和 video generation 都随训练 token 增加而提升。早期 PT 阶段提升最快,说明大规模 paired data 先建立核心生成能力;CT 和 SFT 继续提升 DPG-Bench/VBench,虽然 CT 主要引入编辑、subject-driven 和 instruction-following 数据,而不是简单增加纯生成数据。这支持作者关于 multi-task synergy 的主张:多任务数据不是稀释生成能力,反而能通过更丰富的条件与任务格式改善 prompt alignment、视觉保真和时序一致性。

3.6 Pseudocode from released code

Code reference: main @ 348b687d (2026-05-23) — pseudocode and mapping based on this commit

def lance_forward(batch, model):  # 概括 released code 中 Lance.forward() 的训练前向,覆盖文本 CE 与视觉 flow matching 两类目标
    sequence = torch.zeros(batch.sequence_length, model.hidden_size, device=batch.device)  # 初始化统一 packed sequence,后续把文本、ViT、VAE token 都写入同一个上下文
    text_embed = model.language_model.model.embed_tokens(batch.text_ids)  # 将文本 token id 投影到 LLM hidden size,作为理解和生成共同条件
    sequence[batch.text_indexes] = text_embed[batch.text_indexes]  # 按 packed index 把文本 embedding 放回原序列位置,保留 interleaved 顺序
 
    if batch.vit_tokens is not None:  # 当前 batch 含有理解或视觉条件输入时,额外注入 ViT semantic tokens
        vit_embed = model.vit_model(batch.vit_tokens, grid_thw=batch.vit_grid_thw)  # 用 Qwen2.5-VL ViT 提取语义视觉 token,服务 X2T/视觉条件理解
        vit_embed = model.connector(vit_embed)  # 通过 MLP connector 对齐 ViT hidden size 与 LLM hidden size
        sequence[batch.vit_indexes] = vit_embed  # 把语义视觉 token 写入统一上下文,让文本和视觉条件可被同一 backbone 读取
 
    if model.config.visual_gen:  # 视觉生成任务需要构造 noisy VAE latent,并把它作为 target token 放进统一序列
        clean = patchify(batch.vae_latents, batch.latent_shapes)  # 将 VAE latent 按 latent_patch_size 展平成 token,得到 flow matching 的 clean data 点
        noise = torch.randn_like(clean)  # 采样与 clean latent 同形状的 Gaussian noise,作为 diffusion/flow 起点
        t = torch.sigmoid(batch.timesteps)  # 代码把外部 timestep logit 映射到 [0, 1],形成 logit-normal 风格的训练时间分布
        t = model.timestep_shift * t / (1 + (model.timestep_shift - 1) * t)  # 应用 timestep_shift,CT/SFT 中用更偏向高噪声区间的时间分布
        x_t = (1 - t[:, None]) * clean + t[:, None] * noise  # 按代码方向混合 latent:t=0 是 clean,t=1 是 noise
        vae_embed = model.vae2llm(x_t)  # 将 continuous VAE token 投影到 LLM hidden size,使生成目标进入 unified context
        vae_embed = vae_embed + model.time_embedder(t) + model.latent_pos_embed(batch.vae_pos_ids)  # 加入时间和 3D latent 位置,让模型知道当前噪声强度与时空坐标
        sequence[batch.vae_indexes] = vae_embed  # 用带噪 VAE embedding 替换目标视觉 token 位置,作为 generation expert 的输入
 
    extra = {}  # 默认不额外传入 MoE 路由信息;只有 dual-expert 配置打开时才填充 token index
    if model.use_moe:  # dual-expert backbone 需要显式知道哪些 token 走 understanding expert、哪些走 generation expert
        extra = {  # 组装 MoE 路由所需的 packed token index,和 released code 的 extra_inputs 对应
            "packed_und_token_indexes": torch.cat([batch.text_indexes, batch.vit_indexes]),  # 标出 text/ViT token,让 MoE 中的 understanding pathway 处理语义上下文
            "packed_gen_token_indexes": batch.vae_indexes,  # 标出 VAE token,让 MoE 中的 generation pathway 处理连续视觉生成
        }  # 将两类 token index 显式传给 dual-expert backbone,避免理解和生成完全共享同一专家路径
    hidden = model.language_model(sequence, attention_mask=batch.mask, packed_position_ids=batch.position_ids, **extra)  # 在 generalized 3D causal attention 下融合所有模态 token
 
    losses = {}  # 用字典保留各 objective 的未加权损失,便于训练阶段按 CE:MSE 权重组合
    if model.config.visual_gen:  # 只有视觉生成 batch 才计算 VAE latent velocity 的 MSE
        pred_v = model.llm2vae(hidden[batch.mse_indexes])  # 只读取需要做 MSE 的 VAE target token hidden state,并映射回 latent velocity 维度
        target_v = noise - clean  # released code 的速度方向是 data -> noise,与论文公式记号方向相反但和推理更新自洽
        valid = t > 0  # 跳过被置为 clean condition 的 token,避免对纯条件帧计算 denoising loss
        losses["mse"] = (pred_v - target_v[valid]) ** 2  # 对预测 velocity 做逐 token MSE,训练 generation expert 的 flow matching 能力
    if batch.ce_indexes is not None:  # 含有文本监督位置时,额外计算 next-token prediction 的 CE
        logits = model.language_model.lm_head(hidden[batch.ce_indexes])  # 对需要文本监督的位置接 LM head,得到词表 logits
        losses["ce"] = F.cross_entropy(logits, batch.labels, reduction="none")  # 用 next-token prediction 训练理解/文本输出能力
    return losses  # 返回未加权的 CE/MSE 分项;论文 Table 2 的阶段权重在训练 loop/config 层组合
def lance_generation_loop(model, sample, num_timesteps=24, cfg_text_scale=4.0):  # 概括 validation_gen() 中无 KV-cache 的图像/视频生成主循环
    x_t = torch.randn(sample.num_vae_tokens, model.patch_latent_dim, device=sample.device)  # 从纯噪声 latent 开始生成,形状对应目标图像/视频的 patchified VAE token
    timesteps = torch.linspace(1, 0, num_timesteps + 1, device=x_t.device)  # 推理从 noise 端走向 clean 端,代码默认 24 步并多取一个端点计算步长
    timesteps = model.timestep_shift * timesteps / (1 + (model.timestep_shift - 1) * timesteps)  # 使用与训练一致的 timestep shift,保持时间参数化一致
    dts = timesteps[:-1] - timesteps[1:]  # 计算相邻 timestep 间隔,作为 Euler 更新的步长
    for t, dt in zip(timesteps[:-1], dts):  # 逐步从高噪声 timestep 积分到低噪声 timestep
        token_t = torch.full((x_t.shape[0],), t, device=x_t.device)  # 为每个 VAE token 构造当前 denoising 时间,匹配代码中的 per-token timestep embedding
        vae_embed = model.vae2llm(x_t) + model.time_embedder(token_t) + model.latent_pos_embed(sample.vae_pos_ids)  # 将当前 latent 状态、时间和 3D 位置合成生成 token embedding
        sample.sequence[sample.vae_indexes] = vae_embed  # 在统一上下文中更新目标 VAE token,文本/ViT/条件 VAE token 保持为条件
        cond_hidden = model.language_model(sample.sequence, attention_mask=sample.mask, packed_position_ids=sample.position_ids)  # 条件前向传播,读取完整 prompt 与视觉条件
        v_cond = model.llm2vae(cond_hidden[sample.mse_indexes])  # 从 target token hidden state 预测条件 velocity
        if cfg_text_scale > 1.0:  # 启用文本 CFG 时,需要额外构造无文本条件分支
            v_uncond = unconditional_forward(model, sample)  # 去掉文本条件后再前向一次,得到无条件 velocity 作为 CFG 基线
            v = v_uncond + cfg_text_scale * (v_cond - v_uncond)  # 用 classifier-free guidance 放大文本条件相对无条件分支的方向
        else:  # CFG 关闭时,不引入无条件分支,减少一次额外前向
            v = v_cond  # 不启用 CFG 时直接使用条件分支预测的 velocity
        x_t = x_t - dt * v  # 因代码 velocity 指向 noise,反向积分时用减号把 latent 从 noise 推回 clean
    return unpatchify_and_decode_vae(x_t)  # 将最终 patchified latent 还原为 VAE latent 网格并解码成图像/视频
def shift_position_ids_for_mape(position_ids, attn_modes, split_lens, sample_modality):  # 概括 data/common.py::shift_position_ids 中 MaPE 相关的 temporal offset
    cursor = 0  # 记录当前 split 在 packed sequence 中的起始位置,用来逐段处理 interleaved token
    for mode, length in zip(attn_modes, split_lens):  # 按 interleaved sequence 的 split 粒度遍历不同注意力模式
        if mode in ["full_noise", "full"]:  # 只对视觉 full-attention 段做位置偏移,对普通文本 causal 段保持原 Qwen-VL RoPE
            if (sample_modality == 4).any():  # modality=4 对应需要和其它视觉组分离的 VAE/noisy target token
                offset = 1000 - position_ids[:, :, sample_modality == 4][0, 0, 0]  # 计算把该组 temporal 坐标平移到 1000 起点所需的偏移
                position_ids[0, :, sample_modality == 4] += offset  # 只移动 temporal 维,保留 height/width 空间布局不变
            if (sample_modality == 3).any():  # modality=3 对应另一类视觉条件组,例如 reference/clean VAE token
                offset = 2000 - position_ids[:, :, sample_modality == 3][0, 0, 0]  # 给 clean/reference 视觉组使用不同 temporal 起点,避免和 noisy target 混淆
                position_ids[0, :, sample_modality == 3] += offset  # 通过 temporal offset 实现 MaPE 的 modality-aware token group 区分
            if (sample_modality == 2).any() and (sample_modality == 2).sum() == (sample_modality == 1).sum():  # 当 clean/noise token 一一对应时,对齐两组位置
                position_ids[:, :, sample_modality == 1] = position_ids[:, :, sample_modality == 2]  # 让 paired condition/target 共享空间坐标,只由其它机制区分角色
        cursor += length  # 推进到下一个 split,保持伪代码结构与 released code 的 split_lens 遍历一致
    return position_ids  # 返回带 modality temporal offset 的 3D-RoPE position ids

3.7 Code-to-paper mapping

Code reference: main @ 348b687d (2026-05-23) — pseudocode and mapping based on this commit

Paper conceptReleased code anchorNotes
Lance main modelmodeling/lance/lance.py, class LanceWraps Qwen2 CausalLM backbone, Qwen2.5-VL ViT, VAE latent connectors.
Config and visual modesLanceConfigvisual_gen, visual_und, VAE/Vit configs, latent patch size, timestep shift.
VAE-to-LLM / LLM-to-VAE connectorself.vae2llm, self.llm2vaeImplements latent input projection and velocity output projection.
ViT semantic pathwayself.vit_model, self.connectorQwen2.5-VL ViT features are projected into hidden size for understanding/context.
MaPE / position shiftingshift_position_ids(...), pos_shift, latent_pos_embedCode distinguishes visual token groups by shifted position ids and latent 3D position embeddings.
Flow matching lossLance.forward() around packed_latent, target, mseGenerates noisy VAE latents and computes MSE on velocity targets.
Text CE lossce_loss_indexes, lm_head, F.cross_entropyUnderstanding/text generation objective.
Inference denoisingLance.validation_gen()Iterative timesteps, CFG branches, VAE token update, llm2vae velocity prediction.

4. Experimental Setup (实验设置)

Datasets:论文训练数据覆盖 text、image、video 三类输出。PT 使用 1B image-text、140M video-text;CT 使用 2.73M interleaved multimodal understanding、2.8M image editing、3.6M subject-driven image generation、2.6M video editing、1M subject-driven video generation;SFT 使用 190K high-quality image captioning、5K high-quality video captioning、190K high-quality image generation、84K high-quality image editing、5K high-quality video generation、9K high-quality video editing、5.5K high-quality subject-driven video generation。

Baselines:image generation 对比 PixArt-、SDXL、DALL-E 3、SD3-Medium、FLUX.1-dev、Qwen-Image、Janus/Janus-Pro、BAGEL、Mogao、InternVL-U、TUNA/TUNA-2 等。video generation 对比 ModelScope、LaVie、Show-1、AnimateDiff、VideoCrafter、CogVideoX、Kling、Open-Sora、Gen-3、Step-Video、HunyuanVideo、Wan2.1,以及 unified models HaploOmni、Emu3、VILA-U、Show-o2、TUNA。editing 使用 GEdit-Bench,对比 GPT Image 1、Qwen-Image-Edit、Lumina-DiMOO、Ovis-U1、BAGEL、InternVL-U。video understanding 使用 MVBench,对比 Video-LLaMA、VideoChat2、ST-LLM、GPT-4V、PLLaVA、Video-CCAM、Qwen2.5-VL、TimeMarker、InternVideo2、Show-o2、TUNA、UniVideo。

Metrics:DPG-Bench 评估 image generation 的 Global、Entity、Attribute、Relation、Other、Overall;GenEval 评估 1-Obj、2-Obj、Count、Colors、Position、Attr、Overall。VBench 报告 Quality Score、Semantic Score、Subj. Consist.、Bkg. Consist.、Temp. Flicker、Motion Smooth.、Dynamic Degree、Aesthetic Quality、Imaging Quality、Object Class、Multi Objects、Human Action、Spatial Relation、Color、Scene、Appearance Style、Temporal Style、Overall Consist. 和 Total Score。GEdit-Bench 用多类编辑打分和 Avg/G_O;MVBench 用 20 个 video understanding 子任务平均分。

Training config:Table 2 给出论文训练超参。PT 学习率 、constant scheduler、weight decay 0.0、grad clip 1.0、AdamW 、loss weight CE:MSE=0.25:1、warmup 2500、350k steps、seen tokens 1.5T、context 40k、gen resolution short/long side 、und resolution 、timestep shift 1.0。CT 学习率 、80k steps、300B tokens、context 70k、resolution 、timestep shift 4.0、CE:MSE=0.5:1。SFT 学习率 、cosine、15k steps、72B tokens、CE:MSE=0.25:1。RL 学习率 、800 steps、0.5B tokens、warmup 50。实验实现基于 Qwen2.5-VL 3B,generation encoder 使用 Wan2.2 3D causal VAE;visual generation inference 使用 CFG,text condition scale 默认 4;image input 768×768,video 480p、12 fps。

5. Experimental Results (实验结果)

5.1 Image generation

Table 5 显示 Lance 在 GenEval overall 达到 0.90,与 TUNA 的 0.90 并列 unified models 顶尖,并且在 Count 0.84、Colors 0.97、Position 0.87、Attr 0.81 上表现强。DPG-Bench 上 Lance Overall 为 84.67,Relation 为 93.38,在 unified models 中具有竞争力,但不是所有 DPG 子项都第一;例如 TUNA Overall 86.76、Show-o2 86.14。作者的解释是 Lance 虽然只有 3B activated parameters,但通过多任务统一训练获得了较好的 prompt composition 和 relation modeling。

Figure 2/10 局部解读:这个例子展示 Lance 在文字渲染和计数约束上的能力。图中多个瓶子分别带有字母标签,符合提示中对具体文本元素和视觉布局的约束。论文还指出 Lance 相比 BAGEL、InternVL-U 在 aesthetics 和 image-text alignment 上更强,并接近 Qwen-Image 与 Nano Banana 这类更大或闭源模型。

5.2 Video generation

VBench 上 Lance 的 Total Score 为 85.11,是 unified models 中最高;Quality Score 85.14,Semantic Score 84.96。它在 Multi Objects 93.86、Human Action 97.80、Spatial Relation 92.61、Color 93.61、Scene 64.75 等语义维度上很强,说明 unified context 和多任务训练提升了文本-视频对齐和 compositional generation。相比之下,TUNA Total Score 84.06,Show-o2 81.34。Lance 甚至接近或超过一些 generation-only models,例如 HunyuanVideo Total Score 83.43、Wan2.1-T2V 83.69,尽管后者是更专门的视频生成模型。

5.3 Multimodal editing

GEdit-Bench 中 Lance Avg/G_O 为 7.30,是 unified models 中最高,超过 InternVL-U (w/ CoT) 的 6.88、BAGEL 的 6.52、Ovis-U1 的 6.42。它在 background change、material modification、motion change、portrait beautification、subject removal、replacement、tone transfer 等类别表现好。不过论文也明确指出 Lance 在 text modification 上相对弱,Table 7 的 TT 分数只有 4.46,显著低于它在其他编辑类别的 7+ 分数。这是一个重要限制:虽然 RL 阶段用 PaddleOCR reward 改善 image generation 中的文本渲染,但对已有图像中的文本修改仍然困难。

5.4 Multimodal understanding

MVBench 上 Lance 平均 62.0,是 unified models 中最高,相比第二名 Show-o2 7B 的 55.7 有约 11.3% relative improvement。它也超过 UniVideo 46.3、TUNA 54.4,并接近一些 specialized video understanding models。需要注意,它低于 Qwen2.5-VL 3B 的 67.0 和 InternVideo2 的 67.3,但 Lance 同时支持生成和编辑,因此这个结果说明 unified training 没有严重牺牲理解能力。

5.5 Ablations and limitations

跨任务数据消融说明 understanding data 和 multi-task generation data 都能提升生成。Table 9 中 generation-only baseline 的 GenEval 为 80.88、VBench 为 81.25;加入 understanding data,Gen.:Und.=8:2 提升到 GenEval 81.65、VBench 82.91、MVBench 58.06;加入 multi-task generation data,Gen.:Und.=9:1 且 Gen.:MT-Gen.=6:4 达到 GenEval 82.06、VBench 83.05、MVBench 58.95。这个结果支撑论文标题中的 multi-task synergy:理解数据和编辑/subject-driven 数据并不是只服务本任务,而会正向影响基础生成和视频理解。

MaPE 消融也稳定有效。Table 10 中 w/ MaPE 的 GenEval 80.94、GEdit 6.86、VBench 81.81、MVBench 59.16;w/o MaPE 分别是 80.56、6.30、80.95、59.02。提升最大的是 image editing,从 6.30 到 6.86,因为编辑最依赖同时区分 reference visual condition、target noisy latents 和文本指令。这个结果验证了位置空间中的 token-group ambiguity 是 unified multimodal training 的真实问题。

作者在结论中列出未来方向:更全面的视频 reward models 与 reward optimization,可继续改善 temporally coherent 和 user-aligned generation;扩大 model capacity、expert capacity、context length;加入 audio、speech、3D、depth、embodied sensory signals;以及 streaming multimodal interaction,使模型走向实时交互和闭环 multimodal agents。总体来看,Lance 的贡献不只是一个多任务模型,而是给 unified multimodal modeling 提供了一个清晰的工程范式:用统一上下文促进交互,用专家路径降低任务冲突,用 staged data schedule 把广任务覆盖转化为可测的正迁移。