跳转至

From Synchrony to Sequence: Exo-to-Ego Generation via Interpolation

会议: ECCV2026
论文: ECCV 2026 Poster
代码: https://github.com/insait-institute/Syn2Seq
领域: 视频生成
关键词: 第一人称视频生成 / 跨视角视频生成 / 帧插值 / 扩散强迫 / 序列建模

一句话总结

本文把外中心到内中心(Exo2Ego)视频生成从"条件-输出"改写成一条连续序列的生成:用一个冻结的帧插值器在最后一个 exo 帧与第一个 ego 帧之间造出过渡视频、再对相机位姿做 Slerp/线性插值,把 exo、过渡、ego 三段首尾相接成 \(S=(X,I,G)\) 交给 Diffusion Forcing Transformer 逐帧独立加噪建模,在 Ego-Exo4D 的 Health / Bike / Cooking 三个类别上 PSNR、SSIM、LPIPS 全面优于 TrajectoryCrafter、Wan-FCtrl、Wan VACE 与 Exo2EgoSyn。

研究背景与动机

外中心到内中心(Exo2Ego)视频生成要求从一段第三人称(exocentric)视频出发合成同一场景的第一人称(egocentric)观测,它在机器人、AR/VR 等场景里很关键——系统需要在看不到自己手部动作的视角下,重建出可交互的第一人称体验。数据侧其实并不缺监督:Ego-Exo4D、Ego-ExoLearn 这类数据集同时提供了时间上同步的 exo 与 ego 双路视频以及逐帧相机位姿,所以过去的方法大多直接把它当作一个条件生成问题来做,差别只在"怎么条件化":PMYS 用两阶段管线先预测手部轨迹再生成 ego 视频,Exo2Ego-V 用 4 路 exo 视图加 PixelNeRF 的 3D 先验,EgoExo-Gen 依赖动作文本描述与 ego 首帧真值,Exo2EgoSyn 则用单张预测出的 ego 帧引导大模型并施加逐帧相机控制,见原文 Tab. 1 的结构化对比。

但这篇论文指出,同步这件事在给出配对监督的同时,也制造了两个让 Exo2Ego 与普通视频生成本质不同的不连续:视觉上,源视频末尾的 \(x_T\) 与目标视频开头的 \(g_1\) 之间视角跨度往往极大,形成一次突兀的时空跳变;几何上,源段末尾的相机位姿 \(p^x_T\) 与目标段开头的 \(p^g_1\) 可以相差很远,位姿轨迹本身是断的。而 TrajectoryCrafter、ReCamMaster 这类相机可控视频生成模型全部建立在"相机沿连续轨迹运动、画面平滑演化"的假设之上,遇到这种跳变自然崩掉。更棘手的是,常见设置里 exo 相机还是静止的(\(p^x_1=\cdots=p^x_T\)),几乎给不出多视角几何线索,模型必须在高度欠约束的条件下补出场景结构,这也是为什么之前的工作普遍要引入显式 3D 先验或额外的 HOI 标签。

本文的切入角度很干脆:既然不连续是同步本身带来的,就不要在"同步"这个框架里硬解它——用插值把一次大跳变拆成若干平滑的小步,并把插值当成深度推理的轻量代理:不去显式估计几何,而是通过中间帧把模型"领"到目标视角,即"深度未知,就经由插值到达目标"。核心 idea:把 Exo2Ego 从条件-输出建模重构成序列建模,用插值出的过渡段把 exo 与 ego 缝成一条连续信号,交给支持任意历史条件的扩散强迫(diffusion forcing)序列模型去生成。 这个重构不仅带来性能提升,而且因为公式与方向无关,同一个模型天然还能反向生成 Ego2Exo。

方法详解

整体框架

Syn2Seq-Forcing 要解的问题可以写成:给定 exo 视频序列 \(X=\{x_1,\dots,x_T\}\)、逐帧 exo 位姿 \(P_x\) 与逐帧 ego 位姿 \(P_g\),合成与 X 时间同步对齐的 ego 视频 \(G=\{g_1,\dots,g_T\}\)。与"以 X 为条件直接回归/扩散出 G"不同,本文把整件事看成一条连续信号的生成:先用一个冻结的帧插值器在最后一个 exo 帧 \(x_T\) 与第一个 ego 帧 \(g_1\) 之间造出过渡段 \(I\),把 exo 段、过渡段、ego 段首尾相接成单条时间流 \(S=(X,I,G)\),同时把位姿流补成 \(P=(P_x,P_i,P_g)\),其中 \(P_i\) 是插值出的过渡位姿轨迹。

建模交给 Diffusion Forcing Transformer(DFoT):它对序列里每一帧使用独立的噪声等级,"重噪帧"等价于被掩码掉的上下文、"轻噪帧"仍保留可用的历史信息,因此模型能接受任意长度、任意结构的历史条件;采样时还能用 CFG 式的历史引导在保真度、时序一致性与多样性之间做权衡(原文沿用了 HG-v / HG-t / HG-f / HG-tf 这几种历史引导形式)。训练阶段是一条离线数据构建加在线随机采样的流水线:先用冻结的 WFLF 把每对 \((X,G)\) 扩成三元组 \((X,I,G)\) 并缓存起来,训练时从这条三段序列里随机挑一段相邻转移来学;推理阶段则以干净的 exo 帧为前缀、拼接长度为 \(2T\) 的纯噪声后缀,一次去噪同时吐出过渡段 \(\hat I\) 与 ego 段 \(\hat G\)

%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
    A["输入:exo 视频 X<br/>位姿 P_x 与 P_g"] --> B["统一序列信号<br/>S = (X, I, G)"]
    B --> C["视频插值:冻结 WFLF<br/>由 x_T 到 g_1 生成过渡段 I"]
    B --> D["位姿插值轨迹<br/>Slerp 加线性, Plücker 嵌入"]
    C --> E["两阶段训练<br/>随机子任务分解"]
    D --> E
    E --> F["DFoT 逐帧独立加噪<br/>推理一次去噪 2T 帧"]
    F --> G["输出 过渡段 I 与 ego 段 G"]

关键设计

1. 统一序列信号:把 Exo2Ego 从"条件-输出"重写成一条连续序列

条件-输出范式把 X 当条件、G 当输出,模型看到的是"一条视频突然跳到另一个视角",这与视频扩散模型内建的平滑运动假设直接冲突,跳变处最容易出伪影。本文改而构造一条统一的时间流 \(S=(X,I,G)\) 与配套的位姿流 \(P=(P_x,P_i,P_g)\),让源、过渡、目标三段在同一个序列里彼此作为历史——过去的帧条件化未来的帧。选择 DFoT 作骨干并非随意:它对每帧施加独立噪声等级,等价于把"加噪"当成"掩码",于是历史条件的长度与结构都可以是任意的;采样时把无分支定义为"把历史全部加噪掩掉"、有条件分支定义为"保留选定的历史帧",就得到一个作用在历史维上的 CFG,可以调节生成结果偏向保真还是偏向一致。这个公式化有两个直接后果:一是采样时过渡段与目标 ego 段是在同一次去噪里被联合合成出来的,天然时间连贯;二是公式不含方向语义,把 \((X,P_x)\)\((G,P_g)\) 的角色对调就能反向生成,Ego2Exo 不需要改架构。

2. 视频插值:用冻结的 WFLF 造出过渡段的伪真值

真实数据里不存在"从 exo 视角一路走到 ego 视角"的过渡视频,于是模型没有任何中间状态可供学习,而这正是跳变的来源。本文的做法是请一个专门的帧插值器来代劳:取 \(x_T\) 为起点、\(g_1\) 为终点,用 WFLF(WAN2.2 First/Last Frame)生成中间的过渡帧,再把两个真实端点接回去,得到长度与 X、G 一致的过渡段:

\[I'=\mathrm{WFLF}(x_T,\ g_1,\ \text{prompt}),\quad |I'|=T-2,\qquad I=[x_T,\ I',\ g_1],\quad |I|=T\]

其中 prompt 是一个数据集特定的文本提示,用来引导插值内容。WFLF 本身建立在 Wan2.2-Lightning 的 8 步 LoRA 上、按 FLF2V(首末帧条件化)的方式使用,所以它是一个代价很低的插值器:不需要 CFG、步数极少,却能保住全局结构与时间一致性。关键的一点是 WFLF 在训练全程保持冻结,它的输出只作为伪真值监督,模型不需要、也没有真实过渡视频可依赖。这样做的收益是双重的:既把一段无法直接求解的大跳变外包给了一个擅长局部插值的模型,也让 ego 段的生成额外获得了一组指向目标视角的视觉线索——原文的消融证明,只插视频帧、完全不做位姿插值就已经带来大幅提升(Health 上 PSNR 从 13.54 升到 16.10),说明主导困难确实来自时空不连续本身,而不是条件信号的质量。

3. 位姿插值轨迹与 Plücker 嵌入:让相机几何也连续

视觉接上了不等于几何接上了:如果用真实的 \(p^x_T\)\(p^g_1\) 直接拼接位姿流,轨迹会在接缝处出现一次瞬移,而逐帧位姿条件化的模型对这种瞬移格外敏感。本文把每个位姿分解为内参 \(k\) 与刚体变换 \([R\,|\,\mathbf t]\),在归一化时间 \(\tau_j=(j-1)/(T-1)\) 上对两端做插值:

\[R^i_j=\mathrm{Slerp}\!\left(R^x_T,\ R^g_1;\ \tau_j\right),\qquad \mathbf t^i_j=(1-\tau_j)\,\mathbf t^x_T+\tau_j\,\mathbf t^g_1,\qquad p^i_j=\big(k^i_j,\ [R^i_j\,|\,\mathbf t^i_j]\big)\]

旋转用 Slerp 走 \(SO(3)\) 上的最短测地路径而不是逐元素线性插值,平移用线性插值,内参在整段里固定为 exo 内参,并强制边界一致 \(p^i_1=p^x_T\)\(p^i_T=p^g_1\),于是 \(P=(P_x,P_i,P_g)\) 成为一条在几何意义上真正连续的位姿轨迹。位姿具体以什么形式进入网络同样被消融过:本文比较了每帧 16 维的全局位姿向量、每像素 180 维的 ray encoding 与每像素 6 维的 Plücker 嵌入,Plücker 最好(Bike 上过渡段 PSNR 15.69,比全局位姿高 0.61、比 ray encoding 高 0.09)。合理的解释是逐像素的光线表示把"这个像素朝哪个方向看"显式编码进了特征,与"沿着插值帧逐像素逼近目标视角"的框架天然契合,而 16 维全局向量丢失了空间布局、只刻画了相机自身状态。

4. 两阶段训练与随机子任务分解:一个模型同时学两种转移

统一序列带来一个新问题:这条三段序列里其实藏着两个不同性质的转移——Exo→Interp 与 Interp→Ego,一次性端到端地学整条序列,等于让模型同时承受"跨视角对齐"和"接续插值轨迹"两种难度。本文因此采用预训练加微调的两阶段策略,并在微调阶段把序列显式拆成两个子任务,每一步随机二选一:

\[D=\big((X,I),\ (P_x,P_i)\big)\quad\text{或}\quad D=\big((I,G),\ (P_i,P_g)\big)\]

预训练阶段在 356k 个直连 Exo→Ego 片段上做(不含任何插值),目的是先获得一个强的初始化;微调阶段按类别各用 40k 视频、带插值地训练,让模型在这个统一框架里同时学会两种转移。这种随机分解的妙处在于它与 DFoT 的历史条件机制是咬合的:模型学到的不是"从 A 到 B 的映射",而是"给定任意一段历史如何续写下一段",于是推理时只要喂进干净 exo 帧并接上 \(2T\) 个噪声槽位,前 \(T\) 个槽位自然被去噪成过渡段 \(\hat I\)、后 \(T\) 个槽位被去噪成 ego 段 \(\hat G\),两段在一次去噪过程中一起生成。作者也指出,这个性质意味着把段落顺序反过来就能做 Ego→Exo,本文只做了初步探索。

损失函数 / 训练策略

训练目标就是序列模型上的标准扩散去噪损失:对统一序列的每一帧施加不同强度的噪声得到 \(S^n\),模型在位姿流 \(P\) 的条件下预测所加的噪声(等价地预测速度场):

\[\mathcal{L}=\mathbb{E}_{S,\,\epsilon,\,n}\left\|\epsilon-\epsilon_\phi\!\left(S^n,\ P\right)\right\|_2^2 \quad \text{⚠️ 缓存中该公式排版已损坏,此处按标准扩散强迫的写法表述,符号以原文为准}\]

两个阶段共用同一个目标。预训练在 356k 个无插值的直连 Exo→Ego 片段上跑 20 个 epoch(约 4 天,8×NVIDIA H200);微调在每类别 40k 视频上跑 150 个 epoch(同样约 4 天、8×H200),每个类别单独得到一个模型。数据预处理上,由于 WFLF 要求帧数满足 \(4n+1\),每段视频只采样 9 帧,采帧步长为 4 以保证足够的运动幅度,分辨率统一缩放到 \(256\times256\);测试集沿用 Ego-Exo4D 官方划分,并且只随机使用数据集提供的 4 路 exo 视频中的一路。实现细节、超参与 Ego2Exo 的设置被作者放进了补充材料。

实验关键数据

主实验

实验在 Ego-Exo4D 的 Bike(363 段)、Cooking(678 段)、Health(397 段)三个类别上进行,指标为 PSNR、SSIM 与 LPIPS(AlexNet 特征),沿用 Exo2Ego-V 的评测协议。公平起见,只对生成的 ego 段计算指标,过渡段不计入(否则会与方法设定不同的基线不可比)。数值取自原文 Tab. 2,统一保留两位小数。

方法 Health (PSNR↑/SSIM↑/LPIPS↓) Bike (PSNR↑/SSIM↑/LPIPS↓) Cooking (PSNR↑/SSIM↑/LPIPS↓)
TrajectoryCrafter [51] 14.31 / 0.418 / 0.562 14.01 / 0.341 / 0.600 13.76 / 0.373 / 0.600
Wan-FCtrl (Wan Fun Control) [1] 13.90 / 0.432 / 0.573 13.57 / 0.331 / 0.620 13.42 / 0.360 / 0.607
Wan VACE [19] 14.19 / 0.430 / 0.597 13.21 / 0.333 / 0.616 13.37 / 0.369 / 0.613
Exo2EgoSyn [31] 15.62 / 0.482 / 0.499 15.13 / 0.390 / 0.505 13.90 / 0.404 / 0.613
Ours (Syn2Seq-Forcing) 16.71 / 0.573 / 0.483 15.63 / 0.472 / 0.501 14.39 / 0.453 / 0.585

本文在三个类别、三个指标上全部领先。相对此前最强的 Exo2EgoSyn,Health 上 PSNR 高 1.09、SSIM 高 0.09、LPIPS 低 0.016;Bike 上 PSNR 高 0.50、SSIM 高 0.08。值得注意的是三个纯粹的"相机可控生成"基线(TrajectoryCrafter、Wan-FCtrl、Wan VACE)整体都落在 13.2–14.3 PSNR 区间,说明把已有视频的视角整体换到另一个视角这件事,与沿连续轨迹合成新视角并不是同一种能力。Exo2Ego-V 需要 4 路 exo 视图、EgoExo-Gen 没有公开实现,因此都未参与对比。

消融实验

插值的作用(原文 Tab. 3)。Exo2Ego-Direct 表示直接从 exo 预测 ego、不做任何插值;Exo2Ego-FI 只插视频帧、不做位姿插值(ego 位姿照用,其余位姿填零向量);Exo2Ego-FPI 同时插值与插位姿,即完整模型。

配置 Health (PSNR/SSIM/LPIPS) Bike (PSNR/SSIM/LPIPS) Cooking (PSNR/SSIM/LPIPS)
Exo2Ego-Direct 13.54 / 0.418 / 0.582 14.01 / 0.355 / 0.587 13.16 / 0.383 / 0.618
Exo2Ego-FI(只插视频帧) 16.10 / 0.543 / 0.490 15.12 / 0.441 / 0.539 14.21 / 0.440 / 0.590
Exo2Ego-FPI(帧+位姿,完整) 16.71 / 0.573 / 0.483 15.63 / 0.472 / 0.501 14.39 / 0.453 / 0.585

谁来插值、位姿怎么嵌入(原文 Tab. 4 / Tab. 5,均在 Bike 上,分别报告前 T 帧过渡段 INT、后 T 帧 ego 段 EGO)。

配置 Bike-INT (PSNR/SSIM/LPIPS) Bike-EGO (PSNR/SSIM/LPIPS)
WFLF 伪真值(本文) 15.69 / 0.475 / 0.502 15.63 / 0.472 / 0.501
DFoT 推理期原生插值 13.11 / 0.320 / 0.633 13.90 / 0.334 / 0.619
位姿嵌入 Global(16 维/帧) 15.08 / 0.459 / 0.512 15.02 / 0.457 / 0.518
位姿嵌入 Ray Encoding(180 维/像素) 15.60 / 0.474 / 0.510 15.57 / 0.473 / 0.505
位姿嵌入 Plücker(6 维/像素,本文) 15.69 / 0.475 / 0.502 15.63 / 0.472 / 0.501

关键发现

  • 插值本身贡献了绝大部分收益。Health 上从 Direct 到 FI,PSNR 一次跳了 2.56(13.54→16.10),而 FI 到 FPI 只再涨 0.61。这直接支撑了论文的核心论断:Exo2Ego 的主要瓶颈是同步引入的时空不连续,而不是条件信号不够强。
  • 位姿插值的收益更多体现在结构与感知一致性上。加上位姿插值后 SSIM 从 0.543 升到 0.573、LPIPS 从 0.490 降到 0.483,相对 PSNR 的涨幅更明显,说明几何轨迹连续之后画面在结构上更"顺",而不是单纯像素更准。
  • 过渡段的质量会传导到最终 ego 段。把 WFLF 换成 DFoT 自己的推理期插值后,不仅过渡段 PSNR 掉了 2.58(15.69→13.11),ego 段也被拖到 13.90(完整模型为 15.63)。也就是说,"谁来产生中间状态"不是无关紧要的工程细节。
  • 位姿表示有明确优劣。Plücker(逐像素 6 维)> Ray Encoding(逐像素 180 维)> Global(每帧 16 维)。Global 在过渡段落后 0.61 PSNR,说明把相机状态压成一个与空间无关的向量,在需要逐像素推断场景结构的任务里损失很大。
  • 类别难度排序一致:Cooking 对所有方法都最难(Ours 14.39),Health 最容易(16.71),Bike 居中;三类别上方法间的相对排序不变,说明结论不依赖单一类别。
  • 评测口径的边界:本文所有指标都只在 ego 段上计算,过渡段被排除,这是为了让不具备过渡能力的基线可比;因此表中数字不能读作"包含过渡段的完整序列质量"。

亮点与洞察

  • 把"同步"从便利条件重新识别成问题根源,这是全篇最有价值的一步。同步数据人人都在用,但很少有人指出正是同步制造了跳变;一旦这么看,解法(在两端之间插值)几乎是自明的。
  • 插值作为深度推理的代理很讨巧:不做任何显式几何估计、不要 3D 先验、不要 HOI 标签、单路 exo 视图,却让模型沿着中间帧"走"到目标视角,把一件欠约束的跨视角生成问题降解成一串平滑的子问题。
  • 伪真值构造不需要真实过渡视频:用一个冻结的现成插值器造监督信号,训练完就丢掉,工程上非常轻。
  • 一个公式同时覆盖两个方向:由于统一序列不含方向语义,Ego→Exo 只需交换段落角色,不需要改架构或重训一套模型。
  • 可迁移的思路:任何"两个不连续域之间做条件生成"的任务(跨传感器、跨模态、跨视角、甚至视频编辑里的时段跳变)都可以插入一段由现成模型生成的中间态,把大跳变拆成小步;同时把它作为伪真值而不是推理期组件,能避免把慢速模型的延迟带进最终系统。

局限与展望

  • 规模很小,结论的外推要谨慎:每段视频只有 9 帧、分辨率 \(256\times256\)、单数据集(Ego-Exo4D)三个类别,所谓"长序列"能力实际上没有被验证;作者也承认 Ego2Exo 只是"简要探索",正文没有给出对应的量化结果。
  • 性能上界被插值器锁住:过渡段是 WFLF 生成的伪真值,其误差会经序列条件传导到 ego 段(Tab. 4 里换插值器导致 ego 段掉 1.7 PSNR 就是证据),而 WFLF 的质量又依赖数据集特定的 prompt。换更强或更弱的插值器会怎样,论文没有系统研究。
  • 过渡段长度被写死为 T,与 exo、ego 段等长,既不是自适应也没有讨论"插多少帧才够"这个显然重要的问题。
  • 评测指标偏窄:只有 PSNR/SSIM/LPIPS 这类逐帧保真度指标,没有 FVD 之类分布级/时序一致性指标,也没有用户研究;而逐帧指标高并不等价于时序稳定(本文的卖点恰恰是时序平滑)。
  • 成本不低:每个类别都要单独用 40k 视频微调 150 个 epoch、8 张 H200 跑约 4 天,跨类别/跨数据集的泛化性完全没有报告。
  • 可改进的方向:让过渡段长度或数量自适应地由位姿跳变幅度决定;对过渡段与 ego 段的损失分别加权以减弱伪真值误差的传导;把 WFLF 换成更强的插值/生成模型并周期性刷新伪真值(类似自训练);补上 FVD 与长时域(几十上百帧)实验来支撑"序列建模"的主张。

相关工作与启发

  • vs Exo2EgoSyn [31]:两者都面向 Exo2Ego,但思路相反。Exo2EgoSyn 复用大规模预训练视频生成器,靠一张预测出的 ego 帧引导生成并施加逐帧相机控制(与该模型时间耦合的注意力机制其实并不匹配逐帧控制);本文则训练一个更适合逐帧位姿条件的 DFoT,用完整 exo 视频作输入,并且要求记录里唯一的"能生成 exo→ego 过渡"的方法(原文 Tab. 1)。代价是本文仍需要两路相机位姿,而 Exo2EgoSyn 用了 4 路 exo 视图。
  • vs Exo2Ego-V [26]:他们依赖 4 路 exo 视图加 PixelNeRF 式的 3D 先验来补几何;本文只用单路 exo、不含任何显式 3D 表征,用插值充当几何推理的替身——更省输入,但也就放弃了多视图带来的真实几何约束,在 exo 相机静止的场景下属于"以平滑换精度"。
  • vs EgoExo-Gen (X-Gen) [48]:他们需要动作文本描述与 ego 首帧真值,无公开实现,本文实验因此无法与之直接比较(原文明确说明省略原因),读者不应把本文的领先读作"胜过 EgoExo-Gen"。
  • vs 相机可控生成方法(TrajectoryCrafter [51]、Wan-FCtrl [1]、Wan VACE [19]、ReCamMaster [2] 等):这些方法都是在生成过程中跟随一条连续的相机轨迹,擅长"新轨迹渲染",但不解决"把一段已有视频整体换视角"的问题;Tab. 2 中它们普遍低 2 分以上的 PSNR,印证了任务差异而非单纯的能力差异。
  • vs DFoT / History Guidance [41]:本文没有改动 DFoT 的机制,而是把它的"任意历史条件"能力用来承载一条被插值接长的序列——这也说明该骨干的适用面比原文演示的任务更宽。

评分

  • 新颖性: ⭐⭐⭐⭐ 把同步识别为问题根源、并用插值把条件-输出重构为序列建模,视角清晰且自洽;但"用帧插值搭桥"本身操作简单,创新更偏概念层面而非技术层面。
  • 实验充分度: ⭐⭐⭐ 三个类别、四组对比与两组消融,且消融直击核心论断;但仅 9 帧/256 分辨率、单一数据集、无 FVD 与用户研究,Ego2Exo 只有口头宣称而无正文数据。
  • 写作质量: ⭐⭐⭐⭐ 动机链条清楚,Fig. 1 把"跳变导致失败"讲得很直观,Tab. 1 的结构化对比有信息量;不足是若干实现细节与 Ego2Exo 结果被推给补充材料,部分公式在缓存中排版损坏。
  • 价值: ⭐⭐⭐⭐ 提供了通用、易复用的重构范式(插值桥 + 序列建模 + 伪真值),对跨视角视频生成有启发;实际落地仍受限于逐类别微调的成本与 256 分辨率的规模。