不容错过!作者亲自解读 RealBasicVSR

简介: 那到底能用 RealBasicVSR 干些啥呢?下面这条经典电影片段,展示了输入和 RealBasicVSR 输出的对比,可以看到 RealBasicVSR 能够对真实视频进行复原,提高分辨率,改善画质。

小伙伴们好呀,今天给大家带来的干货是最近在 CVPR 2022 中发表的关于真实视频超分的文章 RealBasicVSR 的解读。划重点!本次是作者 Kelvin 亲自解读,还等什么呢,搬好小板凳,我们马上开课啦!

640.png

作者介绍


640.jpg

陈焯杰


陈焯杰(Kelvin C. K. Chan)是南洋理工大学 S-Lab 四年级博士生。他的研究领域包括底层视觉的各种任务,如超分辨率和去模糊。他曾在 CVPR 和 AAAI 发表五篇一作论文,并在两届 NTIRE 视频复原挑战赛中获得了七项冠军。2021 年还曾获谷歌博士奖学金。同时,他是各种会议和期刊的审稿人,并被选为 ICCV 2021 优秀审稿人。Kelvin 目前在 OpenMMLab 负责开源算法库 MMEditing 的日常维护和超分辨率算法的开发。


那到底能用 RealBasicVSR 干些啥呢?下面这条经典电影片段,展示了输入和 RealBasicVSR 输出的对比,可以看到 RealBasicVSR 能够对真实视频进行复原,提高分辨率,改善画质。

image.png

原文链接:https://mp.weixin.qq.com/s/OuAmP_U4pa9bhkNh-ebtAA


话不多说,接下来就让我们进入今天的主题吧~



背景



早期的视频超分工作通常基于非盲(non-blind)的设定,即假设视频从高分辨率退化(degrade)至低分辨率的方式已知。在非盲的设定下,我们只需要依照预定的退化方式(例如 Bicubic 下采样)生成低分视频,再使用高、低分辨率的数据对训练模型即可。


去年,BasicVSR 在视频超分模型中引入了循环神经网络(RNN),将帧的信息在时序上进行长期传播(long-term propagation)。这种方式可以利用多帧视频的信息,因而大幅提升了视频超分的效果。后续工作 BasicVSR++ 优化了 BasicVSR 的结构,进一步提升了效能。BasicVSR++ 在 NTIRE 2021 获取了三冠一亚的佳绩,也证明了长期传播在非盲视频超分中的有效性。


我们曾经在知乎上发布过这两个工作的解读,有兴趣的同学也可以参考:


BasicVSR:

https://zhuanlan.zhihu.com/p/364872992


BasicVSR++:

https://zhuanlan.zhihu.com/p/397941254


这两个工作也已经在 MMEditing 代码库中开源。


为了方便不同背景同学理解,我们预先解释一些超分领域的名词。


  • 非盲超分 (non-blind super-resolution):超分辨率的子领域。在这个任务中假设下采样的方式已知(例如 bicubic 下采样),因此可以人工生成无限训练数据。
  • 真实视频超分 (real-world video super-resolution):指在对于真实视频的超分,难点在于真实视频的退化是未知且多样化的,因此很难采集适当的数据进行训练。
  • 长期传播 (long-term propagation):指 Recurrent Network 中的传播方式。该方法把当前帧的信息传到下一帧, 从而把长期信息累积起来。代表方法有 BasicVSR,IconVSR,和 BasicVSR++。


尽管长期传播在非盲设定下取得成功,真实视频超分辨率退化的多样性和复杂性在推理和训练中还是引起了不小的挑战。


首先,虽然长期传播会在轻度退化的情况下提高性能,但严重的退化可能会通过传播被放大,从而损害输出视频的质量。为了平衡细节合成和退化抑制之间的权衡,我们发现图像预清理阶段对于在传播之前减少噪声和退化是必不可少的。配备精心设计的预清理模块,我们的 RealBasicVSR 在质量和效率上都优于现有方法。


其次,为提高模型的通用性,现实世界的视频超分模型通常利用各种退化训练,这就需要较大的 batch size 以产生稳定的梯度。增大 batch size 意味增加了计算负担,这也不得不让我们做出一些权衡取舍,包括(1)速度和性能之间的权衡,以及(2)batch size 与时序序列长度之间的权衡。


针对第一个问题,我们提出了一种随机退化方案,可以在不牺牲性能的情况下减少多达 40% 的训练时间。针对第二个问题,我们分析不同的训练设置,发现在训练期间使用更长的序列而不是更大的 batch size ,可以更有效地使用时间信息,从而在推理过程中实现更稳定的性能。


最后,为了促进公平比较,我们提出了新的 VideoLQ 数据集,其中包含大量真实世界的低质量视频,其中涵盖了丰富的纹理和模式。我们的数据集可以作为基准测试的共同基础。数据集可以从项目主页下载:

https://github.com/ckkelvinchan/RealBasicVSR


问题一:长期传播放大退化,影响输出质量



视频超分网络通过聚合来自多个帧的信息来提升细节并提高感知质量。但对于没有包括在训练数据中的退化,网络可能将其误认为是某种图像细节,不予处理,此类退化和噪声反而会通过时间传播得到增强。为了验证我们的假设,我们利用大量合成退化重新训练 BasicVSR。BasicVSR 接受任意长度的序列,允许我们通过调整序列长度来探索时间传播的影响。我们使用 Real-ESRGAN 的退化来训练 BasicVSR,这在现实世界的单图超分(Single Image Super Resolution, SISIR)中被证明是有效的。

640.png如上图左所示,在非盲设定下,当序列长度 L 增加时,BasicVSR 能够通过长期传播聚合有用信息,生成更多细节输出。相比之下,对于真实视频,虽然传播有助于在轻度退化的情况下增强细节,但是更长的序列传播可能会放大噪声和退化。我们可以看到,当仅使用一帧恢复序列时,BasicVSR 能够去除输入中的噪声并产生平滑的输出,但使用整个序列时,输出反倒产生了严重的退化。


在现实世界的 VSR 中,时间传播是一把双刃剑。虽然使用长期信息有助于合成精细的细节,但它也可能放大退化。显然,在增强细节抑制退化之间存在权衡。


预清理模块


为解决上述问题,我们提出一个简单的预清理模块,在传播之前抑制退化。大体思路是“清理”输入序列,以减低输入中的退化对后续超分网络的影响。尽管概念上很简单,但模块的设计需要特别小心。我们在这个解读中会专注介绍设计,相关分析可以到原文查找。

640.png

我们在这项工作中采用了 BasicVSR 作为超分网络,因为它通过长期传播在非盲超分辨率中具有良好的性能,并且结构简单。从上图可以看到:我们在 BasicVSR 之前加上预清理模块,输入图像首先独立地传递给预清理模块以去除退化。


动态优化 (Dynamic Refinement)


在许多具有挑战性的情况下,将图像单次输入到预清理模块并不能有效地消除过度退化。一种简单而有效的方法是将图像多次输入预清理,以进一步抑制退化。下图中我们展示了一个使用 dynamic refinement 的示例。可以看到,当仅使用一次预清理模块时,图像可以显示更多细节,但无法完全消除噪音。另一方面,当使用预清理模块五次时,输出变得不自然且细节消失。相比之下,通过我们的动态优化方案,清洁阶段会自动停止以避免过度平滑。我们看到输出包含更少的退化,同时保留了必要的细节。我们观察到在大多数情况下最多需要 3 次迭代。

640.png


问题 2 - 训练速度与性能的权衡



当使用 N 个 GPU 训练、 batch size 为 B 、序列长度为 L 时,CPU 需要在每次迭代中加载 N x B x L 个图像。在真实视频超分中,我们需要更多的图像提供稳定梯度,这就引入了严重的 I/O 瓶颈,大大减慢了训练速度。为降低 I/O 瓶颈,我们可以减小 batch size 或序列长度,但这会导致模型性能下降。


在这项工作中,我们提出了一种随机退化方案,它在不牺牲性能的情况下显着提高了训练速度。下图显示 L = 4 的说明。

640.png

在我们的随机退化方案中,我们不是在每次迭代中加载 L 帧,而是加载 L / 2 帧,并在时间上翻转序列。这种设计允许我们用相同长度的序列进行训练,同时将 CPU 的负荷减少一半。然而,在这样的设置中,网络能感知的内容变少,并且网络有机会利用序列在时间上翻转的捷径。为了提高数据的多样性,我们将每一帧的退化建模为一个随机游走(Random Walk)。具体来说,设 p_i 是与应用于第 i 帧的退化相对应的参数。


如下图所示,与传统的训练方案相比,直接翻转序列会导致性能相似或质量下降。例如,线图案的方向由于输入中的混叠效应而失真。当使用随机退化时,网络对退化的变化更加鲁棒,从而提高了性能。此外,如下表所示,通过减少处理的图像数量,CPU 的负荷显著减少。结果,I/O 瓶颈得到改善,训练时间减少多达 40% 而不牺牲性能。(不同的硬件可能导致不同级别的瓶颈,和不同级别的加速。)

640.png

问题 3 -  batch size 与序列长度的权衡


在显存资源固定的情况下,训练真实视频超分模型时增加的 batch size 不可避免地导致序列长度的减少。一方面,更大 batch size 的训练使网络能够在每次迭代中感知更多的退化和场景内容,从而产生更稳定的梯度。另一方面,使用更长的序列进行训练可以让网络更有效地使用长期信息。但是,当计算资源有限时,必须在更大的 batch size 或更长的序列之间选择。在本节中,我们使用 B x L = 480 的约束来训练 RealBasicVSR,并讨论这些模型的性能。

640.png

如上图所示,当使用 B = 48 ,L = 10 进行训练时,输出出现严重的颜色退化和扭曲的细节。当我们增加序列长度时,这种不良效果会减少。特别是,当 L 从 10 增加到 20 时,颜色退化显着减少,并且在 L 增加到 30 时进一步消除。


上面的比较表明,用更长的序列进行训练是可取的。我们推测,由于训练和推理之间的 domain gap,用短序列训练的网络在推理过程中不能适应长序列。为了进一步证明长序列在训练中的重要性,我们将 B 固定为 16,并将 L 从 30 减少到 10。可以观察到,当 L 减少时,相应的区域显示出相同的颜色退化和模糊。与 B = 48,L = 10 的情况相比,我们发现此类退化没有那么严重。因此,我们建议在施加计算约束时采用更长的序列。


VideoLQ 数据集



为了评估真实视频超分方法的泛化性,一个涵盖广泛的退化、內容和分辨率的基准是必不可少的。大多数现有数据集只关注 bicubic 下采样等合成退化,因此它们不能反映真实视频超分方法的功效。在这项工作中,我们提出了 VideoLQ 数据集。视频示例如下图所示:

640.png

我们的 VideoLQ 数据集中的视频是从各种视频网站(如 Flickr 和 YouTube)下载的,具有 Creative Commons 许可证。为了确保视频的多样性,我们选择具有不同分辨率和内容的视频,以覆盖尽可能多的退化。对于每个视频,我们提取 100 帧的序列,不允许场景转换,以便评估依赖于长期传播的方法。选择序列以包含足够的纹理或文本以便于比较。此外,还包括 Vid4 中的 Ground-truth 视频。


现有方法比较



下图展示了我们的 VideoLQ 数据集上的真实示例。配备图像预清理模块,RealBasicVSR 能够通过传播有效地聚合长期信息。因此,它会在精细区域生成更多细节,从而提高视觉质量。例如,只有 RealBasicVSR 能够恢复单词 “hobby”,这在其他帧中可以清楚地看到。RealBasicVSR 的惊人结果证明了它对真实视频的有效性。

640.png

除了定性结果,我们还提供定量测量作为参考。与现有方法相比,RealBasicVSR 以更快的速度在所有指标上实现更好的性能。特别是,RealBasicVSR 以 17x 的速度超过了最近的 RealVSR。与使用类似训练退化的 Real-ESRGAN 相比,RealBasicVSR 以更低的复杂度和更快的速度获得了更好的表现。

640.png

上述方法仅使用了单个图像或短期信息。虽然这些方法在去除退化方面表现显著的改进,但它们无法有效地恢复输入图像及其相邻帧之外的细节,这需要聚合来自远距离帧的信息。相比之下,RealBasicVSR 探索了在真实视频超分中利用长期信息的可能性,我们的定性和定量结果都显示了 RealBasicVSR 在利用此类信息进行细节合成方面的有效性。


结语



现有视频超分研究都认同长期传播有利于恢复。然而,这种讨论仅限于非盲设定。在这项工作中,我们探讨时间传播在真实视频超分中的贡献,并发现长期信息也有利于这项任务,但由于多样化和复杂的退化,长期信息会带来额外的问题。


作为一项探索性研究,我们研究真实视频超分中的几个挑战,包括退化的 domain gap 和增加的计算成本导致的各种挑战和权衡,并提供各自的解决方案。希望我们分享的研究发现、VideoLQ 数据集,可以在一定程度上启发未来在真实视频超分中的工作。


文章来源:【OpenMMLab

2022-03-17 18:05


目录
相关文章
|
11月前
|
C语言
【CSDN 2022年度征文】不负韶光,以梦为马
【CSDN 2022年度征文】不负韶光,以梦为马
69 0
|
算法
2022年终总结 | 我与CSDN的那些事,如何两个月成为一名万粉博主
Hello大家好,这里是每天都在努力学习后端的小王同学,遇见即是缘分,欢迎光临我的世界~
148 0
2022年终总结 | 我与CSDN的那些事,如何两个月成为一名万粉博主
CSDN竞赛第六期第二题(C++)
鬼画符门,每年都会统计自己宗门鬼画符消耗的数量,往年一直是大师兄管理,但是这次鬼艺接手了,你能帮鬼艺写一个程序统计每年消耗数量最多的鬼画符吗? 注解(这题是一道找出出现次数最多的字符串的一道题目) 输入描述: 第一行输入整数n.(1<=n<=1000)以下n行输入n个字符串,代表消耗的鬼画符。 输出描述: 输出消耗数量最多的鬼画符(字符串),无需考虑多种鬼画符消耗数量相同的情况。 示例1 输入 5 red red green green hen 输出 red
130 0
|
存储 JSON 前端开发
如何盘点出掘金的年度高赞文章?
我的新年 Flag ,就是掘金等级到达 V4,而对于绝大多数读者来说,新年 Flag 中是否有“学习”这一项呢,对于我来说,我也是,于是就有萌生一个想法,我想统计出掘金的年度高赞文章。
315 0
|
数据采集 移动开发 缓存
坚持写一年的技术博客, 我收获了这些 | 掘金年度征文
在技术平台写文章差不多一年了, 累计写了150多篇, 基本涵盖了前端的每一个角落, 也是笔者4年工作中的实践和学习积累. 中间踩过很多坑, 也从中积累了很多解决问题的方法和思路. 虽然牺牲了很多业余时间, 但也给我带来了很多收获. 笔者将利用2020年的最后几天, 好好回顾一下这一年的学习和坚持写作的收获.
151 0
|
中间件
「技术人生」专栏作者来直播间啦!欢迎来提问
4月7日(下周四)15:00,技术人生专栏作者 贺科学(晨末)将在阿里巴巴中间件视频号与读者们现场互动,据说还带来了诚意满满的惊喜~
509 1
「技术人生」专栏作者来直播间啦!欢迎来提问
|
运维 安全 前端开发
《乘风者周刊》专家博主:葛小虎——愿永远不要停止学习
随着阿里云开发者社区焕新升级,推出“乘风者计划”,来自五湖四海的开发者在这里创作文章、结识同伴、实现自我。对于更多的新人走进社区,葛小虎总结了自己的经验,分享给他们。
22772 1
《乘风者周刊》专家博主:葛小虎——愿永远不要停止学习
|
程序员 前端开发
云栖社区首篇博客
开启云栖博客
1113 0