深度学习超分辨率:ESPCN模型


  之前介绍了第一篇超分辨率模型在深度学习中的实现——SRCNN模型,具体的介绍请参看我这一篇博客:https://www.cnblogs.com/Robin-tao/p/12942977.html

SRCNN的缺点是:(1) 是依赖于图像区域的context;(2)是训练收敛速度太慢;(3)是网络只适用于单一尺度。这些缺点在基于残差网络的SR应用中解决了,简称为VDSR模型。

今天来介绍ESPCN网络模型

 

1 ESPCN模型介绍

 

                    图1-SRCNN 模型图

图1是SRCNN的网络模型,对于左端网络输入来说,已经是双三次插值的高分辨率图像(注:在SRCNN中,网络的输入是经过双三次插值方法到HR图像相同尺寸的图像,这个输入图像算是“粗糙”的高分辨率图像)。这已经是在高分辨率空间了。也就是说剩下的Patch extraction 和Non-Linear mapping 和 Reconstruction都是在高分辨率空间中完成的操作。

 

但ESPCN指出,由于SRCNN是在最后一步是重构高分辨率图像块,作为输入是经过双三次插值的,已经高分辨率图像(图像尺寸和HR图像一样),在中间的2个网络相当于在高分辨率空间中进行处理,这增加了运算的复杂度。

后面有文献总结了不同上采样模型的策略,如图2所示:

                    图2-4种上采样网络结构

ESPCN就是图2上面4种上采样网络结构(b),也就是Post-upsampling SR结构。SRCNN是采用了(a):Pre-upsampling SR结构。至于剩下2种网络结构后面的模型会采用,咱以后继续说

 

ESPCN的网络结构

                  图3 ESPCN模型结构图

 

 网络模型的pytorch代码

 

 

                 图4  ESPCN 网络代码

 

ESPCN提出在网络的最末端实现LR到HR的分辨率,并从LR特征图中获得高分辨率的HR数据。这样就不需要在更大的HR分辨率下执行大部分SR操作。也就是输入是低分辨率图像(未经过插值处理,尺寸和HR图像不一样),在隐藏层中都是低分辨率图像进行处理,也就是在隐藏层没有添加任何关于高分辨率的先验信息。到了亚像素卷积层,才映射到高分辨率空间。

将$\boldsymbol{r}^2\times \boldsymbol{H}\times \boldsymbol{W} $的特征图像,重新排列成的$1\times \boldsymbol{rH}\times \boldsymbol{rW}$ 高分辨率图像。亚像素卷积层如图5所示

 

                                           图5 亚像素卷积层

 

亚像素卷积层,并没有做卷积操作,而是直接将$\boldsymbol{r}^2$ 个通道的特征图,重新进行排列,这样就完成了LR到HR的恢复。主要学习映射的步骤已经隐含在之前的隐藏层网络中。

亚像素卷积层能够将LR数据映射到HR空间中,与传统的卷积层相比,所需的计算量很小。

pytorch中的API即完成了网络中的最后一层,亚像素卷积层,

 

nn.PixelShuffle()

功能是:

Pixelshuffle会将shape为 ( _ ,  r * r * C ,  H , W) 的Tensor reshape成( _ ,  C ,  r * H ,  r * W) 的Tensor。

输入输出的shape如下:
- Input: (N,C∗upscale_factor2,H,W)
- Output: (N,C,H∗upscale_factor,W∗upscale_factor)

 

 2 总结

 ESPCN的创新点:

(1)采用亚像素对高分辨率信息进行恢复。

(2)采用Post-upsampling SR上采样模型。

(3)选择tanh而不是relu作为激活函数。

 

3 结果(摘自原论文)

对几种方法的PSNR比较

 

 

结果图:

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM