以下内容基于本人阅读理解
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
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
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
其中:φ j (y)是VGG的第j层的activation output。
相当于借用VGG做feature extraction,feat Loss是图片在higher level feature map的EuclideanNorm,而不是像素级别的距离,保存了图片的semantic和空间结构,但是没有考虑到色彩、纹理和形状。
Style Reconstruction Loss
先定义一个gram matrix:
返回一个Cj x Cj的矩阵,计算φ j (y)的c通道和c‘通道对应的elementwise product的和。相当于计算channel wise的covariance。
style Loss是2个图片的GramMatrix差值的FrobeniusNorm。
More Specific
论文主要是利用了VGG16作为LossNetwork计算Loss,ImageTransformNet可以套用各种不同的网络。
做StyleTransfer时,需要同时使用ys,y_hat,yc作为LossNet的输入。
做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
全卷积,逐层增加通道数
输入通道为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)
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。
从manifold的角度分析:将patch映射到2维空间,可以发现GAN的结果与真实结果分布比较接近,而以MSE为objective function的结果偏离了真实分布,所以画面偏smooth。
SRGAN Loss
Loss函数采用,典型的GAN的min-max函数(基于binomial的loss,然后训练Discriminator最大化误差,训练Generator最小化误差)
其中:content loss可以选择通常使用的MSE或者基于VGG的perceptual loss,adversarial loss就是Discriminator的输出
论文中说,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
用MOS计算,SRGAN是最高分。可是PSNR只有29.4dB(set5)和26.02dB(set14)。
与之前的研究结论不一样,论文认为更深的残差网络可以进一步提高效果,但训练时间更长
ESRGAN本体
在SRGAN的基础上:
- 提出Res-in-Res Dense Block,更容易训练。移除Batch Norm,改为Res Scaling(将res的output乘以一个scale之后再加input)
- 改用RelativisticGAN。
- VGGLoss改用activate前的feature map。