基于循环反投影网络(RBPN)的视频超分辨笔记

Recurrent Back-Projection Network for Video Super-Resolution

作者:Muhammad Haris, Greg Shakhnarovich, and Norimichi Ukita

作者提出:

  • 流行的MISR或者VSR方法一般都是基于准确的运动估计和运动补偿(alignment),这个模式受到运动估计准确度的约束。RBPN希望改进这个模式。
  • 另外,在绝大多数基于CNN的方法中(包括作者之前提出的DBPN),实际上都对图像做了concat以及1*1卷积的操作,或者直接把图片输入到RNN中。concat的方法导致多张图片被同步地处理,增加了训练网络的难度。RNN中,同时处理细微和明显的变化(比如同一图片中运动剧烈和缓慢的物体)是比较困难的。
  • DBPN中的不停向后传递的residual,实际上能比较好地应对RNN中对subtle 和 significant changes乏力的问题。
  • 应用了循环Encoder-Decoder机制,用于通过反投影合并在SISR和MISR路径中提取的细节。RBPN中的这种机制扩大了RNN中的时间gap(t,t-1),使得时间跨度更大的帧也能被姣好地利用。

其实作者这样一说我就很好奇了。因为正如他所说,只要是提到了VSR + 运动估计的文献,几乎无一例外都要借助于一个精细的运动估计网络或者方法进行运动估计和运动补偿,但是效果一般有限,而且经过一些实验(比如之前的OFRNet,专门推算高分光流)表明,即使PSNR得到了一定的提升,但是这样的运动估计和运动补偿实在太容易引入伪影和帧间的不一致了。对比frame recurrent (FRVSR)和 OFRNet 网络,FRVSR的一致性非常好,这应该得益于循环利用高分帧的机制。而OFRNet相邻帧间的一致性较差,作为视频播放时(25fps)可见雪花状伪影。
另外,由于对RNN了解很少,要想理解RBPN不得不查阅相关资料


Encoder-Decoder模型

序列-序列的任务,经常采用Encoder-Decoder模型解决。参考基于Encoder-Decoder模式的机器翻译模型原理及实现
为了解决seq2seq问题,有人提出了encoder-decoder模型,也就是编码-解码模型。所谓编码,就是将输入序列转化成一个固定长度的向量;解码,就是将之前生成的固定向量再转化成输出序列。

encoder-decoder模型虽然非常经典,但是局限性也非常大。最大的局限性就在于编码和解码之间的唯一联系就是一个固定长度的语义向量C。也就是说,编码器要将整个序列的信息压缩进一个固定长度的向量中去。但是这样做有两个弊端,一是语义向量无法完全表示整个序列的信息,还有就是先输入的内容携带的信息会被后输入的信息稀释掉,或者说,被覆盖了。输入序列越长,这个现象就越严重。这就使得在解码的时候一开始就没有获得输入序列足够的信息, 那么解码的准确度自然也就要打个折扣了


网络结构

RBPN整体主要分为三个部分:初试特征提取、多投影和重建。

  1. 初始特征提取

    • MISR path:将第 I t I_t It I t − k I_{t-k} Itk帧以及其光流 F t − k F_{t-k} Ftk concat后,进行卷积得到8通道的特征张量 M t − k M_{t-k} Mtk
    • SISR path:第t帧 I t I_t It直接进行卷积得到特征张量 L t L_t Lt.
  2. 多投影

    • 通过projection module,将第k个M张量与第k-1个L张量进行投影,并输出第k个L张量和第k个高分特征H张量

    • 第k个张量再一次输入到projection module中(作者提到:“The projection module, shared across time frames,”),然后结合第k+1个M张量,生成L和H。
      基于循环反投影网络(RBPN)的视频超分辨笔记_第1张图片

    • Encoder:SISR和MISR两支路的特征输入到Encoder后,经由上采样得到高分的特征张量 H t − n m H_{t-n}^m Htnm H t − n − 1 l H_{t-n-1}^l Htn1l,求得残差后,与SISR支路的高分特征张量 H t − n − 1 l H_{t-n-1}^l Htn1l相加,得到Encoder的输出,一个高分的特征张量 H t − n H_{t-n} Htn

    • Decoder:Encoder的输出Ht-n通过残差块(即有shortcut的几个卷积层)下采样后,得到低分的张量 L t − n L_{t-n} Ltn.

    • 相当于 Encoder和Decoder之间传递的这个“向量”就是高分的特征张量 H t − n H_{t-n} Htn

公式描述如下:

  • Encoder: H t − n = Net ⁡ E ( L t − n − 1 , M t − n ; θ E ) H_{t-n}=\operatorname{Net}_{E}\left(L_{t-n-1}, M_{t-n} ; \theta_{E}\right) Htn=NetE(Ltn1,Mtn;θE)

  • Decoder: L t − n = Net ⁡ D ( H t − n ; θ D ) L_{t-n}=\operatorname{Net}_{D}\left(H_{t-n} ; \theta_{D}\right) Ltn=NetD(Htn;θD)

    Encoder中:

  • SISR upscale: H t − n − 1 l = Net ⁡ s i s r ( L t − n − 1 ; θ s i s r ) H_{t-n-1}^{l}=\operatorname{Net}_{s i s r}\left(L_{t-n-1} ; \theta_{s i s r}\right) Htn1l=Netsisr(Ltn1;θsisr)

  • MISR upscale: H t − n m = Net ⁡ mis ⁡ r ( M t − n ; θ mis ⁡ r ) H_{t-n}^{m}=\operatorname{Net}_{\operatorname{mis} r}\left(M_{t-n} ; \theta_{\operatorname{mis} r}\right) Htnm=Netmisr(Mtn;θmisr)

  • Residual: e t − n = Net ⁡ r e s ( H t − n − 1 l − H t − n m ; θ r e s ) e_{t-n}=\operatorname{Net}_{r e s}\left(H_{t-n-1}^{l}-H_{t-n}^{m} ; \theta_{r e s}\right) etn=Netres(Htn1lHtnm;θres)

  • Output: H t − n = H t − n − 1 l + e t − n H_{t-n}=H_{t-n-1}^{l}+e_{t-n} Htn=Htn1l+etn


与DBPN的关系

除了标题,这篇文章没有过分强调之前的工作DBPN,以及它对的这篇文章网络结构构建的贡献。但是不难看出,实际上作者将SISR的DBPN的up-and-down的结构扩展以及深化了。这里Encoder就类似于up,Decoder类似于down,Encoder和Decoder的级联就对应了DBPN中的up and down projection,实际上是对DBPN的完善和扩充,使得DBPN可以应对MISR以及VSR的任务。作者将back projection由同一张图的不同上/下采样(不同的up and down 的输出)扩展到相邻帧 I t − 1 I_{t-1} It1, I t + 1 I_{t+1} It+1(以及gap更大的帧 I t − k I_{t-k} Itk, I t + k I_{t+k} It+k)与当前参考帧 I t I_{t} It之间。

个人结论

  1. RBPN是一种新的做法,虽然concat了 I t I_t It,但是并不是在某一层一股脑把所有输入帧全部concat,而是在每一次project时进行concat,而且传递的低分的特征 L t − k L_{t-k} Ltk也在随着projection逐渐地更新。RBPN利用这种结构处理序列图像数据,结合了CNN对二维信息感知能力强的特点,设计了RBPN,收到了很好的效果(PSNR SSIM )

  2. 另外,网络的深度(或者说成广度?)很大。除了SISR block 是DBPN的结构之外,Encoder和Decoder的每一个block都是基于Resnet设计的。训练用的数据集很大,VIMEO 90K有80G+。作者在至少两块Titan X上训练了8天。对这样一个庞大的网络来说,它PSNR的提高可能受益于其深度。

你可能感兴趣的:(超分辨,CNN,深度学习)