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} Ft→0,Ft→1 和融合图 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^t←0+(1−M)I^t←1,(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^t←0=W−(I0,Ft→0),I^t←1=W−(I1,Ft→1).(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} Ft→0,Ft→1 和融合掩模 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]=[Fi−1Mi−1]+IFBi([Fi−1Mi−1],t,I^i−1),(3)
中间流估计一些以前的 VFI 方法反转和细化双向流如图 3 所示。
流反转过程通常很繁琐,因为其中 F i − 1 F_{i-1} Fi−1 和 M i − 1 M_{i-1} Mi−1 表示第 ( i − 1 ) (i-1) (i−1) 个 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}∑∣∣Ft→i−Ft→iTea∣∣2.(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 这里了,快速运动、需要脑补一些信息的这种传统方案会有一定局限性。
相关文章:

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…...
rabbitMq-----broker服务器
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言管理的字段 前言 搭建一个网络服务器,在内部提供各个业务接口即可。 在业务处理函数中,每次请求过来找到对应的信道,通过信…...

MAC备忘录空白解决方案
打开icloud->备忘录 取消勾选同步此MAC后再次勾选,然后点击完成即可。...
cnn突破七(四层bpnet网络公式与卷积核bpnet公式相关)
我们要有一个概念,就是卷积核就是我们的w1,w12,w2 那么我们的5*5卷积核怎么表达,当他在14*14的图像中流动时,对应的像素也在变化 这个和我们的上面w1,w12,w2不同,因为这几个都是全…...
PHP中的PEAR是什么
PHP中的PEAR是PHP Extension and Application Repository的缩写,即PHP扩展与应用库。它是一个PHP扩展及应用的代码仓库,提供了许多常用的PHP库和工具,涵盖了页面呈现、数据库访问、文件操作、数据结构、缓存操作、网络协议、WebService等许多…...
(C语言贪吃蛇)4.贪吃蛇地图优化及算法说明
上节代码示例: #include <curses.h>void initNcurse() {initscr();keypad(stdscr,1); }void gamePic() {int hang;int lie;for(hang 0;hang < 20;hang ){if(hang 0){for(lie 0;lie < 20;lie ){printw("--");}printw("\n");for(…...

国外电商系统开发-运维系统拓扑布局
点击列表中设备字段,然后定位到【拓扑布局】中,可以看到拓扑发生了变化 再回头,您再次添加一个服务器到系统中,并且选择该服务器的连接节点为您刚才创建的“SDN路由器”,保存后,您可以看到这个服务器连接着…...
使用winsock和ip相关指令重置Window网络配置
netsh winsock reset 和 netsh int ip reset 是 Windows 中用于修复网络问题的命令。它们分别用于重置 Winsock 和 TCP/IP 网络配置,以解决可能由于配置错误或网络堆栈损坏而导致的网络连接问题。 1. netsh winsock reset 1.1 作用 重置 Winsock 目录。Winsock 是…...

用AI做电子萌宠,快速涨粉变现
今天给大家分享一个很热门的小副业—AI宠物视频 项目介绍 前一阵刷到一个萌宠账号,爆款率可真高,涨粉可真快呀。 28篇笔记涨粉3.2万,点赞更是达到了十几万。其中有6篇点赞上万。 至于究竟是不是AI其实没那么重要,重要的是&…...
如何在 Axios 中封装事件中心EventEmitter
在 Axios 中封装一个事件中心 EventEmitter 允许你在请求的不同阶段(如请求开始、请求成功、请求失败等)触发事件。这可以通过创建一个自定义的 Axios 实例,并结合 Node.js 的 events 模块来实现。以下是一个详细的步骤指南和示例代码&#x…...

计算机网络——ftp
在网络通信中,控制连接和数据连接是两种不同类型的连接,它们各自具有特定的功能和用途。 一、控制连接 定义与功能: 控制连接主要用于在通信双方之间传输控制信息,以建立、维护和终止数据连接。它负责协调和管理数据传输的过程&am…...

Redis:set类型
Redis:set类型 set命令SADDSMEMBERSSISMEMBERSCARDSPOPSRANDMEMBERSMOVESREM 集合间操作SINTERSINTERSTORESUNIONSUNIONSTORESDIFFSDIFFSTORE 内部编码intsethashtable 当把一些关联的数据放到一起,就构成一个集合。在Redis中,使用set类型维护…...

九大排序之插入排序
1.前言 插入排序是把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。实际中我们玩扑克牌时,就用了插入排序的思想。 本章重点:主要着重的介绍两种插入排序…...

DNABERT: 一个基于 Transformer 双向编码器表征的预训练 DNA 语言模型
本文结合 DNABERT 的原文,主要介绍了: Overview of DNABERT 开发 DNABERT 的背景 DNABERT 的 tokenization DNABERT 的模型架构 DNABERT 的预训练 基于微调 DNABERT 的应用 1. Overview of DNABERT 我们之前介绍了 BERT,它是一个基于 Transfo…...

基于Hive和Hadoop的电商消费分析系统
本项目是一个基于大数据技术的电商消费分析系统,旨在为用户提供全面的电商消费信息和深入的消费行为分析。系统采用 Hadoop 平台进行大规模数据存储和处理,利用 MapReduce 进行数据分析和处理,通过 Sqoop 实现数据的导入导出,以 S…...

记一次炉石传说记牌器 Crash 排查经历
大家好这里是 Geek技术前线。最近在打炉石过程中遇到了HSTracker记牌器的一个闪退问题,尝试性排查了下原因。这里简单记录一下 最近炉石国服回归;由于设备限制,我基本只会在 Mac 上打炉石。并且由于主要打竞技场,所以记牌器是必不…...
精益驱动的敏捷开发
1. 什么是精益?精益能给软件开发带来什么? 精益是一种起源于制造业的管理哲学,尤其是从丰田的生产体系中发展而来。它的核心目标是通过最小化浪费、提高效率和优化流程来实现高效的生产。精益的核心原则包括: 消除浪费ÿ…...
SolidWorks机器转ROS2 URDF
文章目录 开发环境SolidWords插件使用生成urdf文件之后的处理CMakeLists文件修改package.xml变更Launch更改运行 开发环境 Linux系统:Ubuntu 22.04 Ros2版本:humble Solidwords版本:2023 (2019以上版本应该都是可以的)…...

(Linux驱动学习 - 6).Linux中断
一. Linux 中断 API 函数 1.中断号 每个中断都有一个中断号,通过中断号即可区分不同的中断,有的资料也把中断号叫做中 断线。在 Linux 内核中使用一个 int 变量表示中断号。 2.申请中断 - request_irq 函数原型: int request_irq(unsigne…...

SpringBoot驱动的明星周边产品电商解决方案
1系统概述 1.1 研究背景 如今互联网高速发展,网络遍布全球,通过互联网发布的消息能快而方便的传播到世界每个角落,并且互联网上能传播的信息也很广,比如文字、图片、声音、视频等。从而,这种种好处使得互联网成了信息传…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...

【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...

C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...