原文和代码的github地址:https://github.com/Maclory/SPSR
一、简介
虽然 GAN 可以使 SISR(单幅图像超分)生成比较真实的图像(photo-realistic images),但生成的图像中仍然会存在一些结构性失真。为了缓解这个问题,本文提出了 SPSR 网络模型,利用图像的梯度图(gradient maps)去引导 SISR 过程,在保留 GAN 的优点的同时,也保留了图像的结构信息。
二、本文方法
1、网络结构
本文所提出的 SPSR 网络结构模型如下图(Fig 2),可以看出相比于以前普通的 SISR 网络模型,SPSR 多了一条支路——Gradient Branch,用来处理图像的梯度信息。
如上图所示,对于传进来的一幅LR图像,分成两个支路进行处理:
(1)上方的 SR Branch 是常规情况下的处理流程(就是对LR图像进行一系列的卷积,本文使用的 SR Block 是 ESRGAN 中提出的 RRDB 模块,总共级联了22个SR Block,并且将第5、10、15和20模块后的特征图输到下方的 Gradient Branch)。
(2)再来看下方的的 Gradient Branch 支路,首先对 LR 图像进行一个 运算来获得梯度图 LR Grad。对于一幅图像
,
定义的运算如下式:
其实就是
在水平方向上的差分,
是
在垂直方向上的差分,
是
和
对应位置元素的平方和,再开方。需要注意的是,在这里
获得的梯度图 LR Grad 只记录了梯度的幅值信息,并没有考虑方向信息,因为作者认为幅值信息足以表明图像局部区域的锐度(sharpness)。作者对
的实现是通过两个卷积模板,具体可参考文章顶部的github地址。接下来对 LR Grad 的处理和常规超分过程差不多(进行一些卷积运算和上采样),得到对应的 HR Grad(文中叫 HR edge shaprness)。
最后通过一个融合模块(Fusion Block)将两个分支的信息融合在一起,得到最终的超分图像。
三、目标函数/损失函数(关于一些目标函数的介绍,可以参看我前面的博文)
这也是本文的重点部分,作者组合了以下两类目标函数:
1、常用的、图像空间的损失(Conventional Loss、Image-space):
(1)Pixelwise Loss:基于像素级的损失,这里作者使用的是 L1 loss,它有利于PSNR评价指标,能够加快收敛,但会造成过拟合,其表达式如下:
(2)Perception Loss:感知损失,通过预训练的 VGG 网络实现,目的在于提高图片的视觉质量,其表达式如下:
(3)Adversarial Loss:对抗损失,源自GAN,其表达式如下:
2、梯度域的损失(Gradient Loss):
为什么要增加关于梯度的损失,作者举了一个一维的例子,如下图:
在上图中,上面三张小图是空间内的信号,下面三张小图是各自对应的梯度。如果我们使用 L1 loss 去优化网络的话,相对于真实的 HR 图像(a),我们常常获得的超分图像是(b),可以看到他们在梯度上相差很远(d和e),如果我们能够在梯度上学到一些信息(f),那么我们将会获得比较好的超分图像(c)。因此我们有必要对图像的梯度信号进行学习。
作者使用到的 Gradient Loss 如下,和前面的 Conventional Loss 差不多,不过这里针对的是梯度图像(可以看到,下面的式子都加了个 )
(1)L1 Loss,其表达式如下:
(2)Adversarial Loss:对抗损失,其表达式如下:
综上所述,最后整体的目标函数如下: