
FlashVSR:单步Diffusion的再次提速,实时视频超分不是梦!(2025)
本文将对《SeedVR: Seeding Infinity in Diffusion Transformer Towards Generic Video Restoration》这篇文章进行解读,该文提出了SeedVR,一种Diffusion Transformer,旨在处理任意长度和分辨率的真实世界视频复原任务。SeedVR的核心设计在于采用了Swin注意力机制,有效支持长视频序列的复原。参考资料如下:
参考资料如下:
[1]. 论文地址
[2]. 代码地址
专题介绍
现在是数字化时代,图像与视频早已成为信息传递的关键载体。超分辨率(super resolution,SR)技术能够突破数据源的信息瓶颈,挖掘并增强低分辨率图像与视频的潜能,重塑更高品质的视觉内容,是底层视觉的核心研究方向之一。并且SR技术已有几十年的发展历程,方案也从最早的邻域插值迭代至现今的深度学习SR,但无论是经典算法还是AI算法,都在视觉应用领域内发挥着重要作用。
本专题旨在跟进和解读超分辨率技术的发展趋势,为读者分享有价值的超分辨率方法,欢迎一起探讨交流。
系列文章如下:
【1】SR+Codec Benchmark
【2】OSEDiff
【3】PiSA
【4】DLoRAL
【5】DOVE
【6】HYPIR
【7】SeedVR
一、研究背景
当前基于扩散模型的VSR方法在效率、延迟和分辨率泛化方面表现不佳,难以满足实际部署需求。作者提出了实时视频超分的三个阻碍
- 分块处理带来了延迟:块重叠区域引入了冗余计算 。
- 密集的3D注意力:多数方案使用了全时空注意力,其在分辨率上具有平方级复杂度,对于长时间高分辨率的视频而言,成本显著提升。
- 潜在的训练-测试的分辨率差距:多数attention-based的VSR方案在中等分辨率视频上训练,应用于更高分辨率,模型能力会降低。此差距源于训练和推理之间不匹配的位置编码范围。
因此,作者均提出了相应的改进措施,在效果和效率上都有突破,其核心创新点如下:
-
创新1:三阶段蒸馏流水线 (Three-Stage Distillation Pipeline)
设计了一个从“强教师”到“高效学生”的渐进式训练框架。首先用全注意力模型在高质量数据集上训练一个强大的教师模型;然后将其适配为因果稀疏注意力结构;最后通过分布匹配蒸馏将其压缩为一个单步模型。这种分阶段的方法解决了直接训练高效模型的困难,同时确保了最终模型的高质量和高效率。
-
创新2:局部性约束的稀疏注意力 (Locality-Constrained Sparse Attention)
首次在扩散VSR中引入稀疏注意力机制。通过首先计算粗粒度的注意力图,然后仅在Top-k区域内进行全注意力计算,大幅降低了计算开销。更重要的是,它引入了空间局部窗口约束,强制训练和推理时的位置编码范围一致,从而解决了高分辨率泛化问题,这是以往方法未曾解决的关键痛点。
-
创新3:轻量级条件解码器 (Tiny Conditional Decoder)
VAE解码器是推理的主要瓶颈,为此设计了一个新的解码器。它不仅利用潜在特征,还将原始的低分辨率(LR)帧作为辅助输入,从而简化了重建过程,实现了约7倍的速度提升,同时质量损失极小。这种“条件”设计是其高效的关键。
-
其他亮点:
-
流式处理架构:实现了真正的流式推断,仅需8帧的前瞻延迟,远低于传统分块处理方法的数十帧延迟。
-
新数据集VSR-120K:构建了一个大规模、高质量的视频-图像联合数据集,为训练和评估提供了坚实基础。
-
并行训练:由于模型在训练时仅依赖当前的LR帧和噪声,避免了序列依赖,支持高效的并行训练,大大提升了训练效率。
-

二、方法细节
接下来详细介绍下FlashVSR的方法流程以及关键点。
2.1 大规模数据集构建 (VSR-120K)
为了提升VSR数据集的数量和质量,作者构建了新数据集,从Videvo, Pexels, Pixabay等平台收集原始数据,包括600k个视频片段和220k张高分辨率图像。
-
筛选策略:
-
视觉质量:使用LAION-Aesthetic预测器和MUSIQ对图像/视频片段进行打分,过滤低质量样本。
-
运动多样性:使用RAFT算法计算光流,用光流场的L2范数来量化运动强度,过滤静态或运动不足的片段。
-
最终得到12万条高质量视频(平均每条>350帧,分辨率大于1080p)和18万张高分辨率图像(大于1024x1024),支持联合训练。
2.2 ⭐三阶段pipeline:一训二调三蒸馏

1️⃣ 阶段1:联合视频-图像超分训练 (Joint Video–Image SR Training)
总体过程就是在预训练的视频扩散模型(Wan 2.1)基础上,使用VSR-120K数据集进行微调。将图像视为单帧视频,统一使用Full Attention。

需要注意的是:
-
在联合训练时,模型可能会“混淆”不同数据源(比如把一张图片和一段视频的特征混在一起计算注意力)。解决方案是使用块对角线掩码,限制注意力在同一个片段内,强制模型的注意力只在同一个“片段”(segment)内进行。
α i j = exp ( q i k j ⊤ d ) 1 [ seg ( i ) = seg ( j ) ] ∑ l exp ( q i k l ⊤ d ) 1 [ seg ( i ) = seg ( l ) ] \alpha_{ij} = \frac{\exp\left(\frac{q_i k_j^\top}{\sqrt{d}}\right) \mathbf{1}[\text{seg}(i) = \text{seg}(j)]}{\sum_l \exp\left(\frac{q_i k_l^\top}{\sqrt{d}}\right) \mathbf{1}[\text{seg}(i) = \text{seg}(l)]} αij=∑lexp(dqikl⊤)1[seg(i)=seg(l)]exp(dqikj⊤)1[seg(i)=seg(j)]
也就是说,一张图片的像素只和这张图片内的其他像素交互,一段视频的帧只和这段视频内的其他帧交互,不同片段之间互不干扰。其中 seg(i) 表示第i个token所属的片段。
-
使用固定的文本提示进行条件化,简化训练,加强模型统一性,其交叉注意力键和值在不同样本间重复使用,节省计算资源。
-
设计了一个轻量的“低分辨率投影输入层”(LR Proj-In)。它直接将LR视频/图像投影到与模型潜在空间相匹配的特征空间,绕过了计算量巨大的VAE编码器。
-
采用Flow Matching损失函数。是一种比传统扩散模型损失函数更高效、更稳定的训练方法,特别适合于视频等复杂数据。
文中未给出Flow matching loss公式,可参考引文(“Lipman et al., 2022” )。核心就是让模型预测一个向量,这个向量指向数据点“流动”的方向,损失就是预测方向和真实方向之间的平方差。
2️⃣ 阶段2:块稀疏因果注意力适配 (Block-Sparse Causal Attention Adaptation)

- 引入因果特性:
这一步引入了Sparse-Causal DiT将阶段1的全注意力DiT替换掉。其中,因果mask将每个latent的参考范围限制在当前和过去的位置。也将阶段1的LR投影层(Proj-In)改为因果版本。

- 块稀疏注意力:
块稀疏注意力则是将Q和K划分为非重叠块(2x8x8);在每个块内,通过avg-pooling产生紧凑型块级特征,计算block-to-block的粗注意力图;选择Top-k个最相关的块执行全注意力,即用块内原始的Q、K、V特征,做128x128的注意力计算。将所有k个块的计算结果合并,得到最终的注意力输出。这样可以在不损失性能的情况下,将注意力成本降低到原本的10 - 20 %。
Stage 2的目的是让模型适应“流式”和“稀疏”的处理方式,而图像数据仅为单帧,不适合用来训练这种“因果”和“稀疏”特性。因此,此阶段只用视频数据进行训练。
3️⃣ 阶段3:分布匹配单步蒸馏 (Distribution-Matching One-Step Distillation)

精调Stage2的SC-DiT,使其变为单步扩散模型 G one G_{\text{one}} Gone,这一步的蒸馏策略采用了DMD的方式,以Stage1的DiT作为teacher模型,并copy一份,作为 G fake G_{\text{fake}} Gfake。 z pred z_{\text{pred}} zpred表示潜特征, x pred x_{\text{pred}} xpred表示重构的HR帧。总体损失包括了分布匹配蒸馏损失、Flow matching损失,像素级损失(L2+LPIPS)。
为了节省显存,这里还用了一个小技巧,也就是每次迭代仅随机选择两个Latents进行解码来计算损失。使得模型间接地学会整个batch的重建能力。
在Stage 3,单步模型在训练和推理时是完全一样的:都是输入LR帧和噪声,输出超分结果。这种训推一致性确保了模型在实际部署时能达到训练时的最佳性能。
另外,作者还提到了一个核心观点,““The core insight is that, unlike video generation, VSR is strongly conditioned on LR frames, so clean historical latents are unnecessary for motion plausibility.” ,即与视频生成不同,VSR受LR帧序列的强烈制约,因此干净的历史潜在信息对于运动的合理性来说是不必要的。
其实VSR的本质是“修复”而非“创造”。低分辨率视频输入具备了时间一致性,不一定得保留模型自身生成的历史内部信息。
所以通过KV-cache方式(只缓存过去帧的Key和Value,而不是完整的Latents),来进一步做稀疏化,大大减少存储和传输量。
2.3 局部性约束稀疏注意力 (Locality-Constrained Sparse Attention)
由于位置编码具有周期性:当推理时的位置范围远远超过训练时的位置范围时,某些维度会重复它们的模式,从而降低自注意力。使得超高分辨率的推理效果不佳。
为此,这里引入了局部约束稀疏注意力,在推理时,限制每个Q的注意力范围在一个局部空间窗口内使位置编码范围与训练时保持一致。也提出了两种边界处理方式:Boundary-Preserved 和 Boundary-Truncated。
这种方法缩小了分辨率差距,即使在高分辨率输入下也能获得一致的性能。如下图对比所示,在超高分辨率下,执行超出训练位置编码范围的推理会产生伪影(例如,左图中的重复pattern和模糊)

2.4 轻量级条件解码器 (Tiny Conditional Decoder)
在单步模型中, VAE解码器是推理的主要瓶颈(占70%时间)。
-
解决方案:设计一个TC Decoder,输入为Latents和原始LR帧。通过条件约束(也就是LR),简化了重建任务,允许解码器使用更紧凑的模型架构。

-
训练方式:用61帧视频片段(384x384)单独训练,结合像素级监督和从原始Wan解码器蒸馏的损失。
L = ∥ x pred − x gt ∥ 2 2 + λ L LPIPS ( x pred , x gt ) + ∥ x pred − x wan ∥ 2 2 + λ L LPIPS ( x pred , x wan ) \mathcal{L} = \|x_{\text{pred}} - x_{\text{gt}}\|_2^2 + \lambda \mathcal{L}_{\text{LPIPS}}(x_{\text{pred}}, x_{\text{gt}}) + \|x_{\text{pred}} - x_{\text{wan}}\|_2^2 + \lambda \mathcal{L}_{\text{LPIPS}}(x_{\text{pred}}, x_{\text{wan}}) L=∥xpred−xgt∥22+λLLPIPS(xpred,xgt)+∥xpred−xwan∥22+λLLPIPS(xpred,xwan)
此操作下,新解码器的质量与原版相当,但速度快了近7倍。
三、实验论证
FlashVSR的基础模型为Wan2.1-1.3B。
- 测试数据集:在YouHQ40, REDS, SPMCS(合成),VideoLQ(真实),AIGC30(AI生成)上评估。
- 对比方法:包括非扩散模型(RealViFormer),多步扩散模型(STAR, Upscale-A-Video),以及单步扩散模型(DOVE, SeedVR2-3B)。
3.1 定量结果
FlashVSR在所有数据集上均取得了SOTA或接近SOTA的性能,尤其在感知质量指标(MUSIQ, CLIPIQA, DOVER)上优势明显。

速度也是嘎嘎快,应该是当下最快的单步方案之一了。

3.2 定性结果
视觉效果方面,其再清晰度和纹理表现上均有一定优势。


3.3 消融实验
-
稀疏注意力:13.6%的稀疏度下,质量几乎与全注意力无异,但速度提升3.1倍。这表明稀疏注意力有效地修剪了冗余的交互,减轻了计算开销,同时保留了高质量视频超分辨率所必需的时空依赖关系。

-
TC解码器:相比原始Wan解码器,速度提升7倍,质量损失极小,并优于无条件的轻量解码器。

-
局部性注意力:在超高清视频上,两种局部性约束变体均显著优于全局注意力,在所有指标上表现更优。值得注意的是,边界截断获得了略高的感知质量,而边界保留则以更好的保真度保持了有竞争力的性能。

四、总结和思考
该方案提出了FlashVSR,一个高效的、基于扩散模型的单步流式视频超分辨率框架。通过结合流式蒸馏、局部性约束的稀疏注意力、轻量级条件解码器三大创新,解决了扩散模型应用于视频超分辨率时面临的三大瓶颈:高延迟、高计算成本、分辨率泛化差。
FlashVSR在保持最先进视觉质量的同时,实现了接近实时的推理速度和强大的超高清分辨率泛化能力。其低延迟、高效率和高可扩展性的特点,使其非常适用于手机摄影、直播等现实世界的视频处理场景,将基于扩散模型的VSR从研究推向了实用化。
从几秒1帧到1秒十几帧,扩散模型方案越来越快,相信未来会有更快的方法出现。
感谢阅读,欢迎留言或私信,一起探讨和交流。
如果对你有帮助的话,也希望可以给博主点一个关注,感谢。
1072

被折叠的 条评论
为什么被折叠?



