FlexTraj: Image-to-Video Generation with Flexible Point Trajectory Control¶
会议: CVPR 2026
论文: CVF Open Access
代码: 项目页
领域: 视频生成
关键词: 图像到视频生成, 轨迹控制, 点轨迹表示, 序列拼接条件注入, 退火训练
一句话总结¶
FlexTraj 用一套带轨迹ID/分割ID/可选颜色的统一点轨迹表示,配合"高效序列拼接"的条件注入和"密度-对齐退火"训练课程,让单个图像到视频模型同时支持稠密、空间稀疏、时间稀疏乃至非对齐的多粒度轨迹控制,在 DAVIS / FlexBench 上轨迹误差与视频质量都显著优于现有专用方法。
研究背景与动机¶
领域现状:扩散视频生成(Sora、CogVideoX、Wan)画质已经很强,但"可控性"仍是公开难题。为了让用户能指定运动,前人引入了各种条件信号——深度图、边缘、框、mask、人体姿态等,但这些都只对应单一控制粒度。点轨迹(point trajectory)天生不同:通过调节采样密度,它能在"稠密稠到每个像素"和"稀疏到几个拖拽点"之间连续滑动,理论上是统一各种控制粒度的理想载体。
现有痛点:可惜这个潜力一直没被吃透。大多数点轨迹方法(DragNuwa、ToRA)只做 2D 拖拽;少数扩到 3D 的也只能二选一——要么只支持稀疏(LeviTor)、要么只支持稠密(DAS)。最近的 Motion Prompting 想统一稀疏/稠密,做法是推理时用手工模板把稀疏信号"densify"成稠密,但模板是人工设计的、模型本身没在多样条件下训练过,精度和灵活性都受限。更要命的是:几乎所有方法都假设输入运动和首帧严格结构对齐,一旦用户给的运动来自另一个角色、或者只是几个粗糙立方体(CG 场景),它们就崩。
核心矛盾:一个模型要同时学会"稠密且对齐"(高确定性,应该收敛快)和"稀疏且非对齐"(高灵活性,参数搜索空间大),这两种需求是相互拉扯的——直接把各种任务随机混在一起训练,模型在两种矛盾的监督信号间摇摆,收敛很差。
本文目标:造一个真正"多粒度 + 不依赖对齐"的统一轨迹控制框架,覆盖前人各自只能做一块的全部任务(稠密 / 空间稀疏 / 时间稀疏 / 非对齐)。
切入角度:作者拆成三个子问题——(1) 找一个足够表达力、能保持时序对应、还能容纳新出现的点的点表示;(2) 找一个在 DiT 主干上既可控又能容忍非对齐、还省算力的条件注入方式;(3) 找一个能让单模型稳定学会所有粒度的训练课程。
核心 idea:用"TrajID + SegID + 可选 Color"三属性的统一点表示渲染成两张条件视频,用 LoRA 加持的高效序列拼接把条件 token 注入 DiT,再用从稠密对齐逐步退火到稀疏非对齐的课程把它训出来。
方法详解¶
整体框架¶
FlexTraj 的输入是一张首帧图 + 文本 prompt + 一组带标注的 3D 轨迹点(来自真实视频跟踪或 CG 场景),输出是受这些轨迹控制的视频。整条管线分三步:先把 3D 轨迹点编码成两张条件视频(ID-coded 视频和 Color-cue 视频),这一步通过对点做稀疏化/平移就能模拟空间稀疏、时间稀疏、非对齐等各种控制;再用预训练 VAE 把两张条件视频压成 token,经"高效序列拼接 + LoRA"注入冻结的 DiT 视频生成器;最后靠"密度-对齐退火"课程把这个统一模型训练出来。三步分别对应论文的 §3.1 / §3.2 / §3.3,也正是下面三个关键设计。
%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
A["3D 轨迹点<br/>(真实视频 / CG 场景)"] --> B["统一点轨迹表示<br/>TrajID+SegID+可选Color<br/>→ ID-coded & Color-cue 条件视频"]
B -->|稀疏化 / 平移模拟<br/>多粒度+非对齐| C["VAE 编码为条件 token"]
C --> D["高效序列拼接注入<br/>LoRA + 条件掩码 + KV cache"]
E["首帧图 + 文本 prompt"] --> D
D --> F["冻结 DiT 视频生成器"]
F --> G["输出受控视频"]
H["密度-对齐退火训练<br/>稠密对齐→稀疏→非对齐"] -.训练课程.-> F
关键设计¶
1. 统一点轨迹表示:用三属性点把"谁、何时、长啥样"一次编码完
痛点很具体:基于光流或高斯图的表示缺乏显式时序对应(同一个点跨帧对不上号),而 DAS 那种"首帧颜色传播"的表示因为点身份在初始化时就固定了,无法表示后面新出现的点(比如人转头露出来的脸)。FlexTraj 给每个点 \(p^t_i = (x^t_i, y^t_i, z^t_i, s_i, u_i, a_i)\) 挂三个属性:分割ID \(s_i\) 区分不同物体实例、轨迹ID \(u_i\) 在实例内索引具体哪个点、可选颜色向量 \(a_i\) 编码外观。然后把这些标注点投影回像素空间渲染成两张条件视频——ID-coded 视频 \(V_{ID}\) 把 SegID 放红通道、TrajID 放绿蓝通道,Color-cue 视频 \(V_{Color}\) 记录可选颜色。妙处在于:TrajID 保证了跨帧对应(解决时序),SegID 让新出现区域知道自己属于哪个实例(解决新点),而控制粒度只是采样密度的函数——采得稠就是稠密控制、采几个点就是稀疏控制,全部投影成同一种条件视频格式,天然统一了不同粒度。颜色属性是"可选"的:相机重定向等需要外观线索时才给,平时省略,模型两种情况都能处理。
2. 高效序列拼接条件注入:用注意力交互代替 ControlNet 的结构对齐绑定
把条件 token 塞进生成模型不是小事。最直觉的 ControlNet 式注入在 DiT 主干上可控性差,而且它隐式强制结构对齐——条件和首帧必须对齐,这正好和"支持非对齐"的目标冲突。另一头,朴素的序列拼接虽然灵活,但训练时计算量爆炸。FlexTraj 的折中是"高效序列拼接":先用 CogVideoX 的预训练 VAE 把两张条件视频编码成 \(Z_{ID}, Z_{Color}\),再用零初始化线性投影 \(W\) 融合成 \(Z_c = Z_{ID} + W Z_{Color}\)(零初始化保证外观线索"加进来"而不冲掉结构信息),然后把条件 token 和噪声 token \(Z_n\)、文本 token \(Z_t\) 拼成统一序列 \(Z = [Z_n; Z_t; Z_c]\),并让 \(Z_c\) 复用 \(Z_n\) 的位置编码以保留空间对齐线索。微调上只用 LoRA:在 DiT 的 QKV 投影上加低秩更新 \(Q_c = Q + \Delta Q_c\)(K、V 同理),且只在处理条件 token 时启用,冻结底座保住生成能力,按标准扩散目标 \(L_{diff} = \mathbb{E}\big[\|\epsilon - \epsilon_\theta(x_t, t, Z)\|_2^2\big]\) 优化。关键在于:条件通过注意力交互而非直接相加进入生成,所以不强求严格对齐,天然容忍非对齐输入。再借鉴 EasyControl 加一个条件掩码——让条件 token 不去 attend 噪声/文本 token(\(M_{ij} = -\infty\) 当 \(i \in Z_c, j \in Z_n \cup Z_t\),否则为 0),而反向查询允许。由于条件 token 跨时间步固定,它们的 \(K_c, V_c\) 可以在 \(t=0\) 算一次后缓存复用,推理省下约 50% 算力。
3. 密度-对齐退火训练课程:从最确定的稠密对齐一步步退火到稀疏非对齐
为什么需要这个?作者一开始想偷懒——把不同类型条件随机混着采样训练,结果很差。原因是参数搜索空间被撑大了:稠密对齐输入确定性强、好学,而非对齐输入需要很大灵活性,两者对模型提出相反的要求,混在一起难以稳定收敛。FlexTraj 改成四阶段课程:(1) 先在最确定的稠密+对齐设置下训,ID-coded 和 Color-cue 两张视频都齐全,信息最丰富、收敛最快;(2) 仍然稠密,但以概率 \(p_c\) 随机丢掉 Color-cue 视频,稠密的确定性保证收敛稳定;(3) 模型在稠密上稳住后,逐步引入空间和时间稀疏——空间稀疏靠随机丢轨迹或按段丢、只保留比例 \(p_s\),时间稀疏靠只保留 \(p_t\) 的帧(均匀或随机选);(4) 最后才训非对齐,把轨迹相对输入帧做平移,并降低学习率以缓解对前面已学能力的灾难性遗忘,还从 CG 场景合成非对齐轨迹对来增加变化。这条"从易到难、从确定到灵活"的退火路线,让单个模型平滑地泛化到各种稀疏度和对齐程度。
损失函数 / 训练策略¶
训练目标就是标准扩散去噪损失(式 6),底座 DiT 全程冻结、只学 LoRA 低秩更新和零初始化融合投影 \(W\)。训练数据约 4 万真实视频(VideoPainter)+ 2.5K 舞蹈视频(HumanVid)+ 5K CG 合成视频(Mixamo,含同姿态不同角色用于造非对齐对),轨迹标注用 SAM 做视频分割 + SpatialTracker 做稠密点跟踪自动生成。
实验关键数据¶
主实验¶
在 DAVIS 和自建 FlexBench 上跨四个任务对比,FVD 越低越好、Consistency / TrajSIM 越高越好、TrajErr 越低越好(每格为 DAVIS(FlexBench)):
| 任务 | 方法 | FVD↓ | Consistency↑ | TrajErr / TrajSIM |
|---|---|---|---|---|
| 稠密 | DAS | 714.3 (1338.8) | 0.981 | 0.029 |
| 稠密 | MagicMotion | 705.3 (1621.0) | 0.980 | 0.116 |
| 稠密 | Ours | 532.4 (1397.8) | 0.979 | 0.017 |
| 空间稀疏 | ToRA | 1233.3 (1210.2) | 0.974 | 0.058 |
| 空间稀疏 | LeviTor | 1337.3 (1944.2) | 0.951 | 0.050 |
| 空间稀疏 | Ours | 710.4 (851.6) | 0.980 | 0.025 |
| 时间稀疏 | SparseCtrl | 2533.4 (2949.8) | 0.967 | 0.087 |
| 时间稀疏 | MagicMotion | 1054.4 (1719.4) | 0.978 | 0.100 |
| 时间稀疏 | Ours | 837.0 (1144.8) | 0.983 | 0.031 |
| 非对齐 | DAS | 773.9 (2716.3) | 0.979 | TrajSIM 0.861 |
| 非对齐 | Ours | 622.3 (2654.2) | 0.976 | TrajSIM 0.908 |
跨四个任务,FlexTraj 几乎都拿到最低 TrajErr / 最高 TrajSIM 和最优/次优 FVD;Consistency 偶尔略低,作者解释是它生成的视频运动幅度更大,这个指标天然会被大运动拉低。
消融实验¶
DAVIS 上结果记为 Aligned | Unaligned:
| 配置 | FVD↓ | Consistency↑ | TrajErr↓ | TrajSIM↑ | 说明 |
|---|---|---|---|---|
| w/o TrajID(CorrID) | 668.2 | 606.0 | 0.982 | 0.976 | 0.029 | 0.904 | 去轨迹ID,时序对应模糊 |
| w/o SegID | 707.9 | 636.6 | 0.982 | 0.976 | 0.040 | 0.895 | 去分割ID,实例混淆 |
| ControlNet | 1083.2 | 1098.4 | 0.988 | 0.988 | 0.131 | 0.556 | 换回 ControlNet 注入 |
| RandomMix | 1034.6 | 1003.8 | 0.993 | 0.993 | 0.126 | 0.588 | 随机混合训练 |
| Sparse2Dense | 1030.0 | 987.6 | 0.987 | 0.987 | 0.126 | 0.592 | 稀疏转稠密的反向课程 |
| Ours (Full) | 693.3 | 622.25 | 0.981 | 0.976 | 0.024 | 0.908 | 完整模型 |
关键发现¶
- 条件注入方式贡献最大:换回 ControlNet 后 TrajErr 从 0.024 暴涨到 0.131、非对齐 TrajSIM 从 0.908 跌到 0.556,证明 ControlNet 的对齐偏置正是非对齐场景崩坏的根源。
- 训练课程不可省:RandomMix 和 Sparse2Dense(反向课程)的 TrajErr 都飙到 0.126 左右,说明"从稠密对齐退火到稀疏非对齐"的顺序本身是关键,反着来或随机来都学不好。
- TrajID/SegID 各司其职:去掉 TrajID 时形状还在但点对应错乱、旋转方向错;去掉 SegID 时两个相向的人会被错误合并;去掉 Color 时实例分对了但外观跑偏。
- 泛化性:换到 Wan2.2 主干同样有效,且在更长序列上潜力更大;5B 的 Wan2.2 版本在 MoveBench 上 FID 甚至超过 14B 的 Wan-Move。
亮点与洞察¶
- "控制粒度 = 采样密度"的统一视角很漂亮:把稠密/稀疏/时间稀疏全部塞进同一种"投影成条件视频"的格式,模型无需为每种粒度单独设计输入,这个抽象是它能"一个模型通吃"的根本原因。
- 三属性点表示同时解决两个老问题:TrajID 管时序对应、SegID 管新出现的点,正好补上了光流表示和颜色传播表示各自的硬伤,而且只是给点多挂两个整数。
- 非对齐能力来自"注意力交互而非直接相加":把"为什么 ControlNet 不行"想透了——它的加法注入隐式绑定结构对齐,改成序列拼接让条件通过 attention 被"查询",对齐就从硬约束变成软线索,这个洞察可迁移到其他需要容忍输入失配的条件生成任务。
- 条件 token 跨时间步固定 → KV cache 省 50%:一个很实用的工程 trick,条件不随去噪步变化的场景都能套用。
局限与展望¶
- 评测主要在 DAVIS / FlexBench / MoveBench 上,且 Consistency 指标在大运动下天然偏低,作者用"运动更大"来解释偏低,缺少更解耦的运动质量度量。
- 轨迹标注依赖 SAM + SpatialTracker 自动生成,跟踪/分割误差会传导进训练监督,论文未量化这部分噪声的影响。
- 非对齐能力很大程度依赖 CG 合成的非对齐轨迹对,真实世界中"语义对应但结构差异大"的非对齐分布是否被充分覆盖存疑。
- 四阶段退火课程的各阶段切换点、丢弃概率 \(p_c/p_s/p_t\) 等超参看起来需要手工调,自动化或自适应课程是可改进方向。
相关工作与启发¶
- vs DAS:同为 3D 稠密点轨迹控制,DAS 用首帧颜色传播保时序一致,但点身份在初始化时固定、无法表示新出现的点;FlexTraj 用 TrajID+SegID 显式编码身份,既保时序又容纳新点,且额外支持稀疏和非对齐。
- vs LeviTor:LeviTor 把分割 mask 聚成稀疏点 + 深度,但点之间缺乏对应、且 U-Net 主干限制了性能;FlexTraj 在 DiT 上做、点带显式对应,稀疏控制下 FVD(710 vs 1337)和保真度都更好。
- vs Motion Prompting:它推理时用手工模板把稀疏信号 densify 来"统一"稀疏/稠密,模板人工设计、模型未在多样条件下训练;FlexTraj 直接用退火课程把多粒度训进单模型,精度和灵活性都更高。
- vs MagicMotion:MagicMotion 用 mask/box 做稠密和稀疏,但两者离散不连续、只支持物体级 2D 运动;FlexTraj 用连续点轨迹,支持部件级和 3D 控制(遮挡、旋转)。
评分¶
- 新颖性: ⭐⭐⭐⭐⭐ 首个同时支持多粒度+非对齐的轨迹控制框架,统一点表示和退火课程都有原创性
- 实验充分度: ⭐⭐⭐⭐ 四任务对比 + 完整消融 + 跨主干泛化,但部分指标解释偏定性
- 写作质量: ⭐⭐⭐⭐⭐ 三个子问题→三个设计的结构清晰,动机和取舍讲得透
- 价值: ⭐⭐⭐⭐⭐ 给可控视频生成提供了一套可统一多种控制粒度的实用范式,对 CG/创作流程意义明确