当前位置: 首页 > article >正文

RIFE: Real-Time Intermediate Flow Estimation for Video Frame Interpolation

Paper name

RIFE: Real-Time Intermediate Flow Estimation for Video Frame Interpolation

Paper Reading Note

Paper URL: https://arxiv.org/pdf/2011.06294

Code URL: https://github.com/hzwer/ECCV2022-RIFE

TL;DR

  • 2022 年旷视出品的实时视频帧插值工作。提出 RIFE 轻量级视频插帧模型,主要设计了一种基于中间流估计的视频插帧方法,另外设计了一种特权蒸馏算法来提升模型的性能和训练稳定性。

Introduction

背景

  • 视频帧插值(VFI)旨在在两个连续视频帧之间合成中间帧。VFI支持各种应用,如慢动作生成、视频压缩和视频帧预测。
  • 近年来基于光流的 VFI 算法的常见步骤包括:
    • 1)根据近似光流对输入帧进行变形
    • 2)使用卷积神经网络(CNN)融合变形后的帧。
  • 光流模型不能直接用于 VFI。给定输入帧 I0 和 I1,基于流的方法需要从预期合成的帧 It 的角度近似中间流 Ft→0 和 Ft→1。由于 It 事先不可用,其估计是一个难题,因此中间流和帧之间存在 “先有鸡还是先有蛋” 的问题。许多实践首先计算光流模型的双向流,然后反向和细化它们以生成中间流。然而,由于对象位置从帧到帧变化(“对象位移”问题),这样的流可能在运动边界上存在缺陷。

本文方案

  • 提出 RIFE,旨在构建一个轻量级的流程,达到最先进的性能,同时保持直接中间光流估计的简洁性,该方法的设计思路如下:

    • 不需要额外的组件,如图像深度模型、光流细化模型和光流反转层,这些组件是为弥补中间光流估计的缺陷而引入的。我们还希望消除对不适合 VFI 任务的预训练最先进光流模型的依赖。
    • 端到端的可学习运动估计:我们通过实验表明,与其引入一些不准确的运动建模,不如让 CNN 端到端地学习中间光流
    • 为近似中间光流提供直接监督:大多数 VFI 模型仅通过最终重建损失进行训练。直觉上,通过变形算子传播像素级损失的梯度对于光流估计来说并不高效。缺乏为光流估计专门设计的监督会降低 VFI 模型的性能。
  • RIFE 模型设计方案:

    • 提出了 IFNet,它直接从相邻帧和时间编码输入中估计中间光流。IFNet 采用粗到细策略,随着分辨率逐步提高:通过连续的 IFBlocks 迭代更新中间光流和软融合掩码。直观地,根据迭代更新的光流场,我们可以将两个输入帧的相应像素移动到潜在的中间帧中的同一位置,并使用融合掩码来结合两个输入帧的像素。
    • 特权蒸馏:使用可以访问中间帧的教师模型来指导学生学习
    • 无需预训练模型或带有光流标签的数据集

在这里插入图片描述

Methods

算法框架

在这里插入图片描述
图 2 中展示了 RIFE 的整体流程。给定一对连续的 RGB 帧 I0、I1 和目标时间步 t(0 ≤ t ≤ 1),我们的目标是合成一个中间帧 I ^ t \hat{I}_t I^t。我们通过将输入帧和 t 作为额外的通道输入 IFNet,估计中间流 F t → 0 , F t → 1 F_{t \rightarrow 0}, F_{t \rightarrow 1} Ft0,Ft1 和融合图 M。我们可以使用以下公式获得重建图像 I ^ t \hat{I}_t I^t

I ^ t = M I ^ t ← 0 + ( 1 − M ) I ^ t ← 1 , ( 1 ) \hat{I}_t = M \hat{I}_{t \leftarrow 0} + (1 - M) \hat{I}_{t \leftarrow 1}, \quad (1) I^t=MI^t0+(1M)I^t1,(1)

I ^ t ← 0 = W − ( I 0 , F t → 0 ) , I ^ t ← 1 = W − ( I 1 , F t → 1 ) . ( 2 ) \hat{I}_{t \leftarrow 0} = \mathcal{W}^{-}(I_0, F_{t \rightarrow 0}), \quad \hat{I}_{t \leftarrow 1} = \mathcal{W}^{-}(I_1, F_{t \rightarrow 1}). \quad (2) I^t0=W(I0,Ft0),I^t1=W(I1,Ft1).(2)

其中, W − \mathcal{W}^{-} W 是图像反向变形(warping),M 是融合图(0 ≤ M ≤ 1)。我们使用另一对编码器-解码器 CNN 来处理对象位置变化的困难。我们称之为 RefineNet,遵循以前的方法来细化 I ^ t \hat{I}_t I^t 的高频区域并减少学生模型的伪影。它的计算成本与 IFNet 相似。RefineNet 最终产生一个重建残差 ∆(-1 ≤ ∆ ≤ 1)。我们得到一个细化的重建图像 I ^ t + ∆ \hat{I}_t + ∆ I^t+

中间流估计 (Intermediate Flow Estimation)

直观地说,之前的流反转方法希望在光流场上执行空间插值,这并不简单,因为存在“对象位移”问题。我们的 IFNet 的作用是直接且高效地预测给定两个连续输入帧 I0、I1 和时间步 t 的 F t → 0 , F t → 1 F_{t \rightarrow 0}, F_{t \rightarrow 1} Ft0,Ft1 和融合掩模 M。当 t = 0 或 t = 1 时,IFNet 类似于经典的光流模型。

为了处理中间流估计中遇到的大运动,我们采用了逐渐增加分辨率的由粗到细策略。
在这里插入图片描述
如图 4 所示。具体来说,我们首先在低分辨率上计算流的粗略预测,这被认为更容易捕捉大运动,然后通过逐渐增加分辨率来迭代细化流场。按照这种设计,我们的 IFNet 具有堆叠的沙漏结构,其中流场通过连续的 IFBlocks 进行迭代细化:

[ F i M i ] = [ F i − 1 M i − 1 ] + I F B i ( [ F i − 1 M i − 1 ] , t , I ^ i − 1 ) , ( 3 ) [F_i M_i] = [F_{i-1} M_{i-1}] + IFB_i([F_{i-1} M_{i-1}], t, \hat{I}_{i-1}), \quad (3) [FiMi]=[Fi1Mi1]+IFBi([Fi1Mi1],t,I^i1),(3)

中间流估计一些以前的 VFI 方法反转和细化双向流如图 3 所示。
在这里插入图片描述

流反转过程通常很繁琐,因为其中 F i − 1 F_{i-1} Fi1 M i − 1 M_{i-1} Mi1 表示第 ( i − 1 ) (i-1) (i1) 个 IFBlock 当前估计的中间流和融合图,IFBi 表示第 i 个 IFBlock。我们总共使用 3 个 IFBlocks,每个都有一个分辨率参数, ( K 0 , K 1 , K 2 ) = ( 4 , 2 , 1 ) (K_0, K_1, K_2) = (4, 2, 1) (K0,K1,K2)=(4,2,1)。在推理时间,最终估计是 F n F_n Fn M n M_n Mn(n = 2)。每个 IFBlock 都有一个前馈结构,由几个卷积层和一个上采样运算符组成。除了输出光流残差和融合图的层,我们使用 PReLU 作为激活函数。成本体积运算符计算成本高昂,通常将光流的起点与输入图像绑定在一起。因此它不直接可转移。我们在表 1 中比较了 SOTA 光流模型和 IFNet 的运行时间。当前基于流的 VFI 方法通常需要运行他们的流模型两次,然后处理双向流。因此,RIFE 中的中间流估计以更快的速度运行。尽管这些光学模型可以准确估计帧间运动,但它们不适合直接迁移到 VFI 任务。

特权蒸馏

3.3 中间流的特权蒸馏

在这里插入图片描述

我们通过实验表明,直接近似中间流在没有访问中间帧的情况下是具有挑战性的。我们训练了 DVF 模型来估计 Vimeo90K 数据集上的中间流。作为对比,我们向 DVF 模型添加了一个额外的输入通道,包含中间帧的边缘图(称为“特权 DVF”)。图 5 显示,特权 DVF 的量化结果令人惊讶地高,而 DVF 估计的流则模糊。类似的结论也在延迟渲染中得到了验证,表明有一些中间信息会使 VFI 更简单。这表明,对于模型来说,在两幅图像之间估计光流要比估计中间流更容易。这激励我们设计一个特权模型来教导原始模型。我们为 IFNet 设计了特权蒸馏损失。我们堆叠了一个额外的 IFBlock(教师模型 IFBT ea, KT ea = 1),它参考目标帧 IGTt 来优化 IFNet 的结果。通过访问 IGT t 作为特权信息,教师模型产生更准确的流。我们将蒸馏损失 Ldis 定义如下:

L d i s = ∑ i ∈ { 0 , 1 } ∣ ∣ F t → i − F t → i T e a ∣ ∣ 2 .   ( 5 ) L_{dis} = \sum_{i \in \{0,1\}} ||F_{t \rightarrow i} - F^{T ea}_{t \rightarrow i}||^2. \, (5) Ldis=i{0,1}∣∣FtiFtiTea2.(5)

我们在学生模型中生成的完整序列预测上应用蒸馏损失,这些预测是通过迭代更新过程产生的。此损失的梯度不会反向传播到教师模型。教师块将在训练阶段后被丢弃,因此这不会增加推理的额外成本。这使得训练更加稳定,并加快收敛速度。

3.4 实现细节

监督信息。我们的训练损失 L t o t a l L_{total} Ltotal 是重建损失 L r e c L_{rec} Lrec L r e c T e a L^{Tea}_{rec} LrecTea 和特权蒸馏损失 L d i s L_{dis} Ldis 的线性组合:

L t o t a l = L r e c + L r e c T e a + λ d L d i s ,   ( 6 ) L_{total} = L_{rec} + L^{Tea}_{rec} + \lambda_d L_{dis}, \, (6) Ltotal=Lrec+LrecTea+λdLdis,(6)

其中我们设置 λd = 0.01 以平衡损失的规模。重建损失 Lrec 描述了中间帧的重建质量。重建损失的公式为:

L r e c = d ( I ^ t , I t G T ) ,   L r e c T e a = d ( I ^ t T e a , I t G T ) ,   ( 7 ) L_{rec} = d(\hat{I}_t, I^{GT}_t), \, L^{Tea}_{rec} = d(\hat{I}^{Tea}_t, I^{GT}_t), \, (7) Lrec=d(I^t,ItGT),LrecTea=d(I^tTea,ItGT),(7)

其中 d 通常是逐像素损失。参考先前的工作,我们使用重建图像和真实图像的两个拉普拉斯金字塔表示之间的 L1 损失(称为 L L a p L_{Lap} LLap,金字塔级别为 5)。

训练数据集。我们使用 Vimeo90K 数据集来训练 RIFE。该数据集有 51,312 个三元组用于训练,每个三元组包含三个连续的视频帧,分辨率为 448 × 256。我们使用水平和垂直翻转、时间顺序反转以及旋转 90 度随机增强训练数据。

训练策略

  • 我们在 Vimeo90K 训练集上训练 RIFE,并固定 t = 0.5。RIFE 通过带权重衰减 10⁻⁴ 的 AdamW 优化,输入为 224 × 224 的图像块。我们的训练批量大小为 64。我们在整个训练过程中使用余弦退火将学习率从 10⁻⁴ 渐渐降低到 10⁻⁵。我们在 8 个 TITAN X (Pascal) GPU 上训练 RIFE 300 个 epoch,耗时 10 小时。
  • 我们使用 Vimeo90K-Septuplet 数据集扩展 RIFE,以支持任意时间步长的帧插值。该数据集包含 91,701 个序列,分辨率为 448 × 256,每个序列包含 7 帧连续图像。对于每个训练样本,我们随机选择 3 帧 (In0, In1, In2),并计算目标时间步长 t = (n1 − n0)/(n2 − n0),其中 0 ≤ n0 < n1 < n2 < 7。因此,我们可以扩展 RIFE 的时间编码。我们保持其他训练设置不变,并将训练在 Vimeo90K-Septuplet 上的模型称为 RIFEm。

Experiments

与之前模型比较任意帧插值效果

  • PSNR 指标上 RIFE 最高,4x/8x 插值任务
    在这里插入图片描述

  • RIFE 更清晰一些
    在这里插入图片描述

中间帧插值结果
  • RIFE在小模型中实现了非常高的性能。同时,RIFE仅需约3GB的GPU内存即可处理1080p视频。通过模型缩放,我们得到了更大的模型版本RIFE-Large,其运行速度比ABME快约4倍,并且性能相当
    在这里插入图片描述

在这里插入图片描述

消融实验

  • 特权蒸馏能避免模型训练发散。BN 会影响性能。3 个 IFBlock 效果优于 1/2 个。

在这里插入图片描述

Thoughts

  • 经典的视频插帧工作,运行速度快且达到当时的 SOTA 效果
  • 类似的传统方案应该上限基本上就在 RIFE 这里了,快速运动、需要脑补一些信息的这种传统方案会有一定局限性。

http://www.kler.cn/news/334989.html

相关文章:

  • 记一次炉石传说记牌器 Crash 排查经历
  • 爬虫——XPath基本用法
  • 华为海思:大小海思的双轮驱动战略分析
  • 9个微服务最佳实践
  • 【汇编语言】寄存器(CPU工作原理)(二)—— 汇编指令的基础操作
  • JavaScript中的数组不改变原数组的方法
  • 论文翻译 | Language Models are Few-Shot Learners 语言模型是少样本学习者(中)
  • DNABERT: 一个基于 Transformer 双向编码器表征的预训练 DNA 语言模型
  • MySql数据引擎InnoDB引起的锁问题
  • 通信工程学习:什么是DQDB分布式队列双总线
  • Java体系中的异常
  • 新机配置Win11
  • Leetcode—139. 单词拆分【中等】
  • Qt源码阅读——事件循环
  • MQTTnet.Extensions.ManagedClient客户端连接
  • 【数据结构】双向链表(Doubly Linked List)
  • Spring Boot ⽇志
  • Stable Diffusion 常用大模型及其特点
  • 数据结构之树(3)
  • 简单认识 redis -3 -其他命令