FrameForge:让模型自己决定参考图离结果图多远的图像生成方法

速览

三种任务需要的改动幅度不同,同一任务内部也宽到无法事先指定

FrameForge 要回答的问题是:一个模型同时做保主体、跟边缘、按指令改图这三件事,真正的难点在哪里。它的答案是,难点不在"多任务"本身,而在"条件图与结果图之间该隔多远、该怎么一步步变过去"这两件事,过去被固定成了常量。作者冻结一个视频扩散模型,只训练一个共享 LoRA(182M 可训练参数)和一个路由器,用两个模块分别回答这两个问题。三个基准上,它总体上领先开源对比方法,编辑总分仍低于闭源系统。

统一条件图像生成指的是同一个模型处理多种带图条件的任务:给一张参考图和一句文本,既要保住该保的部分,又要改出该改的部分。三类任务的差别并不只是"指令不同",它们要求的改动幅度本身就不一样。

任务要保留什么要改什么本文的评测方式
主体驱动生成参考图中主体的身份场景、姿态、背景按文本重画DreamBench 的 30 个主体 × 25 条提示,用 VIEScore 的 SC/PQ/O 重评
Canny-to-Image边缘图给出的结构外观、颜色、材质自由生成COCO2017 验证集 5,000 张,测 FID / SSIM / CLIP-T
指令编辑指令没有提到的内容只改指令指到的部分GEdit-Bench 的 11 类、606 条英文样本,SC/PQ/O

这三个任务的任务定义分别来自 DreamBooth、ControlNet 和 GEdit-Bench,但评测数据与评分协议并不都沿用原论文:编辑任务沿用了 GEdit-Bench 的官方协议,主体驱动与 canny 两项的具体评测设置是本文自己定的(见上表),与各自原论文的评测协议不同。也就是说,沿用的是三者的任务定义,不是三套完整的基准与协议。

论文的第一张图把"改动幅度"变成了可测量的量。横轴是条件图与结果图之间的 LPIPS 距离,纵轴是密度。上半部分是从自然视频里按不同时间间隔抽出的帧对,间隔从 0 到 121 帧,蓝色分布带覆盖了很宽的一段距离。下半部分是三条任务曲线,各自的垂直虚线标出中位数。

图注:上半部分统计自然视频不同时间间隔帧对的 LPIPS 距离分布,附火车视频按 0/25/49/73/97/121 帧抽样的六帧;下半部分是编辑、主体驱动、Canny-to-Image 三条条件到目标的 LPIPS 分布,虚线为中位数。三条曲线中位位置不同,区间大幅重叠,也与上半部分重叠。FrameForge

这张图真正要读的是重叠,不是差异。三条曲线的中位数位置确实不同,编辑那条更靠左,主体驱动与边缘控制更靠右。但三段区间大面积叠在一起,同一个"改动幅度"的数值可能来自任何一个任务,单看任务标签无法反推该改多少。论文由此推出一个关键结论:按任务分组、给每个任务配一套参数,天生不够用,因为同一任务内部的跨度就已经宽到彼此覆盖。要让模型看输入自己决定改多少,才可能用一个共享的适配器覆盖全部三类任务。

现有做法把条件与目标钉死在固定位置,任务差异只能靠换适配器吸收

把图像生成改写成"预测视频的下一帧",是过去两年一条清晰的技术路线。这条路线上的工作各有各的改动,但有一个共同点:条件与目标在时间轴上的相对位置对所有样本恒定。RealGeneral 把条件图当第 1 帧、目标图当第 2 帧;ChronoEdit 把输入钉在 t=0、输出钉在 t=T=8,中间再插 6 个显式的中间 latent;iMontage 把输入集放在时间索引 0 到 7、输出集放在 24 到 31,中间留一段空档 iMontage。三种排布互不相同,那个偏移量却都是常量。

图注:RealGeneral 总览。条件帧与加噪目标帧分别经 3D VAE 编码,统一条件嵌入并入文本主体与任务先验,三组 token 拼成一条序列进入 DiT 块;块内三分支 adaLN 分别调制文本、条件、目标,掩码切断文本与条件的直接交互。RealGeneral

值得注意的是,这张图里的模块没有一个是用来调"两帧隔多远"的。三分支 adaLN 解决的是三类 token 的特征调制互相干扰,注意力掩码切断的是文本与条件之间的通路,图上也根本没有时间轴。它调的是"谁看得见谁",不是"隔多远"。FrameForge 的两个模块恰好一件管位置、一件管连通性,这个区分正是它的切入点。

固定偏移在这条路线上没有立刻变成问题,原因是适配器。RealGeneral 给每个任务单独训一套 LoRA(892M 可训练参数),任务之间的冲突被"换一套权重"吸收了。FrameForge 在引言里的批评是,固定时间位置导致跨任务、跨样本都相同的位置关系,这个批评成立有一个前提:适配器必须从"每任务一套"收成"一套共享"。一旦共用一套权重,固定偏移的代价就无处转移,只能由模型自己消化。本文实验的起点正是这里:先把适配器收成一套共享的,任务干扰立刻显形。

时间坐标本来就能随手指定,MoTE 让模型每个去噪步自己挑一个间隔

要理解 MoTE,先要接受一个底座事实:在视频 DiT 里,时间位置只是 3D-RoPE 网格里的一个整数索引,它不需要对应任何真实帧。改这个索引,改的是模型眼里两张图隔多远,不是从视频里抽出一帧。

FrameForge 冻结的底座是 HunyuanVideo 1.5 的第一阶段视频模型 HunyuanVideo 1.5。它的 3D 因果 VAE 在时间维做 4 倍压缩,帧数与 latent 帧数的换算是 (T-1)//4+1。121 个像素帧对应 31 个 latent 帧,69 对应 18,17 对应 5。MoTE 的三档 latent 跨度 {5, 18, 31}(对应虚拟间隔 $\Delta_e=s_e-1$,即 4/17/30)与视频帧跨度 {17, 69, 121} 正好对应这套换算的结果,说明这些数字是按底座真实的 latent 网格刻度取的,不是随手定的整数。

图注:FrameForge 总览。文本、条件、reasoning、目标四组 token 进入同一条 MM-DiT 序列;左侧 MoTE 由 Router 选出 Top-1,从三个时间 RoPE 专家中取一个注入注意力,专家标注 1 至 17、1 至 69、1 至 121;雪花为冻结,火焰为可训练;右侧是推理瓶颈掩码的分组矩阵。FrameForge

MoTE 的三个专家是三套不同的时间 RoPE 配置,对应三个虚拟间隔,不是三个子网络。条件固定在 $t=0$,目标放在 $t=s_e-1$,两者的虚拟间隔就是 $\Delta=s_e-1$。路由的做法是:把文本、条件、当前步的噪声目标 token 表示拼起来,算出每个 token 对三个专家的 logits,在有效 token 上做掩码平均池化得到一个样本级的分布,softmax 之后取 Top-1。前向走硬选择,反向通过直通估计器把梯度送回软概率。训练时另加一个批级负载均衡损失,权重 0.01,防止所有样本都塌到同一个专家。推理时每个去噪步都重新路由一次。

这里换的不是模型,是尺子。三档专家共用同一套主干权重,差别只在注入注意力的时间位置编码;Top-1 选中的是"用哪一把尺子量这段距离",不是"调用哪个子模型"。所以它既不是三个独立模型投票,也不是把视频截断到某一帧。整篇论文里最容易混淆的一处就在这里,把"虚拟间隔"读成"抽帧",后面所有关于 MoTE 的结论都会跟着错。

讲解:换的是尺子,不是抽帧

路由曲线说明这个选择确实在变。如果每个任务固定一档,三条曲线在 50 个去噪步里应该是平的。

图注:MoTE 在编辑、主体驱动、Canny-to-Image 三个任务上的路由行为。横轴为去噪步 0 到 50,纵轴为专家平均使用比例,Gate 0/1/2 对应短、中、长间隔专家。Canny 早期长间隔最高并缓慢回落;另两个任务早期偏中、后期转向短,编辑迁得更早更陡。FrameForge

实际曲线是:Canny 早期偏长间隔,因为条件与目标的距离最大;编辑与主体驱动在目标还被噪声主导时偏好中间隔,随着目标内容浮现转向短间隔,编辑的迁移更早也更陡,对应它需要更强地保留源图内容。论文的原话是专家选择在响应不断变化的目标表示,而不是给每个任务分配一个固定间隔。这也是为什么路由必须每步重算:一个样本在去噪早期和后期需要的尺子并不一样。

把它和另外两条路线区分开也有必要。TAG-MoE 也是稀疏专家,但它的专家在 FFN 上,由任务语义门控,动的是共享特征处理的参数 TAG-MoE;MoTE 只选时间 RoPE 配置,主干参数完全不动。OminiControl 走的是图像侧拼条件 token 的路线,位置规则按任务手工指定,根本没有"间隔"这个可调量 OminiControl。这两条路线都不是本文的基线,放在这里只是为了说明 FrameForge 的新颖性落在"位置先验的输入自适应"这一维。

中间态既不给监督也不解码,靠把注意力掐成一条窄路逼出变换过程

CoTR 要回答的是另一半问题:条件怎么一步步变成目标。它的做法是在条件与目标之间插一个标准高斯初始化的 latent,空间与通道维和视觉 latent 相同,既不被显式监督,也不被解码,只靠 MM-DiT 块里的注意力被逐步填充。 ChronoEdit

ChronoEdit 提供了一个很直观的对照。它的中间态是真正去噪出来、可以被 VAE 解码、可以看见的视频帧。

图注:ChronoEdit 的时序推理轨迹可视化。两行独立示例都从左到右排列,蓝框为参考图,橙框为解码出的中间推理帧,绿框为最终目标帧;上行是猫走向并跳上长椅,下行是一只手在托盘上摆放巧克力蛋糕。这些中间帧可以被看见、语义明确,代价是要真的把它们去噪出来。ChronoEdit

显式中间态可解释,但成本随保留步数上升。ChronoEdit 在 2 张 H100 上,不保留中间帧时 30.4 秒,保留 10 步 35.3 秒,保留 50 步 55.5 秒。FrameForge 的选择是把中间态压成一个看不见的 latent,省掉解码与保留的开销,代价是失去了可解释性。

一个随机初始化、不被监督的 latent 之所以能承载"条件如何变成目标",靠的是掩码造成的结构约束。在自注意力里,目标 token 与文本、条件 token 之间的直接注意力被置为负无穷,只留下中间态作为桥。条件信息想影响目标,只能先汇进这个 latent,再从它流向目标。

讲解:条件信息只能走中间态这座桥

这个约束只改连通性,不改位置。掩码决定谁看得见谁,MoTE 决定两组 token 在时间轴上隔多远,两者作用在不同层面。这一点论文自己写得很明确,如果不单独说一次,两个模块很容易被读成一个东西。训练分三步:先只训 router,再加入 reasoning latent、联合优化 router 与 LoRA 并随机施加掩码,最后恢复全注意力继续联合优化,与推理时的配置保持一致。掩码在第二阶段以 0.5 的概率施加。

中间态的数量也做过消融。1 个最好,编辑分 6.12;2 个掉到 5.62,3 个掉到 5.09。论文的解释是没有中间监督时,更多 latent 会放大欠约束的变换空间,把训练信号分散掉。需要诚实标注的是,论文并没有直接测量"条件信息确实全部经由这个 latent 传递",它给的是掩码规则与训练目标层面的一致性论证,没有注意力占比或通路消融一类的证据。所以更准确的说法是:这个隐中间态之所以能承载变换过程,靠的是注意力被掐成一条窄路这种结构性约束,而不是它学到了什么可解释的中间表示。

两个模块合用才补回编辑掉的分,而这点优势只在同条件对照里成立

全篇最干净的因果证据是一组消融,不是主表。它同时说明了两件事:任务干扰是真实存在的,两个模块是互补的。

配置主体驱动 O ↑Canny FID ↓编辑 Overall ↑
每任务一套 LoRA0.67625.225.99
一套共享 LoRA0.72225.784.94
共享 + MoTE0.71925.625.77
共享 + CoTR0.72625.945.56
两者合用0.73923.476.12

从每任务一套换成一套共享的,主体驱动从 0.676 升到 0.722,编辑却从 5.99 掉到 4.94。这个方向相反的移动就是"任务互相干扰"的可测证据,不是修辞。单独加 MoTE 把编辑拉回 5.77,单独加 CoTR 拉到 5.56,都还不到任务专用时的 5.99;只有两者合用才越过去,到 6.12,同时 Canny 的 FID 也从 25.78 降到 23.47。这条链条比任何主表分数都更能说明两个模块各自在补什么。

主表的结果要按各自的底座来读。DreamBench 上 FrameForge 的 O 是 0.739,略高于 ChronoEdit 的 0.729,但主体一致性 SC 是 0.739,低于 ChronoEdit 的 0.757。Canny 任务上 SSIM 0.447 是全表最高,FID 23.47 却高于 ControlNet 的 20.42。GEdit 的 Overall 是 6.12,高于 ChronoEdit 的 5.08,但仍明显低于闭源系统的 7.81 到 8.01。论文摘要的措辞是对比方法中的较好表现,这个限定语需要保留,不能读成全面领先。FrameForge

跨底座的证据只有一次。在更早的 HunyuanVideo 1.0 上,相对同一底座上的共享 LoRA 基线,三项指标都变好:主体驱动 0.699 到 0.736,Canny FID 24.52 到 23.07,编辑 4.38 到 5.00。这支持"方法不只对一个底座有效",但一次复现不足以支撑"与底座无关的通用插件"。三张主表里各方法的底座本来就不同,跨底座的分数差只能当参考,唯一严格同条件的对照就是这一组。

这些分数还有一个共同的来源问题:它们大多是 MLLM 打出来的。VIEScore 的统计显示,GPT-4o 零样本评分与人类互评的排序相关性约 0.40,人类之间约 0.46;编辑类更弱,文本引导编辑 0.3821 对 0.4184,主体驱动编辑 0.3268 对 0.4747 VIEScore。按 VIEScore 的总分公式推算,O 变化 0.01 大约对应 10 分制子项上 0.2 分的移动,这个换算是推导值,不是论文结论。也就是说 0.739 与 0.729 这种量级的差落在评分抖动带内,不足以写成显著超越;GEdit 上 6.12 对 5.08 的差距要大得多,可信度相对更高。

边界可以收成三条。收益依附于特定视频底座的时间先验,换底座只验证过一次。训练时每任务 17 万样本、全部 512×512,分辨率和任务类型都没有往外推。推理期 50 步、每步重新路由的时间与显存开销,论文完全没有量化,这一项只能标为未知。所以这份成绩单的真实含量是:同条件内确有提升,其中一部分提升的幅度落在评分噪声区间内,且换底座只在一个额外视频底座(HunyuanVideo 1.0)上验证过一次。它证明的是那个被钉死的旋钮确实值得拧,不是这条路线已经赢了。

想深入可以读原文:FrameForge: Harnessing Priors of Video Foundation Models for Unified Image Generation — arXiv:2610.36545

参考文献

  1. FrameForge: Harnessing Priors of Video Foundation Models for Unified Image Generation — https://arxiv.org/abs/2610.36545
  2. HunyuanVideo 1.5 Technical Report — https://arxiv.org/abs/2511.18870
  3. ChronoEdit: Towards Temporal Reasoning for Image Editing and World Simulation — https://arxiv.org/abs/2510.04290
  4. RealGeneral: Unifying Visual Generation via Temporal In-Context Learning with Video Models — https://arxiv.org/abs/2503.10406
  5. iMontage: Unified, Versatile, Highly Dynamic Many-to-many Image Generation — https://arxiv.org/abs/2511.20635
  6. OminiControl: Minimal and Universal Control for Diffusion Transformer — https://arxiv.org/abs/2411.15098
  7. TAG-MoE: Task-Aware Gating for Unified Generative Mixture-of-Experts — https://arxiv.org/abs/2601.08881
  8. DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Driven Generation — https://arxiv.org/abs/2208.12242
  9. Adding Conditional Control to Text-to-Image Diffusion Models (ControlNet) — https://arxiv.org/abs/2302.05543
  10. Step1X-Edit: A Practical Framework for General Image Editing (GEdit-Bench) — https://arxiv.org/abs/2504.17761
  11. VIEScore: Towards Explainable Metrics for Conditional Image Synthesis Evaluation — https://arxiv.org/abs/2312.14867
FrameForge:让模型自己决定参考图离结果图多远的图像生成方法