GAN_2——超分辨率

1 概述

图像超分辨率,简称超分(SR),通常是指分辨率的放大,如 64x64 的图片放大到 128x128,512x512 的图片放大到 1024x1024。

更朴素的讲,SR 就是要做到无中生有,一个低分辨率(LR)的图像放大到高分辨率(HR),两者直接的信息差距就需要按照一定的方式来补充,这种补充的方式也可以叫做插值。

病态问题,从低分辨率意味着信息少,高分辨率意味着信息多。从一个信息少的状态转移到信息多的状态,有着很多这可能性。

2 传统方案

在传统的方案中,插值的方式有:最近邻插值(Nearest-neighbor)、双线性插值(Bilinear)、双立方插值(bicubic)等。

2.1 优点

计算简单、速度快。

2.2 缺点

模式单一无法适应多样的图像内容,感知能力较差,难以重建出图像的高频信息,输出图像过于模糊,应用于压缩图像时,甚至会放大人工效应干扰。

3 基于CNN的超分辨率实现方案

3.1 SRCNN

2014年提出的 SRCNN 是首个利用 CNN 实现超分辨率的方式。SRCNN 流程为:
1)模型的输入为 LR,利用 bicubic 算法将其放大为目标尺寸;
2)将经过处理的 LR 图像输入网络,经过 CNN 处理得到 SR 图像;
3)将 SR 图像与目标 HR 图像作对比,利用 MSE 作为 Loss,不断优化,做到 SR 与 HR 图像尽可能相似。

自 SRCNN 后,出现了很多新的网络模型来优化重建效果和加速重建过程。2016 年提出的 VDSR 对 SRCNN 进行了改进,通过采用 20 层的网络来提升重建效果,其原因有两个:
1)深层网络能获得更大的感受野,理论上,感受野越大,学习的信息越多,准确率越高;
2)深层网络能实现复杂的非线性映射。

但是,网络层数的加深,会使得学习难度的上升,更加容易出现梯度消失或梯度爆炸等情况,模型也会更难收敛。

3.2 SRResNet

4 基于GAN的超分辨率实现方案

4.1 SRGAN

论文地址

4.1.1 模型效果


4.1.2 模型结构


Generator 中使用了 ResNet,做了一些 skip connection,从而有利于梯度的传递,学习效果更好。

4.1.3 Loss定义


loss 由 content loss 和 adversarial loss 两个部分组成(后文中的公式5和公式6):
1)content loss

其中 ϕ i , j \phi_{i,j} ϕi,j 表示在第 i i i 个最大池化层之前的第 j j j 个卷积得到的 feature map。则 l V G G / i , j S R l_{VGG/i,j}^{SR} lVGG/i,jSR 得到的是生成器 D 生成的 SR 图像和原始 HR 图像的 feature map 在网络中相同位置相同卷积核下的 loss, l V G G / i , j S R l_{VGG/i,j}^{SR} lVGG/i,jSR 越小则两个图像的特征越相似,所以需要最小化 l V G G / i , j S R l_{VGG/i,j}^{SR} lVGG/i,jSR

在此之前的 SR 研究大都将问题固化在 PSNR 上,使用的 loss 大多是MSE(公式4),导致图像整体过于平滑或者模糊,同时也与人的视觉感知不一致。

但是 SRGAN 注重于图像的感知相似性(perceptual similarity),将生成的图像和原始高清图像的 feature map 拿来比较,此部分得到的 loss 即为 content loss(公式5)。

2)adversarial loss

这部分损失表示的 GAN 中的对抗损失,用于提升生成图像的真实感(photo-realistic natural images)

公式6中, D θ D ( G θ G ( I L R ) ) D_{\theta_D}(G_{\theta_{G}}(I^{LR})) DθD(GθG(ILR))是判别器对于生成器生成的超分图片的输出, − log ⁡ ( ⋅ ) -\log(\cdot) log() ( 0 , 1 ) (0, 1) (0,1)上是一个单调递减的函数。

对于生成器 G 来说 D θ D ( G θ G ( I L R ) ) D_{\theta_D}(G_{\theta_{G}}(I^{LR})) DθD(GθG(ILR)) 越大越好,也就是 − log ⁡ D θ D ( G θ G ( I L R ) ) -\log{D_{\theta_D}(G_{\theta_{G}}(I^{LR}))} logDθD(GθG(ILR)) 越小越好,因此需要最小化 l G e n S R l_{Gen}^{SR} lGenSR

4.2 ESRGAN

官方代码GitHub

ESRGAN 的整体框架和 SRGAN 保持一致,相比 SRGAN,ESRGAN 有4处改进。

还在学习中,可以先参考这篇文章:渣画质的救赎——基于GAN的超分辨率方案

4.2.1 改进一

用Dense Block替换Residual Block,并去掉BN层

4.2.2 改进二

改进对抗损失函数——使用Relativistic GAN

4.2.3 改进三

改进生成器——使用relu激活前的特征图计算损失

4.2.4 改进四

使用网络插值(network interpolation)方法平衡解决客观评价指标与主观评价指标的矛盾

4.3 Real-ESRGAN

还在学习中,可以先参考这篇文章:Real-ESRGAN超分辨网络

5 QA

Q1:如果一个GAN模型是使用头像数据集训练好的,那么其能否直接用来生成不属于头像的数据?

A1:不行,直接使用非同类型的数据集预训练好的GAN模型,无法在目标类型有着好的泛化能力,需要通过迁移学习等方法来达到更好的效果。

Q2:生成器G的输入对生成的照片有多大的影响?

A2:

Q3:

A3:

Q4:

A4:

Q5:

A5:

参考资料

[1] 【超分辨率】—(ESRGAN)增强型超分辨率生成对抗网络-解读与实现
[2] 论文阅读 | 图像超分(一) SRGAN
[3] Real-ESRGAN超分辨网络
[4] 渣画质的救赎——基于GAN的超分辨率方案
[5] SRGAN-超分辨率图像复原

猜你喜欢

转载自blog.csdn.net/CesareBorgia/article/details/120462647