前记:

2020年众多手机大厂都在自家旗舰机上发布了高刷新率,目的是为用户提供更为顺滑的观感体验。这不仅仅需要一块好的屏幕,也离不开算法。为了在同等输入画面下获得更高的帧率,就需要更多的帧,而这些帧原本是不存在的,所以就需要插帧。目前效果最好的插帧技术就是MEMC,即运动估计和运动补偿。本人在尝试了解该算法的过程中,意外发现基于深度学习的MEMC算法,因此以下通过对 MEMC-Net 的个人总结记录其原理,以便理解。

PapperLink:

MEMC-Net: Motion Estimation and Motion Compensation Driven Neural Network for Video Interpolation and Enhancement

视频效果(源自论文,若有侵权,联系删除):

amazing啊,丝滑流畅。

[MEMC-Net] 丝滑流畅https://www.zhihu.com/video/1228290087281934336


1. 介绍:

MEMC是过去几年被广泛应用的经典视频插帧算法。最近出现了很多使用CNN的数据驱动插帧方法。然而已有的基于学习的方法要么是估计流,要么是补偿核,从而限制了计算效率和插帧准确度上的表现。本文提出了一个MEMC水视频插帧神经网络。用一个新颖的自适应变形层结合光流和插帧核,来合成目标帧的像素。这个层是完全可微分的,使得流和核的估计网络可以被同时优化。该模型在不使用手工特征的情况下,充分利用了运动估计和补偿方法的优点。相较于已有的方法,本文的方法是运算高效的,并且能够生成更加符合观感的结果。而且 MEMC-Net 架构可以无缝应用到一些视频增强任务,例如超分辨率,降噪以及去块滤波。大量的定量和定性评估表明,本文的方法在大量数据上的结果都胜过SOTA的视频插值和增强算法

视频插帧目的是在元素输入帧之间合成不存在的帧,这已经被广泛应用在视频帧率变换、新视点合成、视频流的帧恢复等方面。传统的方法通常基于MEMC,这在许多显示设备上已经被使用。一些基于深度学习的方法已经被用于解决这个经典问题。本文中,作者分析了基于MEMC的方法和基于学习的方法,并且利用这两种发发的优点提出了一个高质量的插帧算法

【主要贡献】:

(1)提出了一个运动估计和运动补充的神经网络,对于视频插帧具有鲁棒性和高质量

(2)在自适应变形层(作者提出的层)中结合了光流变形和学习到的补偿滤波器。这个层是完全可微分的,并且可以被用于一些视频处理任务,例如视频超分辨率,视频降噪,视频去块滤波。

(3)在一些基准数据集上(Middlebury, UCF101, Vimeo90K),提出的方法胜过SOTA插帧算法。本文的模型需要更小的内存来预测补偿滤波器,运算高效

(4)本文的网络可以扩展到其他视频增强任务上,包括超分辨率,降噪,去块滤波等,是通用的,适用于基于运动补偿的任务。本文的方法比在这些各自任务上的SOTA方法要更好

2. 相关工作:

2.1 基于MEMC的传统方法

基于MEMC的传统方法的经典架构

首先,估计出前后帧之间的动作向量。沿着动作轨迹,参考帧的像素被用于插值出中间帧。传统的ME方法使用基于块的算法,例如3D循环搜索,这是硬件友好且运算高效的。基于块的方法通常把图片切分成小的像素块,依据例如最小化绝对块间差之和的搜索标准,利用特定的搜索算法,例如在空间上或时间上的搜索,层次搜索等,计算这些小块的动作向量。

对于运动补偿,利用重叠块应对像素块的错误动作向量。最近有一些方法利用光流来保证流场的真实性。通过图片融合或重叠patch重建的补偿滤波器被用于解决遮挡或块状效应。

除此之外,还有一步后处理,用以最小化伪影和提升视觉质量。由于相对运动和不同深度物体间的遮挡,估计到的流向量可能产生带有空洞区域的错误插值结果。Kim等人利用空洞插值方法来恢复缺失的像素。另一方面,Wang等人提出了一个三边滤波方法来填充空洞和平滑时空域上的补偿误差。本文提出的方法是数据驱动的,端到端的,利用深度特征的可训练模型,与传统方法有所不同

2.2 基于学习的方法

基于深度学习的视频插帧算法可以被归为四类:直接方法,基于相位的方法,基于流的方法,基于核的方法。Long等人训练深度CNN直接预测中间帧。其输出通常是模糊的,并且缺乏细节。原因就是深度模型不能捕捉自然图片和视频的多模态分布。基于相位的方法在一个多尺度金字塔中使用像素相位信息来插帧。然而这种方法不能很好地处理复杂场景中的大动作

基于流的方法。凭借深度CNN在光流估计上的优势,一些端到端的方法已经被用于视频插帧。这些方法预测双向光流,或者在线性动作模型的基础上使用双线性变形来对齐输入帧。为了合成输出图片,一个通用的技巧是估计一个遮挡遮罩(occlusion mask)来自适应混合变形的帧。由于双线性变形基于子像素位移混合了邻近像素,当输入帧没有被很好地对齐时,流方法不可避免地产生了幽灵或者模糊本文提出的方法没有使用固定的双线性参数来插值,而是对每个像素学空间可变的插值核。学到的核比双线性插值有更大的空间信息支持(例如4*4),在处理遮挡和非遮挡情况下也因此表现更好

基于流的方法的架构

基于核的方法。并非依赖像素级别的光流,插帧可以被转化为局部片上的卷积操作。Niklaus等人提出 AdaConv 来对配个输出帧估计空间自适应的卷积核。在这些方法中,一个大的核被用于处理大动作,这就需要很大的内存来处理高分辨率图片。对于 HW 的输入图片, AdaConv 需要估计 HWRR 的参数来插值,其中R是局部核的尺寸。为了减少内存需求,SepConv 假设卷积核可分离,使用了一对 1D 核(一个水平核和一个垂直核)来估计2D核。这个策略显著的将内存消耗从 O(

) 降到 O(2R),并且进一步提升了插值结果。然

而 AdaConv 和 SepConv 都不能处理超过预定义核大小的动作。相较而言,本文的方法也学了一个自适应的局部卷积用于插值,这个方法由于结合了光流变形而不受制于动作的固定范围。即,本文的方法使用了更小的核,需要更少的内存,并且对于大动作的帧具有鲁棒性

基于核的方法

下表列出了流方法,核方法的主要不同点:

3. MEMC-Net:

这部分主要介绍MEMC-Net架构,以及在模型中使用的自适应变形层 和 流映射层。

3.1 MEMC-Net 架构

依据传统的 MEMC 方法和最近的基于学习的方法,有不同的方式设计 MEMC-Net 用于视频插帧。

一个直接的方法是顺序变形运动估计、运动补偿和后处理。即,参考帧先安装动作估计对齐,线性变形被用于解决大动作,小卷积核被用于变形那些估计得到的帧,来生成最终的结果帧。就像在传统的MEMC框架中,后处理网络也被用于顺序模型来减少可能的像素值异常。

直接改造的顺序模型

然而根据我们的实验,变形的帧(warped frames)

由于已有方法中的不完全光流估计,通常是低质量的。因此,后续的核估计,核卷积,后处理都不能从损坏的帧中产生观感良好的结果

本文中,我们开发了一个新颖的算法来同时估计相对于原始参照帧的流和补偿核。这个方法需要在基于流和补偿核的变形层内进行帧插值。这个新的变形层预计将紧密结合运动估计和核估计网络,因此两个网络都可以通过海量视频数据被优化。网络架构如下图:

用于视频插帧的 MEMC-Net 如下图:

MEMC-Net

在这个工作中,作者提出了一个新颖的自适应变形层(Adaptive warping layer)在一个单步中聚合双线性变形和核卷积。这个层使用 光流 和 插值核 来对输入帧的像素变形。对于视频插帧任务,由于中间帧不是原来可获得的,作者估计了前后参考帧的流,接着将其投影来模拟中间帧和参考帧之间的流。这个操作可以通过流投影层(flow projection layer, 作者提出的层)实现。

自适应变形和流投影层是本文算法的两个主要的技术创新。作者将他们的优点总结为以下两方面。首先。传统的MEMC方法依赖手工特征(例如,SIFT 用于运动估计,或者高斯权重图用于运动补偿),而本文提出的自适应变形层允许我们提取数据驱动的特征同时用于运动估计和运动补偿。因此,本文的模型对与处理各自场景的视频插帧和增强任务,有更好的泛化能力。其次,自适应变形层紧密结合了两个基于学习的方法,即基于流的方法和基于核的方法,并继承了两者的优点:

1)相较于那些依赖简单的双线性参数的流方法,本文的方法通过使用数据驱动的核参数能够提升插值的准确度。

2)相较于基于核的方法,本文的方法通过使用学到的光流预对齐像素大幅减小核的尺寸,从而获得了更高的运算效率

这两个新层的前向推理和反向传播的细节分别在 Section 3.2 和 Section 3.3。方法的 pipeline 如 Fig. 4。同时 Section 4 也展示了使用运动估计,核估计,遮罩估计,后处理网络的具体的网络参数。作者也介绍了增强的 MEMC-Net* 中附加的上下文提取网络。

3.2 自适应变形层

输入是基于光流和局部卷积获得的图片或特征。

前向传播:

用 I(x)表示一个像素从 2d坐标 到 RGB值 的映射。其中x是整数,RGB是实数。

f(x) 表示光流场,其中 u(x), v(x) 分别表示 2d 向量的水平竖直两个部分。

表示大小为 R 的插值核。

这里

,前者表示学到的插值核,后者表示双线性参数。对于图像网格上的每个 2d 空间位置,核估计网络生成一个 16通道的特征向量。接着将这个特征向量映射成一个4*4 的方阵,作为用于下采样局部片的核参数。映射示意图如下:

不同的颜色表示特征向量,不同的片像素表示16个通道的映射。图中的红点表示通过光流平移的子像素的位置。

另一方面,双线性参数

定义如下:

其中

表示小数部分。 u, v 同之前表述,表示 2d 向量 r 的水平竖直部分。双线性参数使得网络层可以反向传播梯度给光流估计网络。在这种情况下,作者目的是计算一个结合 双线性参数 和 学到的核预测网络参数 的局部插值核。为了在任何大小的核上使用双线性参数,作者先计算了对于

最邻近4个像素的双线性参数,例如

,接着

在相同角落的像素复制这个参数。因此,图示中,相同角落的像素颜色相同:

最终,将双线性参数和学到的核参数相乘,,即

,作为局部自适应核。

反向传播:

分别对光流和插值核计算梯度。

光流场 f 的导数水平、垂直两个方向计算,以水平部分 u 为例:

垂直部分 v 类似。

插值核的导数计算:

结合了空间可变核的方法减弱了双线性插值的限制,可以从更广的邻域合成像素值。另外,这个利用变形层的方法对于不准确的光流表现更鲁棒,对遮挡的解决更好。

3.3 流投影层

因为中间帧不存在,所以作者将前后参考帧中间的流位移,并且将其投影模拟中心帧多参考帧之间的流。

表示某一帧
在 t 到 t-1 时刻之间的运动向量场。类似的,
表示 t-1 到 t+1 之间的运动向量场。注意到这里用 y 标注 t-1 时刻的 2d坐标,区别于用 x 表示 t 时刻的坐标。流投影层被用于将一个估计的流
平移到
。这里假设连续帧间的局部流是线性的,颠倒 t-1 和 t+1 之间的流来近似估计中间的流场。

因为可能存在很多流向量会被投影到中心帧的同一个位置上,作者对这个位置上所有的流向量进行平均。另一方面,也可能存在许多没有流被投影的空洞。因此,作者使用“从外到内”的策略来填充这些中心帧当中的空洞。

其中,“从外到内”策略示意如图:

例如这里 x 是空洞,它的4个方向(上下左右)最近的非空洞邻居是A,B,C,D. 因此 x 的流向量fx 可以近似表示为

.

一个可替换的策略是对这些空洞进行零向量填充,这其实仅仅只适合于静止物体。两种策略的对比如下,可以看出“从外到内”策略对于减少插值伪影效果更好。

在时刻 t 映射到位置 x 的流向量集,用以下表示:

用以下表示一个空洞的4个方向的最邻近流向量:

流投影层的前向传播定义如下:

对于输入光流

的反向传播的导数计算如下:

4. 视频插帧

整体架构如下图,下面对每个模块依次解释。

MEMC-Net 整体架构

Motion estimation. 输入是两帧

,先将输入放入流估计网络中两次(有一次是反向),估计出

前向光流

后向光流

。这里作者使用了

FlowNetS 模型用于光流估计。接着使用作者提出的流投影层将前向流

和后向流

分别投影

,用于中间帧。

Kernel estimation. 作者使用 U-Net 作为核估计网络,它有一个包含5层maxpooling的encoder,有一个包含5个上采用层的decoder,从encoder到decoder还有跳跃连接。核预测网络的输入是视频的两帧输出是两个

参数图,用

分别表示。接着对每个像素的参数图 reshape 到 R*R 卷积核。

两对中间流和核参数

输入到自适应变形层(adaptive warping layer),将输入帧变形产生两个变形后的帧

Mask estimation. 由于深度变化和物体的相对运动,连个参考帧之间会有遮挡的像素。为了从两个变形后的参考帧当中选择有效像素,作者学习了一个遮罩估计网络,用来预测遮挡遮罩。这个遮罩估计网络使用了和 U-Net 一样的框架,但是最后一个卷积层的输出是一个2通道的特征图,作为遮挡遮罩,用

表示。然后混合的帧通过以下方式生成:

注意这里的乘是对应通道相乘。

Context extraction. 作者在后处理模块也使用了上下文信息,用于更好的处理遮挡问题。作者从一个预训练的 ResNet18 中提取了输入参考帧的 conv1 的特征,作为上下文map。然后这些上下文 map 通过光流和插值核在自适应变形层中变形。变形后的上下文map,分别用

表示,并且作为输入送到后面的后处理过程。

Post-processing. 由于混合的图像

通常

有拖影,是由于不准确的光流估计或遮罩引起的。为此,作者提出了一个后处理网络来提升视觉质量(其实思路就是参考传统的MEMC)。后处理模块输入是混合的帧

, 估计的光流
,插值核的参数图
,遮挡遮罩
,变形后的上下文特征
。把这些信息拼接起来(

concatenate)。后处理网络包含8个卷积层,具体如下图:

除了最后一层,每个卷积层的卷积核是3*3,输出通道是64,后面接一个ReLU。最后一个卷积层输出一个 3通道的RGB图片。由于这个模块的输入输出高度相似(即,都是t时刻的插值后的帧),所以作者使网络输出混合帧

和 ground-truth 帧之间的

残差。因此,后处理模块学着在混合帧中增强细节并移除拖影。例子如下图:

这证明了后处理模块的效果。模糊边缘和线条变得更加锐利。这个模型生成

作为最终的插值帧输出。

MEMC-Net. 作者对于所提出的模型提供了两个变体。MEMC-Net 是没有上下文信息的。MEMC-Net* 是加入了上下文信息,并作为后处理模块的一个输入。

5. 实现细节

这部分主要讨论 loss function, 数据集,超参设置的实现细节。

Loss Function. 作者使用了一个鲁棒的 loss function,表示恢复的帧

与对应ground-truth 帧
之间的误差。作者也将两个遮罩之和正则化到1.0。组合的 loss function 如下:

分别对应,最终结果(后处理输出的)的误差,混合帧(后处理之前)的误差,遮罩图正则化。

其中,

是一个Charbonnier惩罚函数,
被设为 1e-6。按照经验,设置
为 1e-3 ,设 β 为2e-3。

数据集. 训练集使用Vimeo90K 数据集,用于学习视频插值模型。有 51,312 个三元组(前后帧+中心帧),每张图片是 448*256。在训练阶段,使用随机水平、竖直翻转以及颠倒输入时序来数据增强。

超参设置这里不讲了,具体直接看原文。

可视化结果已经放在文章开头,项目地址是https://sites.google.com/view/wenbobao/memc-net

6. 视频增强

个人感觉这里的思路很有趣,因此主要介绍一下思路和做法,细节不多赘述。

视频帧的增强任务(比如超分辨率、降噪、去块等),主流做法是通过输入连续的若干帧,提取有用的纹理信息,减少帧的失真问题(如低分辨率、噪声、块状等)。已有的方法是通过双线性插值,但是这回导致模糊。而作者之前提出的自适应变形层可以解决这个问题,生成更加准确的帧像素。

对于超分辨率任务,给定时刻 t 的帧及左右各L帧,共 2L+1 帧(连续的低分辨率帧)。先将这些帧用双二次插值上采样到目标高分辨率(之后的操作都在插值到高分辨率的图像上进行),然后估计出每一个非中心帧与中心帧的光流和补偿核,用的就是前面视频插帧用的流估计网络和核估计网络。然后用自适应变形层把这些邻近帧对齐到中心帧。沿着这些帧的像素,用预训练的 ResNet18 提取并变形上下文信息。最后,把估计的光流、估计的核、上下文信息、变形的邻近帧,连同上采样之后的中心帧一起输入到 帧增强网络(frame enhancement network,是增强任务中特别提出的一个模块) 中,得到最终的输出。

网络结构如下图:

其中,frame enhancement network 的实现如下:

之所以 frame enhancement 模块这么深是因为输入的图片是失真的(低分辨率、噪声或者块状),所以需要更为复杂的网络结构恢复出高质量结果。

另外注意到,相较于视频插帧的 MEMC-Net*,这里的 frame enhancement 少了几个模块。由于可以直接估计输入的帧,所以不需要流投影层(flow projection layer)。由于目标帧的每个像素有有效的流向量,所以也不需要遮罩估计模块(mask estimation module)。

说白了就是对中心帧及邻近多帧先上采样到目标高分辨率,但是这一步生成的中心帧图像是模糊的,然后参考之前插帧的方法,用这些初步生成的高分辨率图插帧得到最终想要的、视效良好的高分辨率图。

一句话就是,用模糊的高分辨率上下文图像,生成中心的清晰的高分辨率图。因为作者提出的插帧的方法可以解决拖影、模糊等像素插值时的问题,所以相同的思路可以用于超分辨率。至于视频帧降噪、去块,要解决的问题与超分辨率的一样,解决思路也一样,所以模型结构业余超分辨率的一样。


后续有一些消融实验以及与SOTA方法的定性定量比较,这里不多讲,直接看原文更好。


总结:

本文提出了一个数据驱动的MEMC网络,用于学习视频插帧视频帧增强。本文的模型利用了MEMC框架的有点来解决大幅动作的问题,也利用率数据驱动的基于学习的方法来提取有效特征。提出了名为自适应变形层和流投影层的两个网络层,他们被用于紧密结合所有的子网络,使得模型可以端到端训练。本文所提出的MEMC架构中广义的动作补偿对齐,使得它可以被拓展到许多视频增强任务,例如视频超分辨率,降噪和去块滤波。在多种基准数据集上的定量和定性验证表明,本文所提出的方法胜过视频插帧和视频增强领域的SOTA算法

.net excel循环插数据_[PaperReading]MEMC-Net 运动估计和运动补偿网络相关推荐

  1. .net excel循环插数据_科普:1根、2根、4根内存条插在主板内存插槽的位置

    [推荐阅读]资料下载QQ群:562718785(软件下载.精美PPT模板下载) [ctrl + t 一键美化表格] [Excel视频教学]跨表快速求和 [像高手一样对数字求和] [EXCEL如何快速统 ...

  2. .net excel循环插数据_Python实战: 如何将数据从一个Excel文件移动到另一个?

    使用Python中的Pandas库,我们可以从源Excel文件中获取数据并将其插入到新的Excel文件中,然后命名并保存该文件.当您需要深入到特定数据和/或重新格式化报表的数据时,这很有用. 作为一个 ...

  3. ssis 循环导入数据_使用集成服务(SSIS)包从Amazon S3 SSIS存储桶导入数据

    ssis 循环导入数据 This article explores data import in SQL Server from a CSV file stored in the Amazon S3 ...

  4. excel抓取数据_抓取具有要求的excel在线只读文件

    excel抓取数据 In a previous article https://medium.com/@hanqi_47643/scraping-excel-online-read-only-file ...

  5. cdatabase读取excel第一行数据_“蟒蛇”py对Excel的读取——数据操作用它,老板都得重新认识你...

    在python自动化中,经常会遇到对数据文件的操作,比如添加多名员工,但是直接将员工数据写在python文件中,不但工作量大,要是以后再次遇到类似批量数据操作还会写在python文件中吗? 应对这一问 ...

  6. python向excel隔行写数据_【Python】将每日新增数据写入Excel

    一.背景: 因为自己从网上获取了一些金融数据,也没有配置数据库,所以目前暂时是将数据以增量的形式存储在自己的OneDrive上. 二.代码演绎:导入相关数据包 import pandas as pd ...

  7. 循环造数据_项目管理数据与信息--DIKW模型

    开头的话 在PMP中,有一块内容是"项目管理数据与信息:工作绩效数据(Work Performance Data),工作绩效信息(Work Performance Information), ...

  8. sql 循环处理数据_图文介绍 SQL 的三种查询计划处理模型,Spark 用了其中两个

    我已经在之前的 <一条 SQL 在 Apache Spark 之旅(上)>.<一条 SQL 在 Apache Spark 之旅(中)> 以及 <一条 SQL 在 Apac ...

  9. js实现excel块拖拉数据_小程序导出数据到excel表,借助云开发云函数实现excel数据的保存...

    我们在做小程序开发的过程中,可能会有这样的需求,就是把我们云数据库里的数据批量导出到excel表里.如果直接在小程序里写是实现不了的,所以我们要借助小程序的云开发功能了.这里需要用到云函数,云存储和云 ...

  10. 怎样用excel剔除异常数据_(如何剔除excel表格中重复的数据)excel表格怎么剔除异常数据...

    请问 Excel 如何剔除与平均数偏差较大的数字再求平均数?谢谢. 把问题作为内容(邮件主定要包含"excel",本人以此据辨别非垃圾邮件,以免误删).excel样件(请特别注意: ...

最新文章

  1. 在博客园添加Lisp(或其它)代码高亮
  2. iis 发布MVC HTTP错误 403.14
  3. python选课系统_【精选】在Monash读Data Science,人人都拥有这样一份选课指南。
  4. laravel 查询
  5. 图像处理--线line 提取
  6. 理解一致性哈希算法(consistent hashing)
  7. 提高ASP.NET首页性能的十大方法
  8. java xmpp消息推送_基于XMPP协议(openfire服务器)的消息推送实现
  9. 深圳电大计算机等级考试报名时间2015,杭州2015下半年计算机等级考试报名
  10. RocketMQ使用mmap - TODO
  11. mybatis resultMap映射学习笔记
  12. IRP请求的完成与返回
  13. 挖金矿问题java课程设计_某15万吨金矿采矿方法课程设计
  14. 2015-2016前端知识体系(转)
  15. Itext 7 生成PDF总结
  16. Word文档转PDF后文件变小、图片不清晰解决办法
  17. 读书笔记 - 自控力
  18. 如何用计算机制作海报,用电脑怎么做海报_电脑用什么软件做海报
  19. display基础用法
  20. [组图]10个免费在线图片特效处理的网站

热门文章

  1. 11月6日云栖精选夜读:阿里云双11访谈之云安全
  2. HDU 6043 Balala Power! 思维 + 码力
  3. 上传伪技术~很多人都以为判断了后缀,判断了ContentType,判断了头文件就真的安全了。是吗?...
  4. PHP+MYSQL+AJAX实现每日签到功能
  5. linux运维生产场景常用软件工具一览
  6. 开源框架Struts:FormBean滴那些事儿
  7. Facebook vs Chrome 关公秦琼的未来之战,互联网营销
  8. 71. 尽早刷新文档的输出
  9. 1. JavaScript 与 PHP 的语法区别
  10. 跨域资源共享(CORS)-漏洞整理