SuperResolution by VDSR, PerceptualSR, SubpixelConvSR,ESRGAN

以下内容基于本人阅读理解

VDSR: arXiv:1511.04587v2 [cs.CV] 11 Nov 2016

Perceptual Loss SR: arXiv:1609.05158v2 [cs.CV] 23 Sep 2016

Subpixel SR: arXiv:1603.08155v1 [cs.CV] 27 Mar 2016

SRGAN: arXiv:1609.04802v5 [cs.CV] 25 May 2017

ESRGAN: arXiv:1809.00219v2 [cs.CV] 17 Sep 2018

4个改进DeepLearning方法实现超分辨率的代表作。


Abstract

srcnn证明了deep cnn end2end可以实现优于传统方法的超分辨率任务。

本文介绍的4篇论文分别从网络结构、损失函数、upsample层、GAN四种不同角度优化原始的超分辨率网络。


VeryDeepSuperResolution

原始的srcnn只用了3层,fsrcnn用了15层,已经非常难训练,拟合很慢。VDSR加上了残差连接、gradient clipping,实现了20层的网络和极高的learning rate,以及有更大的感知域(41x41)和在同一个网络实现不同upscale factor。

Residual Learning

image-20190313120326694

interpolation到hr分辨率,经过20层Conv后输出r,加上残差连接x,输出SR结果,因此r = y - x。Loss函数为x+r与y的Euclidean distance。

Gradient Clipping

一般的clipping用[−θ, θ],缺点是即使使用更大的lr,梯度也依然限制在[−θ, θ]内。因此提出可以动态clipping的方法:[-θ/lr , θ/lr],这样就可以根据lr的策略动态控制Gradient Clipping的范围。

Multi—Scale

因为网络只负责reconstruction,上采样是用传统方法完成的。因此一个网络就可以实现多种不同的scale。

Result

image-20190313123237150

20层的conv的runtime居然比3层conv的srcnn还快???


PerceptualSR

PSNR(PeakSignalNoiseRatio)是通用的对比图片相似度的标准,与MSE成正比,因此很多CV任务的loss函数都采用了MSE,即输出和Ground Truth的每个像素的MSE。而Perceptual Loss采用了VGG中间某几层的activation output作为loss。在StyleTransfer和SuperResolution都得到了不错的结果。

Feature Reconstruction Loss

image-20190313134211674

其中:φ j (y)是VGG的第j层的activation output。

相当于借用VGG做feature extraction,feat Loss是图片在higher level feature map的EuclideanNorm,而不是像素级别的距离,保存了图片的semantic和空间结构,但是没有考虑到色彩、纹理和形状。

Style Reconstruction Loss

先定义一个gram matrix:

image-20190313141150026

返回一个Cj x Cj的矩阵,计算φ j (y)的c通道和c‘通道对应的elementwise product的和。相当于计算channel wise的covariance。

image-20190313143020157

style Loss是2个图片的GramMatrix差值的FrobeniusNorm

More Specific

image-20190317193438543

论文主要是利用了VGG16作为LossNetwork计算Loss,ImageTransformNet可以套用各种不同的网络。

做StyleTransfer时,需要同时使用ys,y_hat,yc作为LossNet的输入。

image-20190317234812204

做SR任务时,仅将SR作为y_hat,HR作为yc,选用relu2_2层计算FeatureLoss。

Experiment

论文展示了x4和x8,估计在x2和x3上表现不如其他方法。

图片downsample前先进行高斯模糊(σ = 1.0)

卷积层后面接spacial batch normalization

选了VGG16第2层的输出作为φ(y)计算feat Loss,基于srcnn修改

batch size = 4,计算200k步

Adam,lr=1e-3

test时先进行histogram matching处理,再计算psnr(偏高?)

Result

细节和边缘表现优秀

放大会看到部分色块超出原有边界


SubpixelConvSR (ESPCN)

此前SR任务的upsample操作都是通过fractional convolution进行的,此论文提出了新的upsample方法:子像素重排列。

Network Architecture

image-20190318132622948

全卷积,逐层增加通道数

输入通道为c,upscale factor为r的话,最终通道数为c r^2,即输出为[h, w, c r^2]**

Sub-pixel cone layer通过像素重新排列(不需要计算),将feature map转换为**[h *r, w* r, c]**,实现上采样,论文中命名为periodic shuffling operator (PS)。由于这个过程不需要计算,所以速度非常快。

参考SRCNN的3层网络结构,第一层conv(5x5, c, 64) 第二层conv(3x3, 64, 32) 第三层conv(3x3, 32, c*r^2) 第四层subpixel(r)

Experiment

图片分辨率为(17r x 17r),downsample前先进行高斯模糊

激活函数选tanh

训练100轮,lr=0.01,每1轮lr=lr*0.1

用K2训练,91images上训练了3hr,另外一个模型在ImageNet上训练了7天。

PSNR用matlab算(比较准)

Result

如果激活函数跟SRCNN一样用relu,对比数据集分别用91images和ImageNet,结果显示ESPCN在更大的数据集上会有进一步的表现(+0.33),而SRCNN不会(+0.07)

image-20190318151055556

1080p的图片在GPU上超分辨率可以做到0.038s每帧(算是实时?),而SRCNN需要0.435s

Enhanced SuperResolution GAN(ESRGAN)

SRGAN的升级版,用生成对抗的方法实现超分辨率任务。与PerceptualLoss类似,只是这次的LossNetwork是可训练的,结果同样是在PSNR比较低的情况下得到感官效果更优秀的超分辨率图片。并且在超大upscale factor上的表现比PSNR方法的表现更好。

前作SRGAN

提出一个mean-opinion score(MOS),找26个人评分(1~5)然后求均值。

GAN网络:Generator采用ResNet网络,Discriminator采用VGG。

image-20190318173207720

从manifold的角度分析:将patch映射到2维空间,可以发现GAN的结果与真实结果分布比较接近,而以MSE为objective function的结果偏离了真实分布,所以画面偏smooth。

SRGAN Loss

Loss函数采用,典型的GAN的min-max函数(基于binomial的loss,然后训练Discriminator最大化误差,训练Generator最小化误差)

image-20190318175244115

image-20190319124717727

其中:content loss可以选择通常使用的MSE或者基于VGG的perceptual loss,adversarial loss就是Discriminator的输出

image-20190319132712222

论文中说,adversarial loss是可以让生成图片更接近实际图片的分布。

没有采用cross entropy的log[1-D( G(input) )]而是采用了 -log( D( G(input) )

Experiment

在ImageNet中随机选了350k张图片剪裁成96x96的patch。图片先进行高斯模糊,再downsample。LR preprocess为[0,1],HR为[-1,1]。MSE也是在[-1,1]上计算,VGGLoss需要乘以1/12.75

batch size = 16

optimizer: Adam, beta1=0.9

lr = 1e-4 1e6 iterations

选用预训练SRResNet

测试时去掉边缘4个像素(upsample时由于边缘像素的效果比较差)

Result

image-20190319153954384

用MOS计算,SRGAN是最高分。可是PSNR只有29.4dB(set5)和26.02dB(set14)。

与之前的研究结论不一样,论文认为更深的残差网络可以进一步提高效果,但训练时间更长

ESRGAN本体

在SRGAN的基础上:

  1. 提出Res-in-Res Dense Block,更容易训练。移除Batch Norm,改为Res Scaling(将res的output乘以一个scale之后再加input)
  2. 改用RelativisticGAN。
  3. VGGLoss改用activate前的feature map。