1.前言
清晨,师兄推荐给我一篇文章,关于利用DeepLearning思想进行图像超分辨恢复的。超分辨这个话题几年之前还是比较火爆的,无论是BiCube、SP、A*都给出了令人振奋的结果。但是细节恢复部分仍存在一些瑕疵。
Super Resolution(SR),这个方向做的事情是给你一张低分辨率的小图(Low Resolution,LR),通过算法将这张LR放大成一张高分辨率的大图(High Resolution,HR)。这个事情乍一听挺简单的,普通的插值算法即可胜任,其实大有玄机,主要的难点在于细节的恢复,如下两张图,第一张图是原图,第二张图是将原图进行3倍下采样后,用Bicubic插值算法[1]进行SR恢复的图像,从图像整体来看,第二张图比第一张图要显得糊一些,如果将蝴蝶的翅膀纹路放大看可以发现,第二张图的细节已经很不清晰,纹路间的边缘已经模糊。这正是SR这个方向所面临的挑战。
![]()
SR这个领域在深度学习之前就已经大量优秀的研究工作,如Sparse Code(SC),A+等,各自效果如图所示(1)原始图像(2)SC稀疏编码进行高分辨恢复(3)A*算法进行高分辨率恢复。
![]()
![]()
篇幅所限,本文暂不讨论传统SR算法,本文主要聊聊基于深度学习的SR相关算法。
2.DL用于SR恢复的鼻祖
- 说到基于深度学习的SR工作,肯定得提起“开山鼻祖”——SRCNN,SRCNN是第一篇将深度卷积神经网络(CNN)引入SR领域。这篇文章的思想很清晰,算法也很简单,一般大牛的大作都是如此。。。这篇文章认为LR之所以能通过一定的算法升级为HR,主要是他们两者之间存在着一些“共通的特征”,因此,这篇文章将SR过程主要分为三个阶段:
- LR 特征提取(Patch extraction and representation),这个阶段主要是对LR进行特征提取,并将其特征表征为一些feature maps;
- 特征的非线性映射(Non-linear mapping),这个阶段主要是将第一阶段提取的特征映射至HR所需的feature maps;
- HR重建(Reconstruction),这个阶段是将第二阶段映射后的特征恢复为HR图像。
又想感慨一句,开山之作往往都是如此简单、清晰的思路,轻松收获一篇ECCV、一篇PAMI。这篇文章将上述的三个阶段很自然地翻译成三个卷积计算工作,轻松搞定:
- LR特征提取可表征为“卷积层(c*f1*f1卷积核)+RELU”;
- 非线性映射可表征为“全连接层+RELU”,而全连接层又可表征为卷积核为1x1的卷积层,因此,本层最终形式为“卷积层(n1*1*1卷积核)+RELU”;
- HR重建可直接表征为“卷积层(n2*f3*f3)”。
下面所示的是SRCNN网络框图:
SRCNN的损失函数也很“简单粗暴”,直接计算原图与SR大图之间所有像素点的MSE。至此,SRCNN的所有工作就介绍到这,接下来我们看下SRCNN的效果:
SRCNN非常简洁,不过SRCNN也存在着几个可以改进的点:
- 从SRCNN的整个网络来看,要求这个网络的参数需要足够“稠密”,才能直接从网络中映射出一张高清的HR图像,这在一定程度对SRCNN的训练要求比较高,另外也减缓了SRCNN的训练速度;
- SRCNN特征提取只用了一层卷积层,存在着perceptive field比较小的问题,即提取出来的特征是非常局部的特征,而SR图像需要对纹理细节进行恢复,局部特征难以奏效。
3.优化及创新
在SRCNN之后,又有若干进一步优化的文章出现,如RED(NIPS2016)、CSCN(ICCV 2015)、SRGAN(我们复现之后发现效果并不是特别好)、DRCN(CVPR2016)等。
接下来我想分享的是CVPR2016的一篇很有创新的文章:VDSR(CVPR2016)。这篇文章有几个创新点:这篇文章将VGG16引入作为SR的网络,如果网络架构同SRCNN,从上述SRCNN第一个可改进点可知,VGG16的权重将会变得非常稠密,从而加大了网络的学习成本,很可能会碰到vanishing/exploding gradients problem,这个问题在SRCNN文章的4.3.3也提到过,在原文中,作者认为网络越深效果越好的这个定律不适用于SR领域。为了解决该问题,这篇文章的作者将redisual的思想引入了网络架构中,VGG不再需要学习如何恢复一张高清的HR图像,而是学习高清图像与LR图像拉伸之后的残差,网络架构如下:
- 引入更深的网络(VGG16)做SR;
- 将residual的思想引入SR,减轻了网络的“负担”,又加速了学习速率;
- 构造了一个适用于不同放大尺度的网络,并通过实验验证了该网络的可靠性。
这一点创新做得非常漂亮,由于只需要学习残差,而残差中大部分值都为0,从而大大降低了网络学习的成本,也加快了学习的速率,在这篇文章中,作者也对比了残差目标和非残差目标的学习速率,如下。可以看到残差思想的引入,极大地加速了训练速度,也提高了效果的稳定性,在这篇文章中,作者提到训练一个16层的网络用于SR只需要4个小时,这无疑极大地提升了训练速度。
残差目标和非残差目标学习速率对比
残差思想的引入,使得深度网络能够应用于SR领域,而随着深度的加深,网络的perceptive field变得越来越宽,使得网络不仅具备局部特征,也能捕捉到更加全局的特征,全局特征的加入更有利于SR纹理细节的恢复。
一般的网络结构只能做特定尺度的upscale,如一个网络结构确定为放大尺度为2的网络,那么该网络训练后也就只能用于尺度为2的upscale,而随着网络结构的加深,训练成本相应增加,若网络只能做单一尺度的放大,那么网络的可重用性比较差。在这篇文章中,作者还引入了另一种令人惊讶的网络结构,该网络结构对外暴露多一个尺度参数,该尺度参数可控制图像放大的尺度。这种设计方案极大地提升了网络的可重用性。作者还在这篇文章中对比了单一尺度网络的效果和多尺度网络的效果,如表(10)。可以发现,多尺度网络的效果不仅不降低,反而提升了PSNR值。
最后文章给出了一些与SRCNN的效果对比,如下图。可以看出,VDSR由于更深网络的引入,在纹理细节上表现得更加的清晰。
VDSR与SRCNN对比(上面为VDSR效果图,下面为SRCNN效果图)
4.参考文献
[1] Bicubic interpolation
[2] http://www.vision.ee.ethz.ch/publications/papers/proceedings/eth_biwi_01165.pdf
[3] http://www.columbia.edu/~jw2966/papers/YWHM10-TIP.pdf
[4] Learning a Deep Convolutional Network for Image Super-Resolution
[5] http://www.ifp.illinois.edu/~jyang29/papers/ICCV15-rnnsr.pdf
[6] https://arxiv.org/pdf/1603.09056.pdf
[7] [1609.04802] Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network
[8] [1511.04491] Deeply-Recursive Convolutional Network for Image Super-Resolution
[9] https://arxiv.org/pdf/1511.04587.pdf