文章全名: Deep Laplacian Pyramid Networks for Fast and Accurate Super-Resolution

论文下载地址: https://pan.baidu.com/s/1nva9off

code:https://github.com/phoenix104104/LapSRN


该篇论文是2017 CVPR的 可以算是最新的一个超分辨率的论文了 废话不多说 看下论文是怎么做的吧


传统的超分辨做法有一些共同之处,首先是L2 loss函数,其次,使用特定尺寸的图片输入(VDSR除外),最后,都是输入到结果,无中间的超分辨率结果

论文先指出了传统SR(super resolution)做法中的一些问题:

1.现有方法可以处理各个尺寸的低分辨率图片,利用线性插值 将输入图片转为指定尺寸,这一步骤增加了人为噪声

2.使用L2 loss函数不可避免的产生模糊的预测,因为L2 loss函数不能找到由低分辨率LR到高分辨率HR的潜在的多模态分布,在这里作者做了一个解释:例如,一个低分率的patch可能对应多个高分率的patch,采用L2 loss使得重构结果过度平滑,不符合人类视觉

3.传统作法无法产生中间的输出结果


于是,针对传统做法的问题,论文做了一些改进

该篇论文的创新点:

1.级联结构(金字塔结构):网络有两个分支,1个是特征提取分支,1个是图像重构分支

LapSRN 超分辨率

图中,蓝色箭头表示上采样,绿色箭头表示element-wise addition operator

由图中可见,网络结构为级联结构,个别层有两个箭头输出,向下的箭头表示表示每次上采样到一定程度,即将学习到的残差结果输出,得到对应的重构图像,向右的箭头表示同时继续上采样

与VDSR不同的是,该网络是逐步学习,而不是像其他网络一样只有一个输出,通过级联学习,输出不同scale的残差,得到对应scale的重构结果,一步步得到最终结果

2.提出一种新的loss函数,

LapSRN 超分辨率

其中,x表示LR图像,y表示HR图像,r表示残差,s表示对应的level,也就是scale

在level s下,期望的HR输出为ys=xs+rs;

用线性插值 将HR图像y imresize为 对应大小的ys

该loss函数并非如传统L2 loss函数,而是如图中所示

N是每个batch中的图片数量,L为金字塔结构的level数量

说到这里,或许大家都有点迷糊,这个loss与传统的L2 loss究竟有什么区别,其实,新的loss函数类似于HED(Holistically-Nested Edge Detection)的loss,每个阶段,也就是每个level都有一个对应的loss,训练过程中的目的是将各个level的loss的和降低,如下图所示

LapSRN 超分辨率


看到这里,如果看过HED的都觉得似曾相识吧,确实,与HED的区别在于,HED的各个level的GT(ground truth)都是同一个size,也就是与该层的输出大小不一致,但是,在这里做了一个优化,通过bicubic差值将HR ground truth    imresize成对应level大小的GT来计算loss,下面附上一个HED的图,HED与LapSRN的loss的区别刚才已经说的很清楚了

LapSRN 超分辨率

关于HED,打一个小广告,我有两篇关于HED代码运行的博客,如果需要可以参考下

HED代码运行问题解决方法:http://blog.csdn.net/wangkun1340378/article/details/59472149

HED测试单张图片示例:

http://blog.csdn.net/wangkun1340378/article/details/70154492




总览:其实就是论文里的两个图

下图显示了LapSRN与已有的超分辨率网络结构

LapSRN 超分辨率

下表显示了各个网络的配置

LapSRN 超分辨率



其实,这篇论文的创意很好,基于已有的网络,进行了一些优化,采取新的loss,采用级联结构而非一口吃个胖子,逐步优化,取得了很好的结果


超分辨率其实是老生常谈了,SRCNN,FSRCNN,VDSR,DRCN等等,近几年的超分辨率论文真是层出不穷,

不过现在的论文基本上都是有一个共同之处(个人感觉):

1.加深的网络结构,使得最后几层拥有更大的感受野,从而根据更大的区域获得更多的信息进而去推断目标区域像素

2.更深的结构为梯度传播带来困难,所以采取 并非直接得到HR图像结果,而是得到残差,通过残差学习来化解这个问题


以上就是小生对该论文的见解,如有不当之处欢迎指摘

相关文章: