这篇文章是BasicVSR的 升级版本 \colorbox{tomato}{升级版本} 升级版本,同一批作者将BasicVSR中的Propagation和Alignment部分进行了增强产生了新一点VSR方法——BasicVSR++
。具体而言,Propagation采用了一个Grid-Propagation来重复校正对齐的准确性;更重要的是提出了一个具有二阶马尔可夫性质的跨格点传播机制以及光流引导的可变形卷积对齐模块。通过这3个改进,Basic++取得了SOTA的表现力以及获得了2021年超分挑战赛NTIRE的冠军!
参考目录:
①源码
BasicVSR&IconVSR \colorbox{dodgerblue}{BasicVSR\&IconVSR} BasicVSR&IconVSR
BasicVSR利用其双向循环传播结构成功在视频超分的benchmarks上取得了不错的表现力。此外IconVSR在BasicVSR的基础上引入了Coupled-Propagation
来使得前向传播的时候可以使用后向传播的信息;Information-refill
通过额外的特征提取模块来弥补因为长序列传播累积下来的关于遮挡、边界所造成的对齐误差引起的细节损失。
BasicVSR和IconVSR还是有缺陷的,更何况BasicVSR更多是作为VSR研究的baseline,那么还有哪些改进空间呢?
Propagation
部分:①BasicVSR的两个分支是独立进行对齐的,虽然后续会融合,但是如果对齐出现误差,那么融合进行超分会弱化表现力;IconVSR利用Coupled-Propagation将后向分支的对齐结果加入到前向中,的确有助于解决遮挡问题,但是前向的信息是否也可以加入到后向中去呢?答案是可以的,比如对于边界问题,后向在对齐的时候因为没有前面帧关于边界的特征信息,故这部分边界的对齐是找一些不存在不相关的像素去代替的,而这部分不存在的信息就需要前向中的特征信息来帮助补充,IconVSR通过引入information-refill来解决。②两种方法的propagation都是基于一阶马尔可夫性质,每次只接受相邻的隐藏信息 h h h,虽然 h h h包含了之前较长序列中的特征信息,但是经过长序列的传播,对齐中的误差会使得这一特征信息产生偏差;而且每经过1次对齐,就会对上一次的特征信息有所衰减,而更久的特征信息衰减地越厉害(这就好比正如DRCN中所说,SISR中较深的深层特征提取会损失原始图像的信息,故需要加入skip connection来进行补充)。③虽然IconVSR引入information-refill去缓解长序列对齐造成的误差堆积,但毕竟也是基于稀疏的的关键帧来做,故也只是每隔一定的 i n t e r v a l s intervals intervals才缓解一下,是否存在着类似于VESPCN、EDVR这种coarse-to-fine的精确化对齐呢?答案是有的,即BasicVSR++的Grid-Propagation。Alignment
部分:虽然两者的对齐都是基于feature-wise,但毕竟也是依靠光流(flow)来做对齐,而flow-based有3个明显的缺陷:①高度依赖于光流估计的精确性,一旦运动估计出错,那么最终在feature map上的warp就会出现artifacts;②two-stage分2步,先做光流估计,然后做隐式的运动补偿(warp),故速度上会较慢一些;③Flow-based在做对齐的时候,其warp只能根据一个位置通过光流获取像素值,这种做法相对于DCN而言,探索性较差。Note:
BasicVSR++ \colorbox{yellow}{BasicVSR++} BasicVSR++
针对上述两个部分,BasicVSR++提出了自己的改进:
归功于上述在BasicVSR上的改进,BasicVSR++不仅取得了SOAT的表现力,在和BasicVSR类似的参数量下(BasicVSR++(S):轻量版本BasicVSR++),实现了 + 0.82 d B +0.82dB +0.82dB的增益,如下图所示:
BasicVSR++在NTIRE 2021超分挑战赛获得了3项第一名!
关于BasicVSR和IconVSR的相关内容可参考我的另一篇超分之BasicVSR。
Note:
recurrent
方法,都是同一批作者所推出。和sliding-windows方法不同,这三种方式在对齐的时候,被对齐对象并不是参考帧的相邻支持帧的feature map,而是比如前线分支中是当前参考帧之前所有帧的对齐特征 h h h,它存储了过去所有对齐的结果,当然由于长距离不断地对齐,输入到当前帧的 h h h更加偏向于最近几帧的特征(比如 h i − 1 h_{i-1} hi−1更多是和 x i − 1 x_{i-1} xi−1的特征对齐),而较远距离的对齐特征就会衰减了一些,后向分支也是一样的情况。在BasicVSR中,作者将VSR重新设计分为4个功能块:Propagation、Alignment、Aggregation、Upsampling。
BasicVSR&IconVSR&BasicVSR++ \colorbox{violet}{BasicVSR\&IconVSR\&BasicVSR++} BasicVSR&IconVSR&BasicVSR++
在Propagation
部分,IconVSR引入Coupled-Propagation来对BasicVSR做改进;接下来BasicVSR在IconVSR基础上进一步引入Grid-Propagation和Second-order grid propagation做改进。
在Alignment
部分,BasicVSR和IconVSR一样,而BasicVSR++进一步引入flow-guided deformable alignment来做改进。
在Aggregation
部分,BasicVSR++和BasicVSR一样没做改进,故并没有使用information-refill。
在Upsampling
部分,三者基本一样的。
接下来我们具体分析BasicVSR++的3个 创新点 \colorbox{tomato}{创新点} 创新点:
略
上图是BasicVSR和BasicVSR++的对比:
Propagation
部分:①BasicVSR++增加了image之后的特征提取层,由一系列残差块组成;②增加了Second-Order Propagation和前后向之间的Grid-Propagation;③增了又一对的前后向分支;④增加了skip connection
来将原始特征信息直接输送到高层和上采样之后的结果相结合。Alignment
部分:将flow-based的feature-wise对齐方式更新为flow-guided deformable alignment。这里 skip connection \colorbox{yellow}{skip connection} skip connection的作用:
二阶格点传播(SOGP)可分为格点传播(GP)和二阶传播(SOP)两小部分。
Grid Propagation \colorbox{lavender}{Grid Propagation} Grid Propagation
BasicVSR++的整体框架结构长得像格子状,这是因为作者增加了Grid Propagation机制。简单来说格点传播机制就是在BasicVSR基础上增多增加几对前后向分支,并结合IconVSR中Coupled-Propagation机制,在前后向之间建立联系,也就是说不仅仅只是后向输送对齐特征到前向中,Grid-Propagation还将前向输送到后向中去。这样不仅可以解决遮挡问题,还可以有效处理边界情景问题:
①对于边界问题:因为前向特征信息可以为后向提供其并不拥有的边界信息,而这一边界信息在前向特征中是一定有的,边界的特征对齐可以通过这种方式得到补充,这就类似于IconVSR的information-refill机制,但Grid-Propagation处理的更加简单高效,因为它不需要额外增加一个额外的特征提取模块(IconVSR通过一个EDVR来做的,占有了一定的模型量)。关于边界问题具体如下图所示:
②对于遮挡问题:这就和IconVSR一样了,将后向分支的信息传到前向中去,来使得前向在对齐的时候,可以有相关的像素可以得到补充,具体如下所示:
当第一帧对齐第二帧的时候,如果有了后向分支中未来帧(比如上图中的第三帧)的特征信息,就可以在第一帧对齐的时候使用,因为本身第一帧是没有树干的信息的,通过后向和前向的连接之后,前向分支在对齐的时候就能更好的处理。
Note:
Second-Order Propagation \colorbox{gold}{Second-Order Propagation} Second-Order Propagation
个人认为SOP其实就是个对齐块之间的skip connection,作者将其理解为是一个二阶马尔科夫链的过程,主要是因为如上图所示,当前帧的对齐除了接受上一个块的对齐特征 h t − 1 h_{t-1} ht−1以外,还要接受上上个块的对齐特征 h t − 2 h_{t-2} ht−2。这种跳跃连接的好处在于:
②对于细节区域:由于可以利用直接利用较远的特征信息,就可以获取更多不同的位置信息,对于细节区域的重建是很有帮助的,具体细节区域的重建效果如下所示(只是举个大致例子,并不是真的BasicVSR++的效果):
将上述2部分结合之后就是Second-Order Grid Propagation,接下来我们用数学表达式来分析整个前向过程(后向也是同样的原理分析,只是输入流的方向改变了):
设 x i x_i xi表示第 i i i个时间步的输入image; g i g_i gi代表第 i i i个时间步对输入image做特征提取的feature map; f i j f_i^j fij表示第 i i i个时间步、第 j j j个分支(正向和反向是一起计数的)的对齐且校正过的feature map,特别的 f i 0 = g i f^0_i=g_i fi0=gi,则前向分支中每个格点的表达式为:
s i → i − 1 , s i → i − 2 = S ( x i , x i − 1 ) , S ( x i , x i − 2 ) , f ^ i j = A ⟨ g i , f i − 1 j , f i − 2 j , s i → i − 1 , s i → i − 2 ⟩ . (1) s_{i\to i-1},s_{i\to i-2} = \mathcal{S}(x_i, x_{i-1}), \mathcal{S}(x_i, x_{i-2}),\\ \hat{f}_i^j = \mathcal{A}\bm{\langle} g_i,f^j_{i-1}, f^j_{i-2}, s_{i\to i-1}, s_{i\to i-2}\bm{\rangle}.\tag{1} si→i−1,si→i−2=S(xi,xi−1),S(xi,xi−2),f^ij=A⟨gi,fi−1j,fi−2j,si→i−1,si→i−2⟩.(1)其中 f ^ i j \hat{f}_i^j f^ij表示经过flow-guided deformable alignment之后对齐feature map,它包含了 i − 1 , i − 2 i-1,i-2 i−1,i−2时间步之前所有的对齐信息,当然有一定程度的衰减; s i → i − 1 , s i → i − 2 s_{i\to i-1}, s_{i\to i-2} si→i−1,si→i−2分别表示第 i i i帧到第 i − 1 , i − 2 i-1,i-2 i−1,i−2帧的光流;算子 S ( ⋅ ) \mathcal{S}(\cdot) S(⋅)表示光流估计,在BasicVSR和BasicVSR++中都使用SPyNet完成,它更加简单和高效(VESPCN中的光流估计使用一些简单CNN的堆叠)。接着我们将来自后向分支的对齐feature map拿过来进行concat,然后再送进特征校正模块中改善一下,具体表达式为:
f i j = f ^ i j + R ⟨ c ( f i j − 1 , f ^ i j ) ⟩ . (2) f_i^j = \hat{f}^j_i + \mathcal{R}\langle c(f_i^{j-1},\hat{f}_i^j) \rangle.\tag{2} fij=f^ij+R⟨c(fij−1,f^ij)⟩.(2)
Note:
上面提到过,flow-free对齐方法,比如TDCN可以不高度依赖于光流估计的准确性,因为其探索能力较强,最终的输出不仅仅取决于1个点的偏移;其次DCN对齐方法对于遮挡情景所展现的重建效果也越好,故BasicVSR++决定采用基于flow-free的DCN来做对齐,但是DCN的训练很难,过程中较不稳定,故作者通过额外的flow-based对齐来引导DCN中offset的学习,接下来我们介绍整个对齐过程 A \mathcal{A} A,和SOGP一样,我们只介绍前向对齐过程,且为了便于讨论,只分析单个分支,故忽略分支计数符号 j j j,整个对齐模块内部框图如下:
在正式介绍之前,我们需要明白为何可以用光流来引导offset的学习?
在这篇文章Understanding Deformable Alignment in Video Super-Resolution中揭示了DCN-based对齐和flow-based对齐之间的强相关性,DCN中的每一个offset都和光流有着高度的相似性,但存在着微小的差别,它们之间的shape大致都类似,可能只是预测的运动方向不同,而DCN最终在每一个位置warp的结果是多个offsets的总和,他们之间的关系如下所示(只是大致描述,offsets表示最终1个卷积核内所有offsets):
有了这一层关系在,我们只要限定offsets在事先计算好的光流周围,或者说让它两的距离很靠近,这样的话offset就不会溢出,其训练的稳定性也会大大增加。限定这种情况大致有2种方法:①像Understanding Deformable Alignment in Video Super-Resolution这篇文章中那样,设置offset-fidelity损失函数最小化flow和每个offset的距离;②像本文中BasicVSR++那样,通过设置残差结构来减轻offsets的训练压力。
Note:
一、一阶传播下的对齐 \colorbox{violet}{一、一阶传播下的对齐} 一、一阶传播下的对齐
①首先是一次预对齐过程:
f ˉ i − 1 = W ( f i − 1 , s i → i − 1 ) . (3) \bar{f}_{i-1} = \mathcal{W}(f_{i-1}, s_{i\to i-1}).\tag{3} fˉi−1=W(fi−1,si→i−1).(3) W ( ⋅ ) \mathcal{W}(\cdot) W(⋅)做的就是BasicVSR做的对齐,采用flow-based但基于feature-wise的对齐方式; s i → i − 1 s_{i\to i-1} si→i−1表示第 i i i帧对第 i − 1 i-1 i−1帧的光流; f ˉ i − 1 \bar{f}_{i-1} fˉi−1表示和 x i x_i xi对齐的feature map(本质是STN类方法warp可以在image或者feature map上均可),我们可以将这个过程理解为一次粗糙的对齐。
②然后我们要利用光流对齐的结果 f ˉ i − 1 \bar{f}_{i-1} fˉi−1和光流 s i → i − 1 s_{i\to i-1} si→i−1来引导DCN中offset
和modulated scalars
的学习:
o i → i − 1 = s i → i − 1 + C o ⟨ c ( g i , f ˉ i − 1 ) ⟩ ⏟ o f f s e t ⏞ r e s i d u a l , m i → i − 1 = σ ⟨ C m ⟨ c ( g i , f ˉ i − 1 ) ⟩ ⏟ m o d u l a t e d s c a l a r s ⟩ . (4) o_{i\to i-1} = \overbrace{s_{i\to i-1} + \underbrace{\mathcal{C}^o\langle c({\color{tomato}{g_i}}, \bar{f}_{i-1}) \rangle}_{offset}}^{residual},\\ m_{i\to i-1} = \sigma\langle \underbrace{ \mathcal{C}^m\langle c({\color{tomato}{g_i}},\bar{f}_{i-1}) \rangle}_{modulated\;scalars} \rangle.\tag{4} oi→i−1=si→i−1+offset Co⟨c(gi,fˉi−1)⟩ residual,mi→i−1=σ⟨modulatedscalars Cm⟨c(gi,fˉi−1)⟩⟩.(4)Note:
③最后进行DCN过程,可以看成是一次精细的对齐:
f ^ i = D ( f i − 1 ; o i → i − 1 , m i → i − 1 ) . (5) \hat{f}_i = \mathcal{D}(f_{i-1};o_{i\to i-1},m_{i\to i-1}).\tag{5} f^i=D(fi−1;oi→i−1,mi→i−1).(5)
二、二阶传播下的对齐 \colorbox{violet}{二、二阶传播下的对齐} 二、二阶传播下的对齐
因为存在二阶传播,因此一种简单的想法就是分别做2次一阶对齐,即对 f i − 1 、 f i − 2 f_{i-1}、f_{i-2} fi−1、fi−2都做一次上面的过程,但是显然这样非常消耗计算资源,并且其实 f i − 1 、 f i − 2 f_{i-1}、f_{i-2} fi−1、fi−2是相关的,它们的对齐过程可以互相帮助。所以一个直观的做法就是将3帧一起合并来学习2个offsets和modulation masks。具体过程如下:
①首先预对齐还是分开来各做各的,光流 s i → i − 1 、 s i → i − 2 s_{i\to i-1}、s_{i\to i-2} si→i−1、si→i−2和一阶对齐一样都来自于现成的光流估计网络SPyNet:
f ˉ i − 1 = W ( f i − 1 , s i → i − 1 ) , f ˉ i − 2 = W ( f i − 2 , s i → i − 2 ) . \bar{f}_{i-1} = \mathcal{W}(f_{i-1}, s_{i\to i-1}),\\ \bar{f}_{i-2} = \mathcal{W}(f_{i-2}, s_{i\to i-2}). fˉi−1=W(fi−1,si→i−1),fˉi−2=W(fi−2,si→i−2).
②然后我们要利用光流对齐的结果 f ˉ i − 1 , f ˉ i − 2 \bar{f}_{i-1},\bar{f}_{i-2} fˉi−1,fˉi−2和光流 s i → i − 1 , s i → i − 2 s_{i\to i-1},s_{i\to i-2} si→i−1,si→i−2来引导DCN中offset
和modulated scalars
的学习,通过将3帧一起合并来学习2个offsets和modulation masks:
o i → i − p = s i → i − p + C o ⟨ c ( g i , f ˉ i − 1 , f ˉ i − 2 ) ⟩ , m i → i − p = σ ⟨ C m ⟨ c ( g i , f ˉ i − 1 , f ˉ i − 2 ) ⟩ ⟩ . (6) o_{i\to i-p} = s_{i\to i-p} + \mathcal{C}^o\langle c({\color{dodgerblue}{g_i, \bar{f}_{i-1}, \bar{f}_{i-2}}}) \rangle,\\ m_{i\to i-p} = \sigma\langle \mathcal{C}^m \langle c({\color{dodgerblue}{g_i, \bar{f}_{i-1},\bar{f}_{i-2}}}) \rangle \rangle.\tag{6} oi→i−p=si→i−p+Co⟨c(gi,fˉi−1,fˉi−2)⟩,mi→i−p=σ⟨Cm⟨c(gi,fˉi−1,fˉi−2)⟩⟩.(6)其中 p = 1 , 2 p=1,2 p=1,2。
Note:
③接下去,我们要将学习到的offsets和modulation masks进行合并,产生最终用于DCN的offsets( o i o_i oi)和modulation masks( m i m_i mi),最终warp的对象也是 f i − 1 、 f i − 2 f_{i-1}、f_{i-2} fi−1、fi−2的合并:
o i = c ( o i → i − 1 , o i → i − 2 ) , m i = c ( m i → i − 1 , m i → i − 2 ) , f ^ i = D ( c ( f i − 1 , f i − 2 ) ; o i , m i ) . (7) o_i = c(o_{i\to i-1}, o_{i\to i-2}),\\ m_i = c(m_{i\to i-1}, m_{i\to i-2}),\\ \hat{f}_i = \mathcal{D}(c({\color{green}{f_{i-1}, f_{i-2}}});o_i,m_i).\tag{7} oi=c(oi→i−1,oi→i−2),mi=c(mi→i−1,mi→i−2),f^i=D(c(fi−1,fi−2);oi,mi).(7)
通过上述这种在对齐中引入残差结构来构造出光流引导的offset学习,来克服DCN训练不稳定以及offset容易溢出的问题,这样做主要有3个好处:
DCN-v2
版本,因为其中包含modulation mask,其可以控制offset的幅度来使得新采样点可以移动到合适的位置,其本质是一种注意力机制,他会让DCN更加关注能使对齐性能提升的采样位置。 数据集 \colorbox{hotpink}{数据集} 数据集
验证集:REDSval4,即REDS数据集中Clips 000,001,006,017。
测试集:REDS4,即REDS数据集中Clips 000,011,015,020;Vid4;UDM10;Vimeo-90K-T。
训练集:REDS中除了REDS4和REDSval4之外的视频数据;Vimeo-90K。
采用4倍下采样获取 L R LR LR视频,下采样方法为经典的BI和BD。
实验设置 \colorbox{dodgerblue}{实验设置} 实验设置
作者首先将BasicVSR++和其余16种模型相对比,实验结果如下:
实验结论:
本节作者探究2个提升点各自的功能。
首先放上SOGP
和flow-guided deformable alignment(FGDA
)对重建性能的影响:
实验结论:
接下来我们具体分析2个提升点的作用。
SOGP \colorbox{lightseagreen}{SOGP} SOGP
实验结果如下:
从图中可以看出SOGP对于多细节区域的重建表现是很不错的。这是因为GP的多迭代传播可以产生从粗到细的对齐;此外SOP的二阶传播可以融合集聚多个帧的相关对齐特征信息,他们提供了丰富的位置信息,这些信息互为补充来产生更加精确的对齐,为细节区域的重建提供了帮助。
FGDA \colorbox{tomato}{FGDA} FGDA
实验一:实验结果如下所示:
上图(a)是(e)(f)之间的光流信息;(b)~(d)是 G × 2 × N = 288 G\times 2\times N=288 G×2×N=288张offset特征图中任取的3张;(g)是光流对齐的结果;(h)是使用本文提出的FGDA对齐的结果。
实验结论:
实验二:
设置一组对比试验,3种设置分别是:①没有光流,纯DCN对齐;②将光流只用于损失函数种,即offset-fidelity损失函数;③光流引导的DCN对齐,即本文的FGDA。实验结果如下所示:
实验结论如下:
Temporal Consistency \colorbox{yellowgreen}{Temporal Consistency} Temporal Consistency
时间连续性也是VSR中一个重要的方向。在基于sliding-windows方法中,比如EDVR,不同输出的重建都是独立的;而在基于循环结构的方法中,比如BasicVSR、BasicVSR++,通过中间特征的不断传播,使得不同的输出之间是相互关联的,这种内在联系使得输出是连续的。相关实验结果如下:
显然,基于循环机制的方法能产生更好的连续性;此外,BasicVSR++比BasicVSR产生更加平滑的时间传播连续性。
运动(光流)估计和DCN的offset具有很高的相似性,他们都表征了运动信号,只不过后者是通过隐式的捕捉这种运动信号。
BasicVSR++在2021年的超分挑战赛获得了2项冠军,其表现力可视化如下:
BasicVSR++
基于BasicVSR,在其结构上对Propagation
和Alignment
部分进行了提升改进,分别使用了Second-order grid propagation和Flow-guided deformable alignment技术。