2014到2018的图片超分文章总结传送门
分别用 I L R I_{LR} ILR和 I S R I_{SR} ISR表示FSTN的输入和输出,用 I H R I_{HR} IHR表示目标
使用了一个C3D layer从LR视频中提取特征。
F 0 L = H L F E ( I L R ) F_0^L = H_{LFE}(I_{LR}) F0L=HLFE(ILR)
F 0 L F_0^L F0L是提取的feature-maps, H L F E H_{LFE} HLFE是C3D操作, F 0 L F_0^L F0L用于LR空间的GRL还有FRBs的输入
对于第 d d d层FRBs,输出表示为
F d L = H F R B , d ( F d − 1 L ) = H F R B , d ( H F R B , d − 1 ( . . . ( H F R B , 1 ( F 0 L ) ) . . . ) ) F_d^L = H_{FRB,d}(F_{d-1}^L) = H_{FRB,d}(H_{FRB,d-1}(...(H_{FRB,1}(F_0^L))...)) FdL=HFRB,d(Fd−1L)=HFRB,d(HFRB,d−1(...(HFRB,1(F0L))...))
同时LR space residual learning(LRL)也用于LR空间的特征学习,通过 H L R L H_{LRL} HLRL,一个组合函数:
F L R L L = H L R L ( F D L , F 0 L ) F_{LRL}^L = H_{LRL}(F_D^L, F_0^L) FLRLL=HLRL(FDL,F0L)
FRB模块将一个 k ∗ k ∗ k k * k *k k∗k∗k的卷积核改成一个 1 ∗ k ∗ k 1 * k * k 1∗k∗k 和 k ∗ 1 ∗ 1 k * 1 * 1 k∗1∗1 的卷积核。修改了激活函数。所以FRBs块可以写成
F d L = F d − 1 L + W d , t ( W d , s ( σ ( F d − 1 L ) ) ) F_d^L = F_{d - 1}^L + W_{d,t}(W_{d,s}(\sigma(F_{d-1}^L))) FdL=Fd−1L+Wd,t(Wd,s(σ(Fd−1L)))
σ \sigma σ表示PReLU激活函数, W d , s W_{d,s} Wd,s和 W d , t W_{d,t} Wd,t分别表示空间卷积和时间卷积,公式里没有加入偏差。
LRL通过PReLU函数,一个dropout层实现。
F L R L L = H L R L ( F D L , F 0 L ) = σ L ( F D L + F 0 L ) F_{LRL}^L = H_{LRL}(F_D^L, F_0^L) = \sigma_L(F_D^L + F_0^L) FLRLL=HLRL(FDL,F0L)=σL(FDL+F0L)
用于在LRL提取特征之后,在HR空间获取超分视频。使用了一个C3D卷积,之后使用deconvution,然后再用C3D做特征融合
F S R L = H L S R ( F L R L L ) F_{SR}^L = H_{LSR}(F_{LRL}^L) FSRL=HLSR(FLRLL)
再这一部分,还有cross-space residual learning(CRL),首先通过一个SR mapping从LR空间到HR空间,得到 F S R H , 最 终 网 络 输 出 为 F_{SR}^H,最终网络输出为 FSRH,最终网络输出为 I S R = H F S T R N ( I L R ) = F S R L + F S R H I_{SR} = H_{FSTRN}(I_{LR}) = F_{SR}^L+F_{SR}^H ISR=HFSTRN(ILR)=FSRL+FSRH
F S R H = H C R L ( I L R ) F_{SR}^H = H_{CRL}(I_{LR}) FSRH=HCRL(ILR),这个映射操作将LR映射到HR空间,尽可能简单,可以是基于双线性、最近邻、双三次、面积和反卷积的插值。
包括了LR space residual learning(LRL)和Cross-space residual learning(CRL)
使用 Charbonnier penalty function, ρ = x 2 + ϵ 2 \rho = \sqrt{x^2 + \epsilon^2} ρ=x2+ϵ2做近似, ϵ = 1 e − 3 \epsilon = 1e -3 ϵ=1e−3。
L ( I S R , I H R ; θ ) = 1 N ∑ n = 1 N ρ ( I H R n − I S R n ) L(I_{SR},I_{HR};\theta) = \frac{1}{N}\sum_{n = 1}{N}\rho(I_{HR}^n - I_{SR}^n) L(ISR,IHR;θ)=N1n=1∑Nρ(IHRn−ISRn)
这篇文章比较难读懂,把自己理解的mark下,也可能和作者做的有偏差。
代码地址
总结:将一个光场中的图像分成不同的子像素偏移量的图像堆栈,然后输入不同的网络分支,从每个分支计算不同空间方向上的剩余信息,并进一步集成以补充视图图像的高频细节。
目标是从一个低像素的图片 L L r ( x , y , u , v ) L^{Lr}(x,y,u,v) LLr(x,y,u,v)重建出超分图片 L s r ( x , y , u , v ) L^{sr}(x, y, u, v) Lsr(x,y,u,v),其中 ( x , y ) (x, y) (x,y)是空间域, ( u , v ) (u, v) (u,v)是角度域。超分的图像最终是 ( r X , r Y , U , V ) (rX, rY, U, V) (rX,rY,U,V), r r r是放大倍数。将图片转换到YCbCr色彩空间并且只使用Y通道。
不同的方向移动的像素可以根据disparity信息组合,产生更高分辨率的图片。本文水平,垂直和对角线方向的子像素移动。
将角度方向记为 t a n θ = v / u tan \theta = v/ u tanθ=v/u,提取图像周围的像素 I θ = 0 , I θ = 90 , I θ = 45 , I θ = 135 I_{\theta = 0}, I_{\theta = 90}, I_{\theta = 45}, I_{\theta = 135} Iθ=0,Iθ=90,Iθ=45,Iθ=135。设计了residual网络结构。如图所示网络有四个分支和一个带有几个residual blocks的全局部分。与其他视图图像相比,一个LF中的中心视图图像具有更多来自相关图像堆栈的可用子像素信息。首先设计网络提高中间视图图像的空间分辨率,每个图像栈image stack的图像数量一样,学习不同角度的LF图片,最终恢复图像。
将训练数据记为 { L l r , I c h r } \{L^{lr}, I_c^{hr}\} {Llr,Ichr}, I c h r I_c^{hr} Ichr是gt,中间图像的高像素表示。四个角度的图片栈可以计算得到。网络学习模式 H U ∗ V H_{U*V} HU∗V,根据输入的 U ∗ V U*V U∗V角度像素图预测中间图像的高像素图像 I c s r = H U ∗ V ( I θ = 90 , I θ = 45 , I θ = 135 I_c^{sr} = H_{U*V}(I_{\theta = 90}, I_{\theta = 45}, I_{\theta = 135} Icsr=HU∗V(Iθ=90,Iθ=45,Iθ=135
每个角度方向的图片栈作为一组数据在每个分支进行编码,然后隐式计算disparity information信息,找到每个视图图片准确的子像素平移,这里每个分支的第一层卷积提取图片栈的特征 F F E θ = H F E θ ( I θ l r ) F_{FE_{\theta}} = H_{FE_{\theta}}(I_{\theta}^{lr}) FFEθ=HFEθ(Iθlr)
提取到的特征作为后面的残差模块的输入,对于中心图片,用相似的卷积操作 F F E c = H F E c ( I c l r ) F_{FE_c} = H_{FE_c}(I_c^{lr}) FFEc=HFEc(Iclr)
假设每个分支有S个残差模块(S),第s个残差模块的输出,残差模块和EDSR用的相似。对每个模块,输入会直接加入输出
F R B θ = H R B θ , s ( F R B θ , s − 1 ) F_{RB_{\theta}} = H_{RB_{\theta}, s}(F_{RB_{\theta}, s-1}) FRBθ=HRBθ,s(FRBθ,s−1)
提取了不同分支的特征后,通过全局方式整合特征信息并将他们送入之后丶残差学习模块。 F G R B , d = H G R B , d ( F G R B , d − 1 ) = H G R B , d ( . . . = H G R B , 1 ( F G R B , 0 ) . . . ) F_{GRB,d} = H_{GRB,d}(F_{GRB, d - 1}) = H_{GRB,d}(...= H_{GRB,1}(F_{GRB,0})...) FGRB,d=HGRB,d(FGRB,d−1)=HGRB,d(...=HGRB,1(FGRB,0)...)
这里 F G R B , 0 = [ F R B 0 , S , F R B 9 0 , S , F R B 4 5 , S , F R B 1 35 , S ] F_{GRB,0} = [F_{RB_0,S}, F_{RB_90,S}, F_{RB_45,S}, F_{RB_135,S}] FGRB,0=[FRB0,S,FRB90,S,FRB45,S,FRB135,S]经过了S个RB模块后各个方向分支信息的整合。定义有 D D D个全局残差模块 H G R B , d ( ⋅ ) H_{GRB,d}(\cdot) HGRB,d(⋅)取提取各个方向的信息,全局残差模块和局部残差模块结构类似,但是是4倍大。然后全局特征送入卷积成 H G F ( ⋅ ) H_{GF}(\cdot) HGF(⋅),然后加入之前提取的中间图像信息 F F E c F_{FE_c} FFEc。之后进行上采样 H U P ( ⋅ ) H_{UP}(\cdot) HUP(⋅)。使用的是ESPCN的方式。最终 I c s r = H U P ( H G F ( F G R B , D ) + F F E c ) I_c^{sr} = H_{UP}(H_{GF}(F_{GRB,D}) + F_{FE_c}) Icsr=HUP(HGF(FGRB,D)+FFEc)
一个LF捕获场景下不同视角的图片有不同的特征,在一个网络对他们同时进行充分是比较困难的。目前有一些基于学习的LFSR方法通过复杂的网络重建LR图像通过将超分过程单独应用到每张图片,或者更具已有的超分视图下的LF计算新的图片。这种方式下,图片是通过不平衡的信息实现超分的,同时,不同视角下的对应信息也不容易保存,对于不同角度方向的超分,网络需要重新训练。对于每张单独的图片,本文通过组合周围图片信息取保持积核结构,提供更灵活的方式取获取不同角度分辨率下的LF图像。
对于不同的angular分辨率(就是对应上面的 U ∗ V U*V U∗V),使用不同的resLF网络。文章将LF 图片分成不同部分,对于不是在中间的图片,也看成是对应于其他部分的中间图片,比如对于一个 7 ∗ 7 7*7 7∗7的分辨率,那么他隔壁的就是 5 ∗ 5 5*5 5∗5,后面的就是 3 ∗ 3 3*3 3∗3,对于边界处,进行补零,对于角点其实是 2 ∗ 2 2*2 2∗2,垂直方向和水平方向大小又是不一样的。
L1 loss
代码地址
总结:文中使用了一个反馈机制feedback mechanism来做超分,high-level的信息通过top-down的方式通过反馈连接进行反馈,网络只需要少量的参数。每次的输出都会计算loss对网络进行调节,所使用的反馈模块可以通过上采样或下采样丰富high-level信息。并提供了密集的skip connections,对于循环神经网络的训练,越到后面所使用的目标gt越难(加的扰动越多),通过这个学习策略网络能够逐步学习复杂的退化模型。
全局的连接是一个绕过子网络的上采样图片。每一次子网络每一次迭代都恢复一个残差图像 I R e s t I_{Res}^t IRest。同时用 C o n v ( s , n ) Conv(s,n) Conv(s,n)表示一个有 n n n个大小为 s s s的卷积核,用 D e c o n v ( s , n ) Deconv(s,n) Deconv(s,n)表示反卷积。
LRFB由 C o n v ( 3 , 4 m ) Conv(3, 4m) Conv(3,4m)和 C o n v ( 3 , m ) Conv(3,m) Conv(3,m)组成。用 I L R I_{LR} ILR表示输入,则可以获得浅层的特征 F i n t = f L R F B ( I L R ) F_{in}^t = f_{LRFB}(I_LR) Fint=fLRFB(ILR)
FB: F i n t F_{in}^t Fint作为后续的FB模块输入,从 F i n 1 F_{in}^1 Fin1算起。所以对于第 t t t次迭代,
F o u t t = f F B ( F o u t t , F i n t ) F_{out}^t = f_{FB}(F_{out}^t, F_{in}^t) Foutt=fFB(Foutt,Fint)
RB:重建部分 D e c o n v ( k , m ) Deconv(k,m) Deconv(k,m)上采样LR特征 F o u t t F_{out}^t Foutt到HR,然后 C o n v ( 3 , c o u t ) Conv(3,c_{out}) Conv(3,cout)产生残差图片 I R e s t I_{Res}^t IRest
I R e s t = f R B ( F o u t t ) I_{Res}^t = f_{RB}(F_{out}^t) IRest=fRB(Foutt)
最后第 t t t次迭代的输出可以表示为 I S R t = I R e s t + f U P ( I L R ) I_{SR}^t = I_{Res}^t +f_{UP}(I_{LR}) ISRt=IRest+fUP(ILR)
使用 L 1 L_1 L1 loss优化,对于复杂的退化模型, ( I H R 1 , I H R 2 , . . . , I H R T ) (I_{HR}^1, I_{HR}^2, ...,I_{HR}^T) (IHR1,IHR2,...,IHRT)基于任务的苦难程度排列,最终的loss写成:
L Θ = 1 T ∑ t = 1 T W t ∣ ∣ I H R t − I S R t ∣ ∣ 1 L_{\Theta} = \frac{1}{T}\sum_{t=1}^T W^t||I_{HR}^t - I_{SR}^t||_1 LΘ=T1t=1∑TWt∣∣IHRt−ISRt∣∣1
W t W_t Wt表示第t次迭代输出的价值,这里设为1。
根据保存时序信息的方式,deep VSR可以分成三种方式:
问题描述:
记第 I I I帧低像素帧的大小为$ ( M l ∗ N l ) (M^l*N^l) (Ml∗Nl),输入是 n + 1 n+1 n+1帧 { I t − n , . . . , I t − 1 , I t } \{I_{t-n},...,I_{t-1}, I_t\} {It−n,...,It−1,It},这里 I t I_t It是目标帧。目标是对第 t t t帧进行超分得到 ( M h ∗ N h ) (M^h * N^h) (Mh∗Nh),其中 M l < M h , N l < N h M^l < M^h, N^l
网络结果可以分成三部分:
在投影模块之前,先对 I t I_t It提取特征得到 L t L_t Lt,对于邻近的帧 I t − k , k ∈ [ n ] I_{t-k}, k\in[n] It−k,k∈[n],先计算密集运动流 F t − k F_{t-k} Ft−k(每个像素2D向量,怎样得到这个F),讲这个 F t − k F_{t-k} Ft−k放在 I t I_{t} It和 I t − k I_{t-k} It−k之间。运动流可以让投影模块提取到 I t I_t It和 I t − k I_{t-k} It−k之间丢失的的信息。这个叠加的8通道“图像”被映射到相邻的特征张量 M t − k M_{t−k} Mt−k
通过结合SISR和MISR方法提取目标帧丢失的细节。产生HR特征,这个阶段输入 L t − k − 1 L_{t-k-1} Lt−k−1和 M t − k M_{t-k} Mt−k,输出HR特征 H t − k H_{t-k} Ht−k
在RBPN中,mutiple projection使用的是一个循环链,这个循环包括了encoder-decoder模块。模块有两个输入,产生两个输出如上图所示。encoder产生从投影到特定帧的预测HR特征的隐藏状态。解码器对隐藏层解码作为下个编码器的输入。encoder-decoder具体如下。
例子
通过将HR特征concate起来,输入到重建模块 S R t = f r e c ( [ H t − 1 , H T − 2 , . . . , H t − n ] ) SR_t = f_{rec}([H_{t-1},H_{T-2},...,H_{t-n}]) SRt=frec([Ht−1,HT−2,...,Ht−n]),网络中 f r e c f_{rec} frec只是一个单一的卷积层。