iSeeBetter: 使用循环生成反向投影网络的时空视频超分辨率
斯坦福大学CS230深度学习课程项目。发表于2020年9月清华大学出版社的Springer计算机视觉媒体杂志。 这是我们论文的官方PyTorch实现。
Python3 | PyTorch | GANs | CNNs | ResNets | RNNs
PDF: SpringerLink | arXiv | amanchadha.com
其他: YouTube视频 | 海报 | PapersWithCode | ResearchGate | Mendeley | NASA ADS | SemanticScholar
我们在PapersWithCode的视频超分辨率排行榜上排名第一!
引用
如果您觉得我们的工作有趣,请引用:
@article{Chadha2020iSeeBetter,
title={{i}{S}ee{B}etter: Spatio-Temporal Video Super-Resolution using Recurrent Generative Back-Projection Networks},
author={Chadha, Aman and Britto, John and Roja, Mani M.},
journal={Springer Journal of Computational Visual Media, September 2020, Tsinghua University Press},
volume={6},
number={3},
pages={307-317},
year={2020},
publisher={Springer}
}
A. Chadha, J. Britto and M. M. Roja. iSeeBetter: Spatio-Temporal Video Super-Resolution using Recurrent Generative Back-Projection Networks. Springer Journal of Computational Visual Media, Tsinghua University Press, 6(3):1–11, 2020.
所需包
torch==1.3.0.post2
pytorch-ssim==0.1
numpy==1.16.4
scikit-image==0.15.0
tqdm==4.37.0
opencv-python==4.5.1.48
步骤0: 加载所需的Python模块:
pip3 install -r requirements.txt
此外还需要 Pyflow,这是 Ce Liu 的 C++ 实现 的 Coarse2Fine 光流算法的 Python 封装。 我们使用的 Pyflow 二进制文件是为 Ubuntu 和 macOS 与 Python 3.7 一起构建的,可在仓库中获得。 如果你需要重新构建 Pyflow,可以(i)按照以下说明操作,或(ii)参考 Pyflow Git
第 1 步:构建 Pyflow:
cd pyflow/
python setup.py build_ext -i # 构建 pyflow
python demo.py # 确保 pyflow 正常工作
cp pyflow*.so ..
第 2 步:按照下面相关部分的说明训练或测试 iSeeBetter。
简介
深度学习席卷全球!
在深度学习影响的众多领域中,超分辨率(定义为将低分辨率样本上采样为高分辨率样本)就是其中之一。
那么我为什么选择这个主题呢?我觉得可以利用我新掌握的深度学习技能来开发一些有趣的东西,同时可能推动该领域的技术水平。
让我们从一个低分辨率视频序列开始。 对这样的低分辨率视频进行超分辨率处理的最简单方法是对每一帧单独应用超分辨率。然而,这会浪费视频序列中固有的时间细节,尤其是运动模式。
所以我想,为什么不让我的算法向左看、向右看 - 使用相邻图像的细节,并用 GAN 训练它来提取复杂纹理等精细细节。
在此介绍 iSeeBetter,这是一种新颖的时空视频超分辨率方法,它使用循环反投影网络(RBPN)作为生成器,从当前帧和相邻帧中提取空间和时间信息。
我们使用超分辨率生成对抗网络(SRGAN)中的判别器作为我们的判别器。
现在,就损失函数而言,使用均方误差作为主要的损失最小化目标可以改善 PSNR 和 SSIM 这些重要的图像质量指标,但这些指标可能无法捕捉图像中的精细细节,导致对感知质量的误判。
为了解决这个问题,我们使用了由对抗损失、感知损失、MSE 损失和总变差损失组成的四重损失函数。
最后,通过大量实验,我们的结果表明 iSeeBetter 提供了更高的视频超分辨率保真度,并在绝大多数超分辨率情况下超越了最先进的性能。
概述
近年来,基于学习的模型提高了单图像超分辨率(SISR)的性能。然而,将 SISR 连续应用于每个视频帧会导致时间连贯性不足。卷积神经网络(CNN)在峰值信噪比(PSNR)和结构相似性(SSIM)等图像质量指标方面优于传统方法。然而,生成对抗网络(GAN)通过能够缓解大尺度上采样时 CNN 通常出现的精细纹理细节缺失问题,提供了竞争优势。我们提出 iSeeBetter,这是一种新颖的基于 GAN 的时空视频超分辨率(VSR)方法,可以生成时间连贯的超分辨率视频。iSeeBetter 使用循环反投影网络的概念作为生成器,从当前帧和相邻帧中提取空间和时间信息。此外,为了提高超分辨率图像的"自然性",同时消除传统算法中出现的伪影,我们利用超分辨率生成对抗网络(SRGAN)的判别器。尽管使用均方误差(MSE)作为主要的损失最小化目标可以改善 PSNR/SSIM,但这些指标可能无法捕捉图像中的精细细节,导致对感知质量的误判。为了解决这个问题,我们使用了四重(MSE、感知、对抗和总变差(TV))损失函数。我们的结果表明,iSeeBetter 提供了更高的 VSR 保真度,并超越了最先进的性能。
图 1:相邻帧相似性
图 2:网络架构
模型架构
图2展示了iSeeBetter的架构,它由SRGAN作为生成器和鉴别器组成。RBPN有两种方法从不同来源提取缺失细节,即SISR和MISR。图3显示了水平流(在图2中用蓝色箭头表示),它使用SISR放大LR(t)。图4显示了垂直流(在图2中用红色箭头表示),它基于MISR,计算LR(t)及其相邻帧(LR(t-1),...,LR(t-n))与预先计算的密集运动流图(F(t-1),...,F(t-n))的残差特征。在每个投影步骤中,RBPN观察LR(t)的缺失细节,并从相邻帧提取残差特征以恢复细节。在投影模型中,RBPN利用循环编码器-解码器机制融合从SISR和MISR中相邻帧提取的细节,并通过反投影将它们合并到估计的帧SR(t)中。一旦合成了SR帧,它就会被发送到鉴别器(如图5所示)以验证其"真实性"。
图3:用于MISR的ResNet架构,由三个五块组成,每块包含两个卷积层,使用3 x 3内核,步长为1,填充为1。网络使用参数化ReLU作为激活函数。
图4:用于SISR的DBPN架构,我们使用8 x 8内核进行上-下-上采样,步长为4,填充为2。与上面的ResNet架构类似,DBPN网络也使用参数化ReLU作为激活函数。
图5:来自SRGAN的鉴别器架构。鉴别器使用Leaky ReLU计算其激活。
图6:iSeeBetter损失函数的MSE、感知、对抗和TV损失组件
数据集
为了训练iSeeBetter,我们合并了具有不同视频长度、分辨率、运动序列和剪辑数量的多个数据集。表1总结了所使用的数据集。在训练模型时,我们通过使用双三次插值进行4倍下采样,为每个HR输入帧生成相应的LR帧。我们还应用了旋转、翻转和随机裁剪等数据增强技术。为了进一步扩展我们的数据集,我们编写了脚本从YouTube收集额外数据,使我们的数据集总数达到约170,000个剪辑,这些剪辑被随机打乱用于训练和测试。我们的训练/验证/测试分割比例为80%/10%/10%。
获取SPMCS和Vid4数据集以及Vimeo90K数据集。您也可以使用DatasetFetcher.py
获取Vimeo90K。
表1. 用于训练和评估的数据集
结果
我们将iSeeBetter与六种最先进的VSR算法进行了比较:DBPN、B123 + T、DRDVSR、FRVSR、VSR-DUF和RBPN/6-PF。
表2. 从Vid4、SPMCS和Vimeo-90k数据集中视觉检查RBPN和iSeeBetter的对比示例。我们选择VSR-DUF进行比较,因为它在发布时是最先进的。第一行:有助于可读性的精细文本特征;中间一行:复杂的高频图像细节;最后一行:相机平移运动。
表3. 使用Vid4数据集对最先进的VSR算法进行4倍放大的PSNR/SSIM评估。粗体数字表示最佳性能。
预训练模型
训练4个周期的模型包含在weights/
目录下
使用方法
训练
使用以下命令训练模型:
python3 iSeeBetterTrain.py
(在配备16GB VRAM的NVIDIA Tesla V100上,批量大小为2时,每个周期大约需要1.5小时)
测试
要使用预训练模型并在数据集中的随机视频上进行测试:
python3 iSeeBetterTest.py
使用参数--upscale_only
可以关闭初始降采样。
致谢
- LeftThomas的SRGAN实现。
- 我们使用RBPN-PyTorch作为生成器实现的基准。