FramePack
论文链接:https://arxiv.org/abs/2504.12626
文章目录
- 引言
- 方案
- FramePack
- 独立分块参数
- 尾部处理方案
- RoPE对齐
- FramePack变体
- 抗漂移采样
- 总结
引言
在视频生成的下一帧(或下一帧段)预测模型中,“遗忘” 与 “漂移” 是两个最关键的问题。其中,“遗忘” 指的是模型难以记住早期内容、无法维持连贯时间依赖关系,从而导致记忆逐渐淡化的现象;而 “漂移” 则指随着时间推移,误差不断累积(即所谓的 “暴露偏差”),进而造成视觉质量逐次下降的情况。在尝试同时解决 “遗忘” 与 “漂移” 问题时,会出现一个根本性困境:任何通过增强记忆来缓解 “遗忘” 的方法,都可能加速误差的累积与传播,进而加剧 “漂移”;而任何通过中断误差传播、削弱时间依赖关系(例如对历史信息进行掩码或重新加噪)来减少 “漂移” 的方法,又可能导致 “遗忘” 问题恶化。这种本质性的权衡关系,制约了下一帧预测模型的可扩展性。
“遗忘” 问题催生了一种直观的解决方案 —— 对更多帧进行编码,但由于 Transformer 存在二次方复杂度的注意力机制(或如 FlashAttn 等亚二次方优化方法),这种方案很快会面临计算上难以实现的问题。此外,视频帧中存在大量时间冗余,这使得简单的全上下文方法效率较低。而连续帧之间视觉特征的高度重复性,为设计高效的压缩系统以辅助记忆提供了可能。
“漂移” 问题在多个方面受到记忆机制的影响。“漂移” 的根源在于单帧中出现的初始误差,而其影响则表现为这些误差在后续帧中传播与累积,最终导致视觉质量下降。一方面,更强的记忆机制能带来更优的时间连贯性,减少初始误差的产生,从而缓解 “漂移”;另一方面,更强的记忆机制也会记住更多误差,因此当误差确实发生时,会加速误差传播,进而加剧 “漂移”。记忆机制与 “漂移” 之间这种矛盾的关系,使得必须设计精心的训练/采样方法,以实现误差修正或中断误差传播。
FramePack通过依据输入帧的相对重要性对其进行压缩,论视频时长如何,该结构都能确保Transformer的总上下文长度收敛至一个固定上限,且该数值不受视频长度影响。因此可以利用视频扩散模型处理大量帧,且其计算瓶颈与图像扩散模型相近,也使得视频训练批次大小显著提高(批次大小可与图像扩散训练的批次大小相媲美)。还提出了一种抗漂移采样方法,其打破了因果预测链,并融入了双向上下文信息;具体包括:先生成端点帧,再填充中间内容;以及一种倒序时间采样方式——帧按反向顺序生成,每生成一帧都尝试向一个已知的高质量帧(例如图生视频任务中的输入图像帧)靠近。最后证明,现有视频扩散模型可通过FramePack进行微调,且其视觉质量可能得到提升——这是因为下一帧预测支持更均衡的扩散调度器,同时减少了极端的流偏移时间步。
方案
聚焦于基于扩散模型的下一帧段预测模型,这类模型采用DiTs架构,能以TTT个输入帧F∈RT×h×w×cF \in \mathbb{R}^{T×h×w×c}F∈RT×h×w×c为条件,生成包含SSS个未知帧的帧段X∈RS×h×w×cX \in \mathbb{R}^{S×h×w×c}X∈RS×h×w×c。需要说明的是,文中所有关于 “帧” 与 “像素” 的定义,均指代潜在表示/latent representations——这是因为当前主流的视频生成模型大多在潜在空间/latent space中进行运算。
在进行下一帧(或下一帧段)预测时,SSS通常为1或一个较小的数值。FramePack重点研究的是T≫ST≫ST≫S,即输入帧数远大于生成帧段数这一具有挑战性的场景。假设单帧上下文长度为LfL_fLf,在 Hunyuan/Wan/Flux等模型中,对于每个480p分辨率的帧,LfL_fLf通常约为1560,则常规的扩散 Transformer(vanilla DiT)会产生L=Lf(T+S)L=L_f(T+S)L=Lf(T+S)的总上下文长度。当T较大时,这种计算方式会导致上下文长度急剧增加,即 “上下文长度爆炸”。
FramePack
研究发现在预测下一帧时,不同输入帧的重要性存在差异,因此可依据重要性对输入帧进行优先级排序。在不失一般性的前提下,考虑一种简单情况:帧的重要性可通过时间邻近性体现——即时间上越接近预测目标的帧,关联性可能越强。对所有输入帧进行编号,其中F0F_0F0代表最重要的帧,例如最新的帧,FT−1F_{T-1}FT−1代表最不重要的帧,例如最古老的帧。
定义一个长度函数ϕ(Fi)\phi(F_i)ϕ(Fi),该函数用于确定每个帧经过VAE编码和Transformer patchifying后的上下文长度,并对重要性较低的帧实施渐进式压缩,其表达式如下:
ϕ(Fi)=Lfλi(1)\phi (F_i)=\frac {L_f}{\lambda^i} \tag1ϕ(Fi)=λiLf(1)
其中,λ>1\lambda>1λ>1为压缩参数。帧级压缩通过调整输入层中Transformer patchifying的分块核大小实现,例如当λ=2,i=5\lambda=2,i=5λ=2,i=5时,分块核需满足各维度乘积等于25=322^5=3225=32,常见的如3D核2×4×42 ×4 ×42×4×4或8×2×28 × 2 × 28×2×2等。此时,总上下文长度遵循几何级数规律,其计算公式为:
L=S⋅Lf+Lf⋅∑i=0T−11λi=S⋅Lf+Lf⋅1−1/λT1−1/λ(2)L=S \cdot L_{f}+L_{f} \cdot \sum_{i=0}^{T-1} \frac{1}{\lambda^{i}}=S \cdot L_{f}+L_{f} \cdot \frac{1-1 / \lambda^{T}}{1-1 / \lambda} \tag2L=S⋅Lf+Lf⋅i=0∑T−1λi1=S⋅Lf+Lf⋅1−1/λ1−1/λT(2)
当输入帧数量T→∞T \to \inftyT→∞,即输入帧数量趋近于无穷大时,总上下文长度收敛于:
limT→∞L=S⋅Lf+11−1/λ⋅Lf=(S+λλ−1)⋅Lf(3)\lim _{T \to \infty} L=S \cdot L_{f}+\frac{1}{1-1 / \lambda} \cdot L_{f}=\left(S+\frac{\lambda}{\lambda-1}\right) \cdot L_{f} \tag3T→∞limL=S⋅Lf+1−1/λ1⋅Lf=(S+λ−1λ)⋅Lf(3)
而这种有界的上下文长度,使得FramePack的计算瓶颈不受输入帧数量TTT的影响。
由于大多数硬件支持以2的幂次进行高效矩阵运算,因此FramePack论文中主要讨论λ=2\lambda=2λ=2的情况。需注意,可通过在2的幂次序列中复制或删除若干特定项,来表示任意压缩率:考虑到累加和∑i=0+∞12i=22−1=2\sum_{i=0}^{+\infty} \frac{1}{2^i} = \frac{2}{2-1} = 2∑i=0+∞2i1=2−12=2,若想略微提高这一累加和,例如提高至 2.625,可复制序列中的12\frac{1}{2}21和18\frac{1}{8}81两项,此时累加和为1+12+(12)+14+18+(18)+116+⋯=12+18+∑i=0+∞12i=2.6251 + \frac{1}{2} + (\frac{1}{2}) + \frac{1}{4} + \frac{1}{8} + (\frac{1}{8}) + \frac{1}{16} + \dots = \frac{1}{2} + \frac{1}{8} + \sum_{i=0}^{+\infty} \frac{1}{2^i} = 2.6251+21+(21)+41+81+(81)+161+⋯=21+81+∑i=0+∞2i1=2.625。据此,可通过将目标压缩率数值转换为二进制位,再对每一位进行对应处理,从而实现任意压缩率的表示。大多数DiTs中的分块操作采用3D核,将3D核表示为(pf,ph,pw)(p_f, p_h, p_w)(pf,ph,pw),其中分别对应帧数量、高度、宽度维度上的步长。同一压缩率可通过多种不同的核大小实现,例如压缩率64可通过(1,8,8),(4,4,4),(16,2,2),(64,1,1)(1, 8, 8),\quad(4, 4, 4),\quad(16, 2, 2),\quad(64, 1, 1)(1,8,8),(4,4,4),(16,2,2),(64,1,1)等核大小实现。这些不同的核大小会对应不同的FramePack压缩方案。
独立分块参数
研究发现,深度神经网络在不同压缩率下提取的特征存在显著差异。实验证据表明,针对多种压缩率下的不同输入投影采用独立参数,有助于实现稳定的学习过程。将最常用的输入压缩核指定为独立的神经网络层,具体包括(2,4,4),(4,8,8),(8,16,16)(2, 4, 4),\quad(4, 8, 8),\quad(8, 16, 16)(2,4,4),(4,8,8),(8,16,16)。对于更高压缩率的场景,如采(16,32,32)(16, 32, 32)(16,32,32)核的情况,会先对数据进行下采样,如先使用(2,2,2)(2, 2, 2)(2,2,2)的下采样核,再使用最大的压缩核(8,16,16)(8, 16, 16)(8,16,16)。这种设计能够处理所有压缩率。在训练这些新的输入投影层时,通过对预训练分块投影层的权重进行插值来初始化它们的权重;例如,从HunyuanVideo/Wan模型的(2,4,4)(2, 4, 4)(2,4,4)投影层中插值。
尾部处理方案
从理论上讲,FramePack能够以固定且不变的上下文长度处理任意时长的视频,但当输入帧数量变得极大时,会产生一些实际问题。在 “尾部” 区域,部分帧的尺寸可能会小于最小单位大小,例如单个潜在像素。FramePack提出3种尾部处理方案:(1)直接删除尾部帧;(2)允许每个尾部帧仅通过增加一个潜在像素来扩展上下文长度;(3)对所有尾部帧进行全局平均池化,再使用最大核对其进行处理。在测试中,这些方案之间的视觉差异相对可忽略不计。需注意,“尾部” 指的是重要性最低的帧,而非必然是最古老的帧(在某些情况下,可将更高重要性分配给古老帧)。
RoPE对齐
当使用不同压缩核对输入进行编码时,不同的上下文长度需要进行旋转位置嵌入对齐。RoPE会为所有通道中每个token的位置生成包含实部和虚部的复数,将该复数称为 “相位/phase”。通常,RoPE会按通道维度将该相位与神经网络特征相乘。为了匹配压缩后的RoPE编码,直接对RoPE相位进行下采样(采用平均池化方式),以使其与压缩核相匹配。
FramePack变体
前文对FramePack结构的讨论,基于 “由简单时间邻近性定义帧重要性” 及 “采用简单几何级数的压缩方案” 这两个前提。针对实际应用场景与最优质量需求,还考虑了更多变体形式。图1中可视化了典型结构。首先,压缩层级可进行复制,并与更高压缩率结合。在图1b中,每个层级重复3次的4的幂次序列,能够使帧宽度与帧高度维度采用相同的核大小,从而实现更紧凑的压缩。压缩也可应用于时间维度,例如采用2的幂次序列,如图1c所示,该方法将多个帧编码到同一个张量中,这与DiT架构天然适配。
在图1d、e则展示了除 “简单时间邻近性” 之外的其他帧级重要性建模方式。例如,可将完整长度的上下文分配给最古老的帧,或把起始帧与结束帧视为同等重要,同时对中间帧应用更高压缩率。这类结构在图像转视频生成等应用中效果尤为显著——在这类场景下,用户提供的初始帧具有更高的重要性。
抗漂移采样
“漂移” 是下一帧预测模型中常见的问题:随着视频长度增加,视觉质量会逐渐下降。尽管这一问题的根本原因仍是待研究的课题,但研究发现漂移仅会在因果采样场景中出现,即模型仅能访问过去的帧。研究表明,若允许模型访问未来的帧,即便仅访问一帧,就能消除漂移现象。对于维持视频质量而言,核心要素或许是双向上下文,而非严格的因果依赖关系。
图2a所示的常规采样方法,即通过迭代方式预测未来帧,可调整为图 2b的形式:在第一次迭代中,同时生成起始帧段与结束帧段;在后续迭代中,再填补这些锚帧之间的空白。这种双向方法能够防止漂移——因为结束帧在第一次迭代中就已确定,后续所有生成过程都会以逼近这些结束帧为目标。
图2中展示了按不同时间顺序生成帧的采样方法。带阴影的方块代表每轮迭代中生成的帧,白色方块代表每轮迭代的输入。需注意,仅有常规方法(vanilla approach)依赖因果输入,而抗漂移方法(anti-drifting approach)与逆抗漂移方法(inverted anti-drifting approach)均采用双向输入。
另外一种重要变体:将图 2b中的采样顺序反转,得到图 2c中的采样方式。该方法在图像转视频生成任务中效果显著,原因在于它能将用户输入帧视为高质量的首帧,并通过持续优化生成内容以逼近该用户输入帧,这与图 2b的方法不同,后者不会去逼近首帧,最终生成整体质量较高的视频。
图2a、b、c中的三种方法均能生成长度任意的视频。方法a通过直接迭代生成实现这一目标;而在方法b和c中,当生成帧不断逼近结束帧段,或已生成帧时,可将这些结束帧段或已生成帧动态推移至更远的时间位置,从而拓展视频长度。此外,在实际应用中,通常可在第一次迭代时设定一个足够大的时间范围,例如 1 分钟,以此满足实际需求。这些采样方法需要对RoPE进行调整,以支持非连续相位,即帧的时间索引;这一目标可通过在时间维度上跳过未查询的索引来实现。
总结
本文提出了一种神经网络结构FramePack,旨在解决视频生成领域中下一帧预测模型面临的“遗忘 - 漂移”困境。FramePack会根据输入帧的重要性对其进行渐进式压缩,确保无论视频时长如何,总上下文长度都能收敛到一个固定的上限。这一目标通过为不同压缩率调整Transformer的分块核大小来实现。结合抗漂移采样方法,该方法通过提前确定的端点或反转的时间顺序融入双向上下文,能够在保持计算瓶颈不变的前提下,生成更长的视频。实验表明,FramePack可提升模型推理时的响应速度与视觉质量,同时允许在训练过程中使用更大的批次大小。此外,该方案与现有视频扩散模型兼容,并支持多种可优化的压缩变体,以适配更广泛的应用场景。