[论文笔记]ESRGAN: Enhanced Super-Resolution Generative Adversarial Networks

浪尽此生 提交于 2019-11-27 04:57:20

[论文笔记]ESRGAN: Enhanced Super-Resolution Generative Adversarial Networks

解析1 解析2

代码

本篇论文是基于SRGAN改进而来到,相比于SRGAN它在三个方面进行了改进:

1.网络的基本单元从基本的残差单元变为Residual-in-Residual Dense Block (RRDB);

2.GAN网络改进为Relativistic average GAN (RaGAN);

3.改进感知域损失函数,使用激活前的VGG特征,这个改进会提供更尖锐的边缘和更符合视觉的结果。

[外链图片转存失败(img-JZ2SjXUj-1565667100950)(assets/1564493155387.png)]

1. Network Architecture

1.1generator G

  • 将所有的BN layer去除(fig4 左1,左2)
  • 将原SRGAN中的resnet网络改为RRDB(fig4 右)
  • 对残差信息进行scaling,即将残差信息乘以一个0到1之间的数,用于防止不稳定(fig4 右中的β)
  • 更小的初始化,作者发现当初始化参数的方差变小时,残差结构更容易进行训练

[外链图片转存失败(img-OrrEe3Wl-1565667100952)(assets/1564489632425.png)]

BN层在训练时,使用一个batch的数据的均值和方差对该batch特征进行归一化,在测试时,使用在整个测试集上的数据预测的均值和方差。当训练集和测试集的统计量有很大不同的时候,BN层就会倾向于生成不好的伪影,并且限制模型的泛化能力。作者发现,BN层在网络比较深,而且在GAN框架下进行训练的时候,更会产生伪影。这些伪影偶尔出现在迭代和不同的设置中,违反了对训练稳定性能的需求。所以为了稳定的训练和一致的性能,作者去掉了BN层。此外,去掉BN层也能提高模型的泛化能力,减少计算复杂度和内存占用。

1.2 discriminator

作者基于Relativistic GAN改进了判别器。判别器 D 使用的网络是 VGG 网络,SRGAN中的判别器D用于估计输入到判别器中的图像是真实且自然图像的概率,而Relativistic D则尝试估计真实图像相对来说比fake图像更逼真的概率。

[外链图片转存失败(img-hOIavMYt-1565667100952)(assets/1564490401625.png)]

作者把标准的判别器换成Relativistic average Discriminator(RaD),在SRGAN中的标准D可以表示为D(X)=σ(C(X)),其中σ是Sigmoid函数,C(X)是非变换的鉴别器输出。然后将RaD定义为DRa(xr,xf)=σ(C(xr)Exf[C(xf)])D_{Ra}(x_r,x_f)=\sigma(C(x_r)-E_{x_f}[C(x_f)]),其中Exf[]E_{x_f}[·]表示取batchsize中所有fake data的平均值。所以

  • 判别器损失函数为:
    LDRa=Exr[log(DRa(xr,xy))]Exf[1log(DRa(xf,xr))] L_{D}^{Ra}=-E_{x_r}[log(D_{Ra(x_r,x_y)})]-E_{x_f}[1-log(D_{Ra}(x_f,x_r))]

  • 生成器对抗损失函数为:
    LGRa=Exr[log(1DRa(xr,xy))]Exf[log(DRa(xf,xr))] L_{G}^{Ra}=-E_{x_r}[log(1-D_{Ra(x_r,x_y)})]-E_{x_f}[log(D_{Ra}(x_f,x_r))]

1.3 Perceptual Loss

我们还通过在激活函数之前而不是像SRGAN那样在激活后来约束特征,从而形成了更有效的感知丢失LpercepL_{percep}。感知损失在SRGAN中是定义在预先训练的深层网络的激活层上,即两个激活特征之间的距离被最小化。而在本论文中,我们建议在激活层之前使用特征,这将克服原始设计的两个缺点:1)激活后的特征非常稀少,特别是在一个非常深的网络之后,如图6。2)使用激活后的特征还会导致与地面真实图像不一致的重建亮度,如图9左。

作者对使用的感知域损失进行了探索,与目前多数使用的用于图像分类的VGG网络构建的感知域损失相反,作者提出一种更适合于超分辨的感知域损失,这个损失基于一个用于材料识别的VGG16网络(MINCNet),这个网络更聚焦于纹理而不是物体。尽管这样带来的增益很小,但作者仍然相信,探索关注纹理的感知域损失对超分辨至关重要。

[外链图片转存失败(img-xQNJUvfT-1565667100953)(assets/1564491725000.png)]

[外链图片转存失败(img-nitKNUs4-1565667100953)(assets/1564491794228.png)]

1.4 loss function

所以我们的生成器的loss为:
LG=Lpercep+λLGRa+ηL1 L_G=L_{percep}+\lambda L_G^{Ra}+\eta L_1
1.其中L1=ExiG(xi)y1L_1=E_{x_i}||G(x_i)-y||_1 是content loss(求recovered image G(Xi)G(X_i)与ground-truth y的1-norm distance)

2.LpercepL_{percep}作者在源码中实现使用的是L1 loss

1.5 Network Interpolation

为了消除GaN方法中的噪声,同时保持良好的感知质量,我们提出了一种灵活有效的策略-网络插值。我们首先训练一个面向PSNR的网络GPANRG_{PANR},然后通过微调获得一个基于gan的网络GGANG_{GAN}。我们对这两个网络的所有相应参数进行插值,导出了一个插值模型GINTERPG_{INTERP}
θGINTERP=(1α)θGPSNR+αθGGAN \theta_G^{INTERP}=(1-\alpha)\theta_G^{PSNR}+\alpha\theta_G^{GAN}
其中α[0,1]\alpha \in [0,1]

提出的网络插值有两个优点:

  1. 该插值模型能够在不引入伪影的情况下对任何可行的α产生有意义的结果。
  2. 我们可以连续平衡感知质量和保真度,无需重新培训模型。
for k, v_PSNR in net_PSNR.items():
    v_ESRGAN = net_ESRGAN[k]
    net_interp[k] = (1 - alpha) * v_PSNR + alpha * v_ESRGAN

2.Details

部分代码解读

作者代码

  1. batchsize=16
  2. The spatial size of cropped HR patch is 128 × 128.
  3. 训练过程分成两个步骤:
    • 训练PSNR-oriented model (使用L1 loss );学习率初始化为0.0002 然后在每2×10^5iterations的时候下降2倍。我们用PSNR-oriented model 作为我们生成器的初始化。
    • 生成器训练的时候loss函数为公式3,其中λ=5×103,η=1×102\lambda = 5\times10^{-3},\eta=1\times 10^{-2}。学习率初始化为1×1041\times 10^{-4},然后分别在[10k,100k,200k,300k] iterations的时候讲学习率减半。

PSNR-oriented methods including SRCNN, EDSR and RCAN

perceptual-driven approaches including SRGAN and EnhanceNet

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!