经典视频超分论文总结2

书接上回,咱继续写paperwithcode中VID4排行榜上的论文

相关的论文可以查看地址
经典视频超分论文总结1
经典视频超分论文总结2
经典视频超分论文总结3
经典视频超分论文总结4
经典超分论文总结5

7、Detail-revealing Deep Video Super-resolution(DRDVSR, ICCV2017)

港中文的工作,贾佳亚大佬背书,虽然有公开代码,但是直接使用pb文件,所以无法查看具体模型。即使把pb用tensorboard可视化出来也超级乱。网络整体结构如下:
在这里插入图片描述

7.1 先说一下动量估计(Motion Estimation, ME)

直接采用第一篇讲解中VESPCN的MCT模块获得光流预测图F,该部分不需要原文模块中最后的warp操作。

7.2 主要说一下SPMC

这部分所有分析都说很重要,但是原文讲的我感觉蛮乱的,而且使用的字母表达和下图中字母也不一样。比如文中示用 J L J^{L} JL J H J^{H} JH表达图像,下面图示又是用 I L I^{L} IL Y Y Y。你再看看上面图示,又是 I L I^{L} IL J H J^{H} JH。我建议不要看图示了,直接看公式,因为这俩也不匹配。

SPMC包含采样栅极发生器(Sampling Grid Generator)和图像采样器(Image Sampler)前者用于将光流放大,后者用于将图像放大并与光流结合。

7.2.1 采样栅极发生器(Sampling Grid Generator)

F = ( u , v ) F=(u, v) F=(u,v),图像坐标 ( x , y ) (x, y) (x,y)。坐标转换表示为:

这时候得到的 ( x s , y s ) (x^{s}, y^{s}) (xs,ys)还只是坐标变换值。
代码实现很简单:

mapping = (get_coords(img) + flow) * scale

7.2.2 可导的图像采样器(Differentiable Image Sampler)

这段甚是麻烦,作者网络实现都还没讲清,就介绍可导性了。图像采样的实现公式表达如下

其中 M ( x ) = m a x ( 0 , 1 − ∣ x ∣ ) M(x) = max(0, 1 − |x|) M(x)=max(0,1x),为双线性插值核。看公式很简单,将采样后的坐标 ( x p s , y p s ) (x^{s}_{p}, y^{s}_{p}) (xps,yps)放大后的坐标 ( x q , y q ) (x_{q}, y_{q}) (xq,yq)做差,然后计算双线性插值,再与原图 J p L J^{L}_{p} JpL相乘。
但问题是1)坐标与LR图像相乘的意义是什么?2)对LR的坐标p求和,又是什么意义?表示双线性插值的那个求和吗?
我个人觉得具体实现是这样的:一般的warp得到光流F后,直接在LR空间对LR图像进行warp。得到的结果依旧是在LR空间的。本文作者将光流F通过乘以系数 α \alpha α变换到HR空间,同时将LR图像也经过双线性插值变换到HR空间,然后在HR空间进行warp。个人能力有限,欢迎大佬拍砖解答

7.2.3 SPMC优点

1)将第0帧映射到第i帧,而非其他常用的超分方法将第相邻帧映射到中间帧。
2)提升动量补偿可以直接就产生高质的SR结果,因此用SPMC。
3)在动量补偿时同时扩大尺寸

7.3 最后聊聊细节融合网络(Detail Fusion Net)

J H J^{H} JH是大尺寸,而且稀疏具有很多0,所以先降采,然后中间使用LSTM融合多帧信息。此处有个点说之前的VSR可以产生尖锐边缘,但不知道是输入帧固有的,还是从额外数据学的,经过证明发现只有真实的HR细节有用

7.4 loss

phase1: ME时使用L1 loss
phase2: DF时使用L2 loss
phase3: 最后用上述两者联合训练

8、Recurrent Back-Projection Network for Video Super-Resolution(RBPN,CVPR2019)

这篇很好理解,大概看图就懂。代码
与其他网络通过warp或者stack将多帧堆叠在一起不同,本文将每对(距离当前帧相同远的)上下文信息帧作为分开的信息源。意思就是👇图一样,每个 I t − n I_{t-n} Itn F t − n F_{t-n} Ftn单独和 I t I_{t} It输入网络。
在这里插入图片描述
其中F为预先得到的光流图。代码实现为:

def get_flow(im1, im2):
    im1 = np.array(im1)
    im2 = np.array(im2)
    im1 = im1.astype(float) / 255.
    im2 = im2.astype(float) / 255.
    
    # Flow Options:
    alpha = 0.012
    ratio = 0.75
    minWidth = 20
    nOuterFPIterations = 7
    nInnerFPIterations = 1
    nSORIterations = 30
    colType = 0  # 0 or default:RGB, 1:GRAY (but pass gray image with shape (h,w,1))
    u, v, im2W = pyflow.coarse2fine_flow(im1, im2, alpha, ratio, minWidth, nOuterFPIterations, nInnerFPIterations,nSORIterations, colType)
    flow = np.concatenate((u[..., None], v[..., None]), axis=2)
    #flow = rescale_flow(flow,0,1)
    return flow

网络分为三部分。

8.1、初始特征提取(Initial feature extraction)

如上图所示,就是一个卷积。

8.2 多个投影 (Multiple Projections)

公式和图像都很容易理解,将 L t − n − 1 L_{t-n-1} Ltn1 M t − n M_{t-n} Mtn输入Encoder网络,得到输出 L t − n L_{t-n} Ltn用于下一投影的输入, H t − n H_{t-n} Htn用于重建

8.3 重建

多个 H t H_{t} Ht concat然后卷积

9、Frame-Recurrent Video Super Resolution (FRVSR,CVPR2018)

google大佬18年工作,但是效果比很多19,20的还要好。

9.1 摘要

本文认为当前的VSR是把多帧图输入,得到一帧HR结果,然后划窗式移动。但是缺点在于1)每个帧处理和warp很多次,增加计算消耗。2)每个输出帧都是根据输入帧独立估计的,这限制了系统产生时间一致结果的能力。(bb一下:这句对比RNN就知道他在说什么了,rnn会一直把隐藏信息向后传)。本文提出帧循环的RNN框架,用之前推断的HR帧推测之后的帧。这自然会鼓励时间一致的结果,并通过在每个步骤中仅扭曲一个图像来降低计算成本。此外,由于其循环性质,所提出的方法能够在不增加计算需求的情况下同化大量先前的帧。(bb一下,我觉得不怎么能,因为rnn问题就是记不住太长序列,要不然也不会有LSTM)

9.2 网络结构

网络结构还是蛮简单的,基本看图就能理解,简单提几点。
整体架构
1、图中显示了RNN一次循环的过程,输入图像有 I t I_t It I t − 1 I_{t-1} It1,上一帧的输出 I t − 1 e s t I^{est}_{t-1} It1est会继续用于当前帧的输入。
2、 F L R F^{LR} FLR 经双线性插值得到 F H R F^{HR} FHR
3、 L f l o w L_{flow} Lflow用于学习FNet,将warp后的 I t − 1 L R I^{LR}_{t-1} It1LR I t L R I^{LR}_{t} ItLR做L2 loss。 L s r L_{sr} Lsr用于学习SRNet。

9.3 FNet和SRNet的网络结构

在这里插入图片描述
如图,上面是FNet,下面是SRNet。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值