Argus: Stacked Multi-View Identity Mosaic Injection for Subject-Preserving Video Generation

关于代码:截至本文,论文未提供官方代码仓库(arxiv 摘要页、正文、Papers-with-Code、GitHub 搜索均无)。正文多处指向 Appendix A–H 的实现细节。本文基于论文 + 公式 + 图精读,§4 的实现细节引用论文章节/公式而非 repo:Lnn——这是一篇快手的工业论文,代码大概率暂未开源。

ARGUS 总览:MLLM 身份导演 + SMII 注入 + ASLG
Fig. 1 — ARGUS 总览。左(MLLM Director):Qwen3-VL 身份导演从参考图/视频里挑出信息量大的身份瞬间,输出全局身份 token(经 CLIP 编码首帧、T5 编码改写后的 prompt、导演隐状态投影)+ "key frames for SMII"。右(SMII):身份证据经 Wan VAE 编码成 "ID noise latent",和主视频的 noise latent 一起 patchify 进 DiT;身份 token 被赋予**负时间位置(-1…-n)**作只读记忆;推理时 ASLG 用"弱模型 vs 全模型"分离文本引导与身份引导。(论文 Fig. 1)

1. 出发点 (Motivation)

主体保持视频生成的目标,不只是"生成一段真实的视频",而是让视频里的人始终是同一个人,同时还要听 prompt、尊重首帧。难点集中在:大角度转头(large yaw)、表情变化、部分遮挡、小脸、配饰、光照漂移,以及"文本 / 首帧 / 身份参考"三者打架。

论文一针见血地指出瓶颈:现有方法把身份当成"点参考"(point reference)——用一张(或几张)参考图通过 adapter / token 拼接 / 受限注意力注入。但一张图不可避免地把"这个人是谁"和"他这一帧恰好的样子"(姿态、表情、眼镜、发型、背景、裁剪、相机风格)纠缠在一起:

模型若过度信任参考图 → 照抄 nuisance 细节(连背景配饰一起复制);若信任不足 → 身份漂移。

ARGUS 的核心洞察:人脸身份不是一个点,而是一个分布。我们认出一个熟人,靠的不只是正脸几何,还有侧脸轮廓、面部不对称、习惯表情、微动作,以及"在各种条件下保持一致"这件事本身。所以目标应该从"静态相似(static resemblance)"转向"动态神似(dynamic likeness)"——不要让模型去匹配一张干净图,而要喂给它紧凑、多样、且把 nuisance 随机化掉的身份证据。

这就引出两个设计原则,构成全文方法骨架:

  1. 把身份变成扩散同步的动态记忆(SMII),而不是外挂 adapter 或单张参考图;
  2. 可扩展的身份监督不必依赖跨配对视频——用同片段/同身份 + 强反事实增广,逼模型只认"身份不变量"。

2. 方法 (Method)

ARGUS 基于 Wan 2.1(14B DiT,Flow Matching 训练)。先回顾 Wan 的 I2V 接口:3D VAE 把视频编码成 \(z_0^v\),加噪样本 \(z_t^v=(1-\sigma_t)z_0^v+\sigma_t\epsilon^v\)\(\sigma_t=t/1000\)),再拼成 36 通道张量 \(\Phi_t^v=[z_t^v \parallel m^v \parallel y^v]\)(噪声 latent + 时序 mask + 干净条件帧),过 3D patch embedding 进 DiT。ARGUS 的所有巧思,都是为了让"身份流"和这个 \(\Phi_t^v\) 分布对齐,从而复用 Wan 的原生接口而非外挂新模块。

2.1 身份导演:MLLM 当"感知前端"挑证据

不是花哨的加字幕,而是给下游注入器编译最佳证据。用冻结的 Qwen3-VL,对每个候选帧/片段 \(j\) 估计视角覆盖、表情强度、运动信息量、尺度稳定性、光照多样性、可见性、nuisance 风险,打分:

\[s_j = \alpha_1 c_j^{\text{view}} + \alpha_2 c_j^{\text{expr}} + \alpha_3 c_j^{\text{motion}} + \alpha_4 c_j^{\text{scale}} + \alpha_5 c_j^{\text{illum}} + \alpha_6 c_j^{\text{visible}} - \alpha_7 c_j^{\text{nuisance}}.\]

—— 翻译:给每个候选身份帧打一个加权分——视角/表情/运动/尺度/光照/可见性越丰富越加分,nuisance(背景杂物、遮挡风险等干扰)越多越减分。目的是挑出"对认人有用"的帧。

但关键不是选 top-9,而是选一个"多样"的集合(否则会选出 9 张几乎一样的正脸):

\[S^\star = \arg\max_{|S|=9}\ \Big[\sum_{a\in A_{id}}\mathrm{Var}\{c_j^a: j\in S\} + \eta\sum_{j\in S}s_j - \gamma\,\mathrm{Redundancy}(S)\Big].\]

—— 翻译:在所有候选里挑 9 张,使得(a)它们在各身份维度上的方差大(覆盖偏航/表情/尺度/光照/遮挡等不同情况),(b)总分高,(c)彼此冗余小。一句话:要"多样且互补"的 9 张,不要 9 张近乎重复的正脸。

导演还输出:一段强调稳定面部结构的身份 caption(把 prompt 改写成 \(p^+\));一个冲突图,强制优先级 首帧布局 ≻ 文本语义 ≻ 身份参考(身份不能覆盖首帧硬几何);以及一个全局身份向量 \(h_D\)。文本侧条件拼接为 \(C_{txt}=[e_p \parallel e_I \parallel e_D]\)(T5 文本、CLIP 首帧、投影后的身份描述),残差门满足 \(g_I\ge g_p\ge g_D\) 以保住优先级(论文 Eq. 4–5)。

2.2 SMII:扩散同步的身份张量化(核心)

身份用 \(3\times3\) 马赛克(\(C=9\) 格,每格可以是静态图或短微片段),堆成一段短"身份视频" \(G^{id}\in\mathbb{R}^{3\times n\times H_{id}\times W_{id}}\)\(n\) 是 VAE 时间压缩后的身份时槽数)。关键一步:身份不是以干净 token 注入,而是和目标视频走同一条 Flow Matching 路径

\[z_t^{id} = (1-\sigma_t)z_0^{id} + \sigma_t\epsilon^{id}, \qquad \Phi_t^{id} = [\,z_t^{id} \parallel \mathbf{1}_4 \parallel z_0^{id}\,].\]

—— 翻译:用和主视频"同一个噪声水平 $\sigma_t$"去给身份 latent 加噪(而不是塞一张干净图)。全 1 的 mask 表示"每个身份 token 都是已知参考"。推理时每一步都按当前 $\sigma_t$ 重建前 16 通道——让身份流的噪声水平始终和视频流同步。

因为 \(\Phi_t^{id}\)\(\Phi_t^v\) 通道语义完全相同,可以直接复用 Wan 原生的 patch embedding,把两者拼成一条序列 \(X_t=[X_t^{id}\parallel X_t^v]\)。这一步消除了"干净参考 token 拼接"带来的分布失配(support mismatch),也省掉了额外的 cross-attention adapter——这是 SMII 区别于一切"外挂式"身份注入的本质。消融里,把 SMII 换成朴素 token 拼接,总分掉 10.52;用干净(不加噪)身份 token,掉 7.66

2.3 负时间 + 只读:身份是"前置记忆",不是"未来帧"

身份 token 不是要生成的视频帧,所以给它们负时间坐标

\[p_f^{id}\in\{-n,\dots,-1\}, \qquad p_f^v\in\{0,\dots,\tilde T-1\}.\]

—— 翻译:视频帧时间是 0,1,2,…;身份 token 放在 -1,-2,…,-n 这些"负时间"上。$n=1$ 时就是一张静态身份马赛克挂在 -1 时刻;$n>1$ 时身份变成一段"视频开始前的微历史"。空间上把马赛克和首帧 latent 网格中心对齐(Eq. 9)。在 3D RoPE 下,身份离首帧足够近能被读到,但位置上和生成内容分开。

再用块注意力 mask 强制"只读"——身份只能看身份,视频能看身份+视频:

\[M = \begin{pmatrix} 0 & -\infty \\ 0 & 0 \end{pmatrix}, \quad \text{行=query, 列=key, 顺序}[id, video].\]

—— 翻译:左下/右下两块是 0(视频 query 可读身份和视频);右上是 $-\infty$(身份 query 读不到视频)。这样生成内容就不会"污染"身份记忆本身——参考永远是干净的参考。

2.4 TIA:只在"中段"读身份

早期去噪定全局布局,后期去噪修纹理。身份注入若全程均匀,会"早期压垮布局 / 后期过度锐化人脸"。Temporal Identity Annealing 用一个中段窗口门控 video→id 注意力:

\[\lambda_\ell(\sigma_t) = \lambda_\ell^{\max}\,\mathrm{sigmoid}\!\Big(\tfrac{\sigma_{hi}-\sigma_t}{\tau}\Big)\,\mathrm{sigmoid}\!\Big(\tfrac{\sigma_t-\sigma_{lo}}{\tau}\Big).\]

—— 翻译:两个 sigmoid 相乘形成一个"中间高、两头低"的窗口。只有当噪声水平 $\sigma_t$ 落在 $[\sigma_{lo},\sigma_{hi}]$ 的结构生成中段时,身份注意力强度 $\lambda$ 才打开。早期(定布局)和晚期(修纹理)都把身份读弱,避免抢戏。

2.5 无配对反事实训练 + ASLG

训练故意简单:身份格子从同一片段/同一身份采样,再强增广(背景替换、配饰扰动、前景随机化、色彩/模糊/压缩、发型/眼镜/帽子插入……除了稳定面部区域,其它都能随机化;高层语义反事实用 Nano-Banana-2 配人脸保护 mask)。从不要求"同人不同条件"的配对视频。损失就是 Wan 原始 Flow Matching loss,只作用在主视频 token 上:

\[\mathcal{L}_{FM} = \mathbb{E}_{t,\epsilon}\big[w(t)\,\|\hat u_t^v - (\epsilon^v - z_0^v)\|_2^2\big].\]

—— 翻译:标准 flow-matching 速度回归——让模型预测的速度 $\hat u$ 逼近真值速度(噪声减干净 latent)。没有人脸分类损失、没有身份重建损失、没有跨配对监督。身份不变性靠的是"增广让 nuisance 随机、身份不变"——依赖 nuisance 的预测器跨增广视图会不稳,只有认身份不变量的预测器才稳定(Eq. 14)。

消融惊人:把这套反事实增广换成 2K 真实跨配对样本,总分反而掉 5.76——"大规模 nuisance 随机化"比"原始配对"是更强的信号。这呼应了 oftsr-2024 之外的另一条数据哲学:合成扰动 > 稀缺真配对。

推理端 ASLG(Adaptive Self-Likeness Guidance) 把文本引导和身份引导分开。它训练一个 <1% 参数的 mask 网络 \(\phi_\eta\) 学"该弱化哪些 block"得到弱模型 \(u_\theta^\omega\),然后算三个速度并自校准:

\[\hat u_t = u_{++} + s_T(u_{++}-u_{-T}) + s_I(\sigma_t)\,\rho_t\,(u_{++}-u_{-I}), \quad \rho_t=\mathrm{clip}\Big(\tfrac{\|u_{++}-u_{-T}\|_2}{\|u_{++}-u_{-I}\|_2+\epsilon},\rho_{\min},\rho_{\max}\Big).\]

—— 翻译:$u_{++}$ 是"有文本有身份"的预测,$u_{-T}$ 去掉文本,$u_{-I}$ 用黑马赛克去掉身份。最终速度 = 基准 + 文本 CFG 项 + 身份引导项;身份项强度 $\rho_t$ 自动按"文本引导的局部尺度"标定(文本拽得猛时身份也跟上),避免身份引导忽强忽弱。身份的 null 分支用"黑马赛克"而非 None,保持序列长度并匹配训练时的 drop 分布。

3. 结论 (Key findings)

身份压力场景下的定性对比
Fig. 2 — 身份压力场景定性对比。(a) 大偏航转头:VACE / Phantom-14B / Jimeng / Stand-In 出现侧脸身份丢失、几何不稳或人脸过度平滑;ARGUS 在转头中保住更锐利的身份细节与动态神似。(b) 首帧遮挡:Wan 2.1 无身份注入只能"脑补"被挡的脸,ConsisID 在可见线索少时退化,BindWeave 出现僵硬的"复制粘贴式"参考表情;ARGUS 从堆叠马赛克里恢复身份,表情和动作自然。(论文 Fig. 2)
MLLM 身份导演与 ASLG 的消融可视化
Fig. 3 — 消融可视化。左半:有/无 MLLM 身份导演——有导演(上排)保住更细的身份细节(黄圈处五官结构更准)。右半:有/无 ASLG——有 ASLG 显著改善身份专属纹理与皮肤质感(红箭头处)。(论文 Fig. 3)

4. 实现细节 (Implementation notes)

⚠️ 无开源代码,以下细节引用论文章节/公式/附录,非 repo:Lnn

5. 批判性总结 (Critical assessment)

Strengths

Limitations / open questions

When to use / not use

Further reading

讨论 / Comments

评论托管在本仓库的 GitHub Discussions, 需 GitHub 账号。