Video Enhancement with Task-Oriented Flow(TOFlow)
2018-03-24 19:41
2211 查看
Video Enhancement with Task-Oriented Flow(TOFlow)论文笔记
介绍
曾经的视频超分辨方法都包含了两个重要的模块:动作估计和超分辨,其中动作估计大都是用CNN推测出光流flow来实现的。推测出光流的目的,主要是为了把输入的几帧图像(It−1,It,It+1It−1,It,It+1)扭曲到同一位置上(It−1−>It,It,It+1−>ItIt−1−>It,It,It+1−>It)以方便后续处理。大多数生成光流的基准都是要让warp后的图像和ItIt基本一致。然而这种“精确”的光流估计基于亮度一致性的假设(不知道是什么),在变化的光照姿势动作等情况下效果很差,并且计算量过大。更重要的是,这种完全符合物体动作的动作估计,可能不是视频处理中最好的表达方式。
因此作者提出了TOFlow模型来改善视频超分辨中关于光流的部分,主要的不同点是没有单独训练光流,而是整个网络联合训练,去学习某个任务重最适合表达特征的光流。该模型可以用在视频插值、去噪、超分辨三个方面,优点在于视频处理效果好,计算量小,并且可以是自监督的。
另外,像Youtube-8M这样的视频数据集分辨率太低,并且有明显的动作模糊。作者引进了新的数据集Vimeo-90K,分辨率大都在720p或更高。
Task-Oriented Flow 样例
在介绍网络前,先用一个直观的例子来说明TOFlow的好处。在frame interpolation中,如果用ground truth进行warp(左上),会出现光流中常见的occlusion问题,导致有两帧重叠起来的结构(doubling artifact),后续的差值自然也会有这样的现象。但用TOFlow的话,“the background should be static, but it has non-zero motion”(不知该怎么翻译)。虽然背景是模糊的,但它可以帮助减少doubling artifact。
同样在video denoising中,由于噪点的影响,使用GT Flow的话生成效果很差,但用TOFlow的话几乎不存在这种问题。这表明TOFlow能有学会用邻近的像素来修补图像,减少噪点。
模型
整个模型结构如下图。输入的帧数为N(插值N=3,去噪和超分辨N=7)。Flow Estimation模块有N-1个结构相同参数共享的光流网络,主要是使用Spynet的多尺度动作估计框架。在插值任务中,reference frame是需要生成的帧,而非网络的输入。因此需要两个光流网络,每个网络的输入都是1和3帧,分别预测出从2到1和从2到3的运动场(不是很确定,需要等以后看源码)。
Image Transformation模块用上一步推测出的运动场,把输入帧register到参考帧。作者使用了用双线性插值的spatial transformer network。它的一大优点是可以反向传播。
mask prediction network:它是为了减少类似doubling artifact的现象,可选可不选。它把两个运动场v21v21和v23v23作为输入,估计出occlusion mask。它主要是用于插值任务,不说具体细节了。
最后,Image Processing模块生成最终结果。具体的模型结构可以见附录。这里只说超分辨。模块有四个卷积层+RELU层,卷积核分别为9*9,9*9,1*1,1*1;通道数为64,64,64,3。
训练(超分辨)
首先预训练Flow Estimation Network。在Sintel数据集上,优化目标是估计出来的光流和标签的l1l1距离。之后再增加噪声或模糊继续训练,以增强其鲁棒性。插值任务还会预训练Mask Network。
最后的联合训练,是优化恢复的帧与标签之间的l1l1距离,对动作估计模块没有任何的监督。
优化器使用ADAM,学习率1e-4,权重衰减率1e-4,在大小为1的batch上跑15个周期(大小才1??)。
实验
作者做了两个网络版本:Fixed Flow:首先预训练动作估计,然后固定动作估计部分训练视频处理;TOFlow:联合训练所有模块。只说超分辨,另外比较的算法是DeepSR和BayesSR两个。测试集是BayesSR中引进的数据集和Vimeo SR。实验结果表明,7帧的TOFlow在效果很好,和全输入的BayesSR也能一比。
另外把几个不同任务的光流图提出来比较,可以发现不同任务所需要的光流差异明显。比如插值的光流非常光滑,超分辨的在纹路边缘上十分清晰。
相关文章推荐
- Build Your Own Video Community With Lighttpd And FlowPlayer (Debian Etch)
- non-linear stationary subspace analysis with application to video classification
- [git] HOWTO work with git flow
- Broadcasting video with Android - without writing to local files
- silverlight: how to programming with video device
- ValueError: Attempt to reuse RNNCell <tensorflow.contrib.rnn.python.ops.core_rnn_cell_impl.BasicLSTMCell object at 0x7f1a3c448390> with a different variable scope than its first use.解决方法
- An introduction to Generative Adversarial Networks (with code in TensorFlow)
- Execution failed for task ':app:compileDebugJavaWithJavac'. Failed to create MD5 hash for file ...
- How to deal with Windows Schedule&Task by PowerShell in Win7
- Correct Smartphone Video Orientation and How To Rotate iOS and Android Videos with ffmpeg
- 【论文:麦克风阵列增强】Signal Enhancement Using Beamforming and Nonstationarity with Applications to Speech
- A Class To Hide Show Task Bar (Works With XP)
- convert video/audio file to audio format with ffmpeg
- 170620 How to install tensorflow with GPU on linux
- tensorflow.python.framework.errors.InvalidArgumentError: Input to reshape is a tensor with xxx value
- How to Train a ChatBot with the TensorFlow and Google Cloud ML
- Beyond Caption To Narrative: Video Captioning With Multiple Sentences
- How to build monitoring system with Face Recognization by HTC Hero、VideoLAN and EmguCV.
- Hierarchical Recurrent Neural Encoder for Video Representation with Application to Captioning
- taskscheduleR: R package to schedule R scripts with the Windows task manager