Lance: Unified Multimodal Modeling by Multi-Task Synergy
Paper: arXiv:2605.18678 Code: bytedance/Lance Code reference:
main@dd28cc18(2026-05-19)
1. Motivation (研究动机)
这篇论文要解决的核心问题不是“再做一个视频生成模型”,而是:能否在一个相对轻量的原生统一多模态模型里,同时覆盖图像/视频理解、图像/视频生成、图像/视频编辑,并让这些任务在训练中互相促进,而不是互相拖累。作者把 Lance 定义为一个 3B activated-parameter 的 native unified multimodal model,目标任务族覆盖 X2T、X2I、X2V:输入可以是文本、图像、视频或它们的交错组合;输出可以是文本、图像、视频;任务形式包括 caption/VQA/reasoning、T2I/T2V/I2V、editing、subject-driven generation 等。这个设定的价值在于,它把“理解模型”和“生成模型”之间长期分裂的能力边界变成同一个模型内部的设计问题。
当前路线的主要矛盾有两个。第一,理解与生成需要的视觉表征天然错位。理解任务依赖与语言对齐的高层语义特征,例如物体类别、关系、文本区域、动作事件;生成任务则需要能保留纹理、几何、动态和时序细节的低层连续 latent。若强行使用同一种视觉表示,模型结构干净,但容易在语义推理和高保真合成之间折中;若完全解耦表示,生成质量更容易提升,但模型接口、优化动态和跨任务迁移会变复杂。第二,很多所谓 unified models 的任务覆盖并不完整,尤其是图像-视频两个维度没有同时打通。论文的 Table 1 把 prior work 按 image-to-text、video-to-text、image generation、video generation、editing、subject-driven generation、emergent generalization 逐项比较,Lance 是少数明确支持几乎全任务矩阵的 native unified model。

Figure 1 解读:雷达图把 Lance 与代表性 unified / task-specialized 模型放在多个生成与理解基准上对比。它不是为了说明 Lance 在所有单项都绝对第一,而是强调 3B 激活参数下的综合能力形状:图像生成、视频生成、图像编辑、视频理解都没有明显短板。这个图对应论文的动机:如果一个统一模型只在 T2I 上强,但视频理解或编辑缺失,它并没有真正解决 unified multimodal modeling 的任务覆盖问题。
已有 unified 模型还存在训练范式问题:许多方法把编辑、subject-driven generation 或视频任务当成后续微调技能,而不是在原生多任务训练中系统建模。这样做的风险是,模型的基础表示没有在预训练/连续训练阶段学习到不同任务之间的共享结构,后续技能只是在单一能力上补丁式叠加。Lance 的研究假设是:多任务训练不是简单把数据混在一起,而是可以作为跨模态、跨输出形式的 transfer mechanism;理解数据可以为生成提供语义 grounding,生成/编辑数据也可能反过来强化视频理解中的时空表征。
这篇论文值得关注的另一个原因是资源约束。作者强调 Lance 在最多 128 GPUs 的训练预算内完成,并不是依靠极端模型规模取胜。对于统一多模态模型来说,这一点很重要:如果 unified modeling 只能通过不断扩大参数和数据来掩盖任务冲突,那么它的工程可复现性和研究启发都有限;Lance 则试图证明,合理的架构分流、位置编码、数据调度和阶段训练可以在较小模型上释放多任务协同收益。
2. Idea (核心思想)
Lance 的核心洞察可以概括为一句话:统一多模态模型需要共享上下文接口,但不应该强迫理解和生成共享同一条能力路径。它把所有文本、ViT 语义 token、clean VAE latent token、noisy VAE target token 放入一个 interleaved multimodal sequence,以便不同任务在同一个上下文空间里互相可见;同时使用 dual-stream mixture-of-experts,把理解路径和生成路径的参数、表示和目标函数分开,让语义推理与视觉合成各自优化。与单流 unified visual representation 路线相比,Lance 不把所有视觉输入压成一种 token。
理解侧使用 Qwen2.5-VL 的 ViT 语义 token,适合语言对齐和语义推理;生成侧使用 Wan2.2 3D causal VAE latent,适合连续空间中的图像/视频合成。与完全分离的多模型 pipeline 相比,Lance 又没有把理解和生成隔离成两个系统,而是在统一序列里让文本、语义视觉 token、条件 latent、目标 noisy latent 共享上下文,从而保留 cross-task interaction。第二个关键思想是 MaPE(Modality-Aware Rotary Positional Encoding)。
标准 3D-RoPE 可以编码视频 token 的时间、高度、宽度位置,但在 Lance 的统一序列中,同一个样本里会出现功能不同的视觉 token 群:ViT semantic tokens 提供理解条件,clean VAE latents 表示编辑/生成条件,noisy VAE latents 是 flow matching 的生成目标。它们可能有相似的时空坐标,却承担不同角色。MaPE 通过在 temporal coordinate 上加入 modality-specific offset ,显式区分不同 token group,减少位置歧义。
第三个思想是 staged multi-task training。Lance 不是从一开始就把所有任务同权混合,而是用 PT → CT → SFT → RL 四阶段逐步扩展任务空间:PT 建立基本图文/视频文本配对能力和基础生成能力;CT 引入更丰富的 interleaved understanding、editing、subject-driven generation 等多任务数据;SFT 用高质量数据加强指令遵循、一致性和视觉质量;RL 专门用 OCR reward 优化图像生成中的文字约束。这个训练设计与架构设计一致:先建立可共享的上下文基础,再通过任务混合和目标权重调度释放协同。
Figure 2 解读:T2I qualitative examples 展示 Lance 在文字提示中的对象数量、关系、属性和风格控制。它服务于核心思想的第一层验证:统一模型不是只做理解或只做文本输出,而是能从同一上下文接口直接进入视觉合成路径。
Figure 3 解读:X2I 图展示 any-to-image 与 image understanding 的组合能力,说明 Lance 的输入条件并不限于纯文本。图像条件、文本条件和理解输出都在统一序列中组织,生成路径可以从理解路径提供的语义条件中受益。
Figure 4 解读:T2V 图强调 Lance 对动作、镜头、角色和时间一致性的建模。相比 T2I,T2V 更依赖 VAE latent 的时序结构和 generalized 3D causal attention,因此是检验统一架构是否真的扩展到视频域的关键样例。
Figure 5 解读:X2V 与 V2T 例子说明 Lance 同时支持视频输出和视频理解。对统一模型而言,这比单独 T2V 更难,因为模型要处理视觉条件、文本指令、时序目标 latent 和文本回答之间的任务切换。
3. Method (方法)
3.1 总体框架:统一序列 + 双路径专家
统一 interleaved sequence
Lance 的总体框架围绕一个共享 interleaved sequence 展开。输入首先被分为四类 token:文本 token 、ViT semantic visual token 、clean VAE latent token 、noisy VAE latent token 。这些 token 按任务结构串接成统一序列:
统一上下文块的直觉
其中 与 表示文本/视觉 token block。这个形式的直觉是,模型不需要为不同任务建立完全不同的输入 pipeline;只要把条件、目标和回答都组织为上下文块,就可以用同一个 packed-sequence 机制支持理解、生成和编辑。
Figure 6 解读: 框架图从左到右展示三类输入路径:Text Tokenizer 处理文本;ViT Encoder 提供理解用 semantic tokens;VAE Encoder 提供生成/编辑用 clean 与 noisy latent tokens。中间的 MaPE 加在统一上下文序列上;dual-expert backbone 对共享上下文做 generalized 3D causal attention;输出端一条 LM head 做 next-token prediction,另一条 flow head 做 visual latent velocity prediction。图中最重要的不是“有两个头”,而是共享上下文与解耦路径同时存在:交互发生在统一序列,专门化发生在专家路径和目标函数。
理解路径:自回归文本目标
理解路径 主要处理文本与 ViT semantic tokens,用自回归语言模型头预测目标文本。其损失为:
生成路径:flow matching latent 目标
生成路径 处理 VAE latent tokens。给定 clean latent 和 Gaussian noise ,论文写作中构造 ,并优化 velocity prediction:
多任务加权目标
总体目标是加权和:
Released code 锚点
代码锚点显示,开源仓库中 modeling/lance/lance.py 的 Lance.__init__ 同时接收 Qwen2ForCausalLM 和 Qwen2_5_VisionTransformerPretrainedModel,在 visual_gen 开启时构造 TimestepEmbedder、vae2llm、llm2vae 和 PositionEmbedding3D。forward 中会把 ViT token embedding 写回 packed_sequence[packed_vit_token_indexes],把 VAE latent 经过 timestep embedding 与 3D latent position embedding 后写回 packed_sequence[packed_vae_token_indexes]。当 self.use_moe 为真时,代码把 packed_und_token_indexes 设为 text+ViT 位置,把 packed_gen_token_indexes 设为 VAE 位置,传给底层 Qwen2-MoT 模型。
一个需要记录的 paper-code 差异是 flow target 的符号约定:论文公式写 并预测 ;代码在训练 forward 片段中使用 packed_latent=(1-t)*clean+t*noise,并设置 target = noise - packed_latent_clean,对应从 clean/data 指向 noise 的 velocity。由于公开仓库主要是推理/模型代码,而非完整训练 release,笔记中不应把代码片段解释成完整训练脚本,只能说它验证了 Lance 的 packed latent、timestep embedding、MoE index routing 与 flow head 接口。
3.2 Generalized 3D causal attention
Lance 的序列既包含文字,也包含图像/视频 token。若对整段序列简单使用标准 causal mask,视觉 token 内部的空间/时序结构会受限;若全局 bidirectional,又会破坏文本和生成目标的因果顺序。论文采用 generalized 3D causal attention:先把序列划分为 modality-specific segments;segment 之间保持因果关系,即当前段可以看前面的 clean segments;segment 内部按 token 类型使用不同模式,文本 token 用 causal attention,视觉 token 用 bidirectional attention,以便捕捉空间或时空内部结构。
这个设计对应到代码中 modeling/lance/qwen2_navit.py 的 packed attention 实现。PackedAttentionMoT.forward_train 对 understanding token 和 generation token 分别使用不同的 q/k/v 投影或 MoE 投影:packed_und_token_indexes 走原 q/k/v 与 norm,packed_gen_token_indexes 走 q_proj_moe_gen、k_proj_moe_gen、v_proj_moe_gen、q_norm_moe_gen、k_norm_moe_gen。
Qwen2MoTDecoderLayer 进一步让 understanding token 走 mlp,generation token 走 mlp_moe_gen。因此,“dual-stream MoE”不是抽象口号,而是 token index 级别的参数分流。直观地看,Lance 希望做三件事:第一,条件信息可以在共享上下文里自由组合,例如文本+图像条件共同指导视频编辑;第二,生成目标 token 不必抢占理解路径的参数容量;第三,视觉 token 内部仍能做充分的空间/时序交互。这三点共同解决了统一模型最容易失败的地方:任务都放进同一个序列后,模型很容易出现位置混淆、目标函数冲突、生成细节不足或理解语义退化。
3.3 MaPE:给异质视觉 token group 加角色坐标
标准 Qwen2.5-VL 3D-RoPE 中,文本 token 的位置可写为 ;视觉 token 在时间、高度、宽度位置 上的坐标为:
这个表示能描述时空布局,但不能区分 token 的功能角色。Lance 中可能同时出现 ViT semantic tokens、clean VAE condition tokens、noisy VAE target tokens;如果它们共享近似的时空坐标,模型可能把“条件图像”“目标生成 latent”“语义观察 token”混成同类视觉位置。MaPE 的做法是为每个 modality group 定义 base 3D-RoPE:
再只在时间维加入 group offset:
只偏移 temporal coordinate 的好处是,空间坐标仍然保留视觉结构,group identity 则通过时间轴偏移表达。代码层面,qwen2_navit.py 使用 Qwen2_5_VLRotaryEmbedding 与 apply_multimodal_rotary_pos_emb 处理 multimodal position embedding;lance.py 中还为 visual generation latent 设置 self.pos_shift,注释说明这是为了给 video 前面的文本保留安全位移,避免 video 起始坐标不再是 [0,0,0] 时发生位置冲突。公开代码没有直接以论文变量名 Delta_m 暴露一个训练配置,但 rotary/position pathway 与 paper 设计方向一致。
Figure 7 解读:MaPE 图展示不同视觉 token group 在位置空间中的分离。关键点是,它不是重新设计一个完全不同的位置编码,而是在 Qwen2.5-VL 3D-RoPE 的基础上给不同视觉角色加 group-aware offset,让同一时空位置上的“语义观察”“条件 latent”“目标 noisy latent”能被注意力区分。
3.4 多阶段训练与数据调度
训练分为四阶段。PT 阶段冻结 VAE 和 ViT encoder,优化 multimodal backbone、QK-Norm 模块和 MLP connectors,使用约 1B image-text 样本与 140M video-text 样本。
CT 阶段把模型从 paired caption/generation 扩展到多任务 unified learning,引入 2.73M interleaved multimodal understanding 样本、2.8M image editing、2.6M video editing、3.6M subject-driven image generation、1M subject-driven video generation,总计约 300B tokens。SFT 阶段使用更高质量数据细化 instruction fidelity、visual fidelity、editing accuracy 和 identity consistency。
RL 阶段使用 20K image generation prompts,借助 PaddleOCR reward 强化文字渲染与文本约束一致性。训练超参数来自论文 LaTeX/PDF 表格,而不是开源仓库默认值:PT/CT/SFT/RL 学习率分别为 、、、;LR scheduler 分别为 Constant、Constant、Cosine、Constant;AdamW 使用 ;
weight decay 全部为 0.0,gradient norm clip 全部为 1.0。训练步数为 350k、80k、15k、800;seen training tokens 为 1.5T、300B、72B、0.5B;最大上下文窗口从 PT 的 40k 增加到后续阶段的 70k;生成分辨率短边/长边范围从 PT 的 (192, 848) 提升到后续阶段的 (480, 848),理解分辨率为 PT (168, 826)、后续 (462, 826)。loss weight (CE:MSE) 为 PT 0.25:1、CT 0.5:1、SFT 0.25:1,RL 阶段不使用该项。数据 mixture schedule 也体现“逐步增加难任务比例”的思想。
全局 Vid-Gen : Vid-Und : Img-Gen : Img-Und 在 PT、CT-I、CT-II、CT-III、SFT 中保持 64:16:16:4。图像生成内部 T2I : I-Edit : S2I 从 PT 的 100:0:0,变为 CT-I 70:15:15、CT-II 60:20:20、CT-III 50:25:25,SFT 回到 60:20:20。视频生成内部 T2V : I2V : V-Edit : S2V 从 PT 的 100:0:0:0,变为 CT-I 60:10:15:15、CT-II 40:20:20:20、CT-III 25:25:25:25,SFT 为 60:10:15:15。
也就是说,越到 CT 后期,editing 和 subject-driven generation 这类更复杂、更依赖条件理解的任务占比越高。
3.5 基于公开代码的组件伪代码
公开代码仓库提供模型和推理实现,但没有完整 release PT/CT/SFT/RL 的训练脚本、optimizer scheduler 配置或数据构造脚本。因此下面伪代码只锚定公开代码可验证的模型/推理路径,并在训练损失处注明 paper-code convention。
import torch
import torch.nn as nn
import torch.nn.functional as F
class LancePackedForward(nn.Module):
def __init__(self, qwen_mot, vit_encoder, vae2llm, llm2vae, time_embedder, latent_pos_embed):
super().__init__()
self.language_model = qwen_mot
self.vit_encoder = vit_encoder
self.vae2llm = vae2llm
self.llm2vae = llm2vae
self.time_embedder = time_embedder
self.latent_pos_embed = latent_pos_embed
def forward(self, packed_sequence, text_idx, vit_idx, vae_idx, vit_pixels, clean_latents,
packed_position_ids, attention_mask, sample_lens, timestep_shift=4.0):
# 1) understanding visual tokens: Qwen2.5-VL ViT -> connector -> packed sequence
if vit_pixels is not None:
vit_embed = self.vit_encoder(vit_pixels)
packed_sequence[vit_idx] = vit_embed.to(packed_sequence.dtype)
# 2) generation tokens: clean latent + noise -> x_t, then project into LLM hidden space
noise = torch.randn_like(clean_latents)
t = torch.sigmoid(torch.randn(clean_latents.shape[0], device=clean_latents.device))
t = timestep_shift * t / (1 + (timestep_shift - 1) * t)
x_t = (1 - t[:, None]) * clean_latents + t[:, None] * noise
latent_embed = self.vae2llm(x_t) + self.time_embedder(t) + self.latent_pos_embed(vae_idx)
packed_sequence[vae_idx] = latent_embed.to(packed_sequence.dtype)
# 3) dual expert routing: text+ViT -> UND, VAE latent -> GEN
hidden = self.language_model(
packed_sequence=packed_sequence,
sample_lens=sample_lens,
attention_mask=attention_mask,
packed_position_ids=packed_position_ids,
packed_und_token_indexes=torch.cat([text_idx, vit_idx]),
packed_gen_token_indexes=vae_idx,
)
# 4) flow target in released code uses noise-clean convention for x_t=(1-t)*clean+t*noise
pred_velocity = self.llm2vae(hidden[vae_idx])
target_velocity = noise - clean_latents
mse = F.mse_loss(pred_velocity, target_velocity)
return hidden, mseclass DualStreamMoTLayer(nn.Module):
def __init__(self, shared_attn, gen_attn, shared_mlp, gen_mlp):
super().__init__()
self.shared_attn = shared_attn
self.gen_attn = gen_attn
self.shared_mlp = shared_mlp
self.gen_mlp = gen_mlp
def forward(self, packed_sequence, und_idx, gen_idx, position_embeddings, attention_mask):
# qwen2_navit.py 的 PackedAttentionMoT 使用 index 级分流:
# und token 走普通 q/k/v + mlp,gen token 走 *_moe_gen + mlp_moe_gen。
out = torch.empty_like(packed_sequence)
out[und_idx] = self.shared_attn(
packed_sequence[und_idx], position_embeddings, attention_mask
)
out[gen_idx] = self.gen_attn(
packed_sequence[gen_idx], position_embeddings, attention_mask
)
out2 = torch.empty_like(out)
out2[und_idx] = self.shared_mlp(out[und_idx])
out2[gen_idx] = self.gen_mlp(out[gen_idx])
return out2def mape_positions(text_len, token_groups):
# token_groups: dict like {"vit_semantic": (T,H,W,delta), "vae_clean": ..., "vae_noisy": ...}
positions = []
for group_name, (T, H, W, delta_m) in token_groups.items():
for t in range(T):
for h in range(H):
for w in range(W):
base = torch.tensor([text_len + t, text_len + h, text_len + w])
positions.append(base + torch.tensor([delta_m, 0, 0]))
return torch.stack(positions)@torch.no_grad()
def lance_generation_loop(model, packed_text, packed_vit, latent_shape,
num_timesteps=30, timestep_shift=3.5, cfg_text_scale=4.0):
# inference_lance.sh 默认: VALIDATION_NUM_TIMESTEPS=30, TIMESTEP_SHIFT=3.5, CFG_TEXT_SCALE=4.0
x = torch.randn(latent_shape, device=packed_text.device)
timesteps = torch.linspace(1.0, 0.0, num_timesteps + 1, device=x.device)
for i in range(num_timesteps):
t = timesteps[i]
v_cond = model.validation_gen(
val_packed_text_ids=packed_text,
val_packed_vit_tokens=packed_vit,
val_packed_latent=x,
timestep_shift=timestep_shift,
num_timesteps=num_timesteps,
cfg_text_scale=cfg_text_scale,
)
x = x + (timesteps[i + 1] - t) * v_cond
return xCode reference:
main@dd28cc18(2026-05-19) — pseudocode and mapping based on this commit
| Paper Concept | Source File | Key Class/Function |
|---|---|---|
| Lance model wrapper | modeling/lance/lance.py | LanceConfig, Lance.__init__, Lance.forward |
| Packed interleaved sequence | modeling/lance/lance.py | packed_sequence, packed_vit_token_indexes, packed_vae_token_indexes handling |
| ViT semantic token path | modeling/lance/lance.py; modeling/vit/qwen2_5_vl_vit.py | make_packed_vit_token_embed, Qwen2_5_VisionTransformerPretrainedModel, connector |
| VAE latent generation path | modeling/lance/lance.py; modeling/vae/wan/vae2_2.py | vae2llm, llm2vae, TimestepEmbedder, WanVideoVAE |
| Dual-stream MoE routing | modeling/lance/qwen2_navit.py | PackedAttentionMoT, Qwen2MoTDecoderLayer, packed_und_token_indexes, packed_gen_token_indexes |
| Multimodal RoPE / position embedding | modeling/lance/qwen2_navit.py; modeling/lance/lance.py | Qwen2_5_VLRotaryEmbedding, apply_multimodal_rotary_pos_emb, PositionEmbedding3D, pos_shift |
| Generation inference | modeling/lance/lance.py; inference_lance.py; inference_lance.sh | validation_gen, validation_gen_KVcache, task configs, VALIDATION_NUM_TIMESTEPS=30, CFG_TEXT_SCALE=4.0 |
| Text understanding inference | modeling/lance/lance.py; inference_lance.py | generate_text, validation_image_to_text_KVcache, validation_video_to_text_KVcache, TASK_X2T_IMAGE, TASK_X2T_VIDEO |
| Training recipe / scheduler | not released in public repo | Paper tables only; no public PT/CT/SFT/RL training loop found |
4. Experimental Setup (实验设置)
4.1 数据与任务规模
Lance 的实验覆盖四个大类:image generation、video generation、multimodal editing、video understanding。训练数据规模按任务族组织。理解侧包括 1B general image captioning(I2T)、140M general video captioning(V2T)、190K high-quality image captioning、5K high-quality video captioning,以及 2.73M interleaved multimodal understanding(X2T)。
图像生成侧包括 1B general image generation(T2I)、2.8M general image editing(X2I)、3.6M general subject-driven image generation、190K high-quality image generation、84K high-quality image editing。
视频生成侧包括 140M general video generation(T2V/I2V)、2.6M general video editing(X2V)、1M general subject-driven video generation、5K high-quality video generation、9K high-quality video editing、5.5K high-quality subject-driven video generation。
CT 阶段的 2.73M interleaved understanding 又覆盖多个子任务:T2T 41K、captioning 443K、classification 142K、conversation 72K、grounding 200K、reasoning 194K、VQA 600K、OCR 120K。这个构成说明 Lance 的 understanding 数据不是只做 caption,而是包含 OCR、grounding、reasoning 等会影响生成语义对齐的能力。
4.2 Baselines 与评测基准
图像生成使用 GenEval 与 DPG-Bench。GenEval 强调 object count、color、position、attribute binding;DPG-Bench 更强调复杂提示下的 global/entity/attribute/relation/other 组合遵循。比较对象包括 generation-only 模型(如 FLUX.1-dev、GPT Image 1、Qwen-Image、SD3-Medium 等)和 unified models(如 OmniGen2、Show-o2、UniWorld-V1、BAGEL、Mogao、TUNA、TUNA-2 等)。
视频生成使用 VBench,指标覆盖 quality score、semantic score、subject consistency、background consistency、temporal flicker、motion smoothness、dynamic degree、aesthetic quality、imaging quality、object class,以及 multi-objects、human action、color、spatial relation、scene、appearance style、temporal style、overall consistency、total score。
论文重点比较 unified models 与 task-specialized video generators,如 HunyuanVideo1.5、Wan2.2-TI2V、UniVideo、TUNA 等。图像编辑使用 GEdit-Bench,指标包括 BC、CA、MM、MC、PB、ST、SA、SR、SRp、TM、TT 与 Avg/G_O。论文指出 Lance 在 background change、material modification、motion change、portrait beautification、subject removal、replacement、tone transfer 等类别上强,但 text modification 相对弱。
视频理解使用 MVBench,覆盖 action sequence/prediction/antonym、fine-grained/unexpected action、object existence/interaction/shuffle、moving direction/localization、scene transition、action count、moving count/attribute、state change、character order、episodic reasoning、egocentric navigation、counterfactual inference 等 20 个子项。
4.3 训练与推理配置
实验设置中,Lance 基于 Qwen2.5-VL 3B 初始化 visual understanding encoder 与两个 multimodal context backbones 、;visual generation encoder 使用 Wan2.2 的 3D causal VAE。论文还采用 classifier-free guidance:PT 阶段 text-to-image generation 数据以 10% 概率 drop text condition;CT 和 SFT 阶段对 multimodal conditions 以 5% 概率 drop full condition,并额外以 5% 概率 drop text-only condition 而保留 visual condition。推理时,generation tasks 的 text CFG scale 设置为 4;image input resolution 为 768×768,video 为 480p、12 fps。
开源 inference_lance.sh 的默认推理参数与论文描述基本对应:NUM_GPUS=1,TASK_NAME=x2t_image 可切换为 t2i | image_edit | t2v | video_edit | x2t_image | x2t_video,VALIDATION_NUM_TIMESTEPS=30,VALIDATION_TIMESTEP_SHIFT=3.5,CFG_TEXT_SCALE=4.0,NUM_FRAMES=50(最大 121),VIDEO_HEIGHT=768、VIDEO_WIDTH=768,RESOLUTION=video_480p,MODEL_PATH=downloads/lance_3b_video。注意这些是公开推理脚本配置,不是论文训练表格中的 PT/CT/SFT/RL 训练超参。
5. Experimental Results (实验结果)
5.1 主结果:图像生成
在 DPG-Bench 上,Lance 3B 的 Global/Entity/Attribute/Relation/Other/Overall 分别为 83.89、91.07、89.36、93.38、80.80、84.67。它的 DPG overall 不是所有模型最高,例如 TUNA 和 TUNA-2 的 overall 更高,但 Lance 在 Relation 上达到 93.38,为表中最高,说明其多任务语义上下文对复杂关系绑定有帮助。在 GenEval 上,Lance 的 Single Obj./Two Obj./Counting/Colors/Position/Color Attr./Overall 为 1.00、0.94、0.84、0.97、0.87、0.81、0.90;Overall 0.90 与 TUNA 并列表中最高,且 Counting、Colors 也为最高。对一个 3B unified model 来说,这个结果说明其图像生成不是牺牲式附带能力。
Figure 8 解读:T2I qualitative comparison 用红色标出 baseline 缺失或错误渲染的提示要求。论文指出 Lance 相比 Bagel、InternVL-U 等开源 unified baselines 有更好的美学质量和 image-text alignment,例如 lantern count、jacket draped over one shoulder 等细节更准确;同时它接近 Qwen-Image 20B 和商业闭源 Nano Banana 的主观质量。
5.2 主结果:视频生成
VBench 上 Lance 3B 获得 Total Score 85.11,是 unified models 中最高。Part I 指标中,Quality Score 85.14、Semantic Score 84.96、Subject Consistency 94.52、Background Consistency 94.28、Temporal Flickering 99.66、Motion Smoothness 95.93、Dynamic Degree 75.83、Aesthetic Quality 64.33、Imaging Quality 66.78、Object Class 96.58。
Part II 中,Multi-Objects 93.86、Human Action 97.80、Color 92.61、Spatial Relation 93.61、Scene 64.75、Appearance Style 23.14、Temporal Style 25.53、Overall Consistency 27.04、Total Score 85.11。论文解释为:Lance 不仅整体分数高,也在 visual quality、object grounding、color consistency、spatial relationships、scene understanding、temporal style 等语义/质量维度上较强。
Figure 9 解读:T2V qualitative comparison 展示 Lance 与 HunyuanVideo1.5、Wan2.2-TI2V、UniVideo 等模型在文本到视频上的差异。图中红色提示片段强调了 baseline 容易遗漏的要求;Lance 的优势主要体现在更好的视觉美学、更准确的镜头/动作转换以及更稳定的时空一致性。它不是一个纯视频专家模型,但通过统一训练获得了足够强的视频生成表现。
5.3 主结果:多模态编辑
在 GEdit-Bench 上,Lance 3B 的 BC/CA/MM/MC/PB/ST/SA/SR/SRp/TM/TT/Avg/G_O 分别为 7.73、7.74、7.28、7.83、7.50、7.03、7.64、7.85、7.71、4.46、7.57、7.30。Avg/G_O 7.30 是 unified models 中最优;多个类别如 background change、material modification、motion change、portrait beautification、subject removal、replacement、tone transfer 都达到最佳或接近最佳。但 TM=4.46 明显较弱,论文也承认 text modification 是未来方向。这一点很重要:Lance 的统一建模没有完全解决文字编辑,尤其是需要局部文字精确替换时,OCR reward 主要用于 RL 图像生成,并不等价于全能文本编辑器。
Figure 10 解读:编辑对比图包含 image editing 与 video editing。作者强调 Lance 能保持结构和纹理,例如手部几何、局部材质、主体替换后的背景一致性;视频编辑还要求多属性修改后 motion dynamics 不崩。这个图对方法部分的意义是:clean VAE condition tokens 与 noisy target latent tokens 必须在同一上下文中被区分,MaPE 和 dual path routing 都是为了减少这种条件/目标混淆。
5.4 主结果:视频理解
MVBench 上 Lance 3B 的 20 项与平均分为:AS 73.9、AP 76.5、AA 71.5、FA 49.0、UA 63.5、OE 96.0、OI 72.5、OS 33.0、MD 63.5、AL 33.0、ST 86.0、AC 41.0、MC 82.0、MA 97.5、SC 43.0、CO 47.5、EN 31.5、ER 40.0、CI 77.0、Avg 62.0。论文称其在 unified multimodal models 中最高,相比第二名 Show-o2 7B 有约 11.3% 相对提升,并且超过多数 specialized understanding models。这说明生成/编辑能力没有把理解能力完全挤掉;相反,多任务训练可能在对象交互、动作属性、状态变化等时空子任务上提供额外监督。
5.5 消融:训练 token、跨任务数据与 MaPE
训练动态分析显示,随着训练 token budget 增加,图像生成和视频生成都先快速提升,再进入慢增长阶段。作者指出早期 PT 建立核心生成能力,后续 token 更多改善 prompt alignment、visual fidelity 和 temporal consistency;CT 阶段虽然主要增加 editing、instruction-following 等多任务数据,而不是纯生成数据,却仍能提升 native generation,这支持“多任务协同不是简单能力拼盘”的论点。
Figure 11 解读:token scaling 曲线展示 DPG-Bench 图像生成与 VBench 视频生成随训练 token 增长的趋势。图像和视频都有 early rapid gain 与 later slow-growth,说明 PT 阶段学到大部分基础生成能力;后续阶段对复杂提示、时序一致性和细节有持续增益。
Figure 12 解读:qualitative token-budget 图比较 0.5T、1T、1.5T 模型。0.5T 模型能捕捉粗语义,但文字、属性和动态仍不稳;1.5T 模型在 text rendering、attribute fidelity、多对象动态和 temporal coherence 上更完整。它补充说明 token 数量提升不是只涨 benchmark,而是改变可观察的生成失败模式。
跨任务数据消融结果更直接。Base generation-only 的 GenEval/VBench/MVBench 为 80.88、81.25、—。加入 understanding data 且 Gen.:Und.=8:2 时,GenEval 81.65、VBench 82.91、MVBench 58.06;Gen.:Und.=9:1 时,GenEval 80.93、VBench 81.47、MVBench 57.99。加入 multi-task data 后,Gen.:Und.=9:1 且 Gen.:MT-Gen.=8:2 得到 GenEval 81.89、VBench 82.88、MVBench 59.18;Gen.:MT-Gen.=6:4 得到 GenEval 82.06、VBench 83.05、MVBench 58.95。最佳生成结果来自 6:4 多任务生成混合,说明 editing、subject-driven generation 等任务不只是额外能力,也能增强基础生成;而 MVBench 在 8:2 多任务混合时最高,说明生成式多任务也能反向帮助理解。
MaPE 消融中,w/ MaPE 的 GenEval/GEdit/VBench/MVBench 为 80.94、6.86、81.81、59.16;w/o MaPE 为 80.56、6.30、80.95、59.02。提升最明显的是 GEdit,从 6.30 到 6.86。这个现象符合方法直觉:编辑任务最依赖同时区分视觉条件与生成目标,如果位置编码无法区分 heterogeneous visual token groups,模型更容易把“要保留的输入结构”和“要生成/修改的目标区域”混淆。
5.6 局限与未来方向
论文明确列出四个方向。第一,visual generation post-training 仍可加强:更全面的视频 reward models 与 reward-based optimization 可提供更强的时序一致性、视觉美感和用户偏好监督。第二,model scaling 仍可能提升整体能力,包括模型容量、专家容量和 context length。第三,broader modalities 尚未覆盖,未来可加入 audio、speech、3D、depth 和 embodied sensory signals,走向更通用的 any-to-any multimodal intelligence。第四,streaming multimodal interaction 仍是未来方向,当前 Lance 还不是实时流式交互系统。
我的阅读结论是:Lance 的贡献不在某一个 benchmark 上压倒所有 specialist,而是在“统一模型如何不互相干扰”这个问题上给出相对完整的工程答案:共享 interleaved context 解决任务接口统一,dual-stream MoE 解决能力路径冲突,MaPE 解决异质视觉 token 的位置/角色混淆,staged multi-task schedule 解决任务难度与数据比例的训练动态。开源代码目前更像 model/inference release,而非 full training reproduction;因此复现训练结果仍依赖论文表格和未开源训练数据/脚本,但模型结构与推理路径已经能为理解论文方法提供足够锚点。