[论文笔记]ESRGAN: Enhanced Super-Resolution Generative Adversarial Networks
本篇论文是基于SRGAN改进而来到,相比于SRGAN它在三个方面进行了改进:
1.网络的基本单元从基本的残差单元变为Residual-in-Residual Dense Block (RRDB);
2.GAN网络改进为Relativistic average GAN (RaGAN);
3.改进感知域损失函数,使用激活前的VGG特征,这个改进会提供更尖锐的边缘和更符合视觉的结果。
1. Network Architecture
1.1generator G
- 将所有的BN layer去除(fig4 左1,左2)
- 将原SRGAN中的resnet网络改为RRDB(fig4 右)
- 对残差信息进行scaling,即将残差信息乘以一个0到1之间的数,用于防止不稳定(fig4 右中的β)
- 更小的初始化,作者发现当初始化参数的方差变小时,残差结构更容易进行训练
BN层在训练时,使用一个batch的数据的均值和方差对该batch特征进行归一化,在测试时,使用在整个测试集上的数据预测的均值和方差。当训练集和测试集的统计量有很大不同的时候,BN层就会倾向于生成不好的伪影,并且限制模型的泛化能力。作者发现,BN层在网络比较深,而且在GAN框架下进行训练的时候,更会产生伪影。这些伪影偶尔出现在迭代和不同的设置中,违反了对训练稳定性能的需求。所以为了稳定的训练和一致的性能,作者去掉了BN层。此外,去掉BN层也能提高模型的泛化能力,减少计算复杂度和内存占用。
1.2 discriminator
作者基于Relativistic GAN改进了判别器。判别器 D 使用的网络是 VGG 网络,SRGAN中的判别器D用于估计输入到判别器中的图像是真实且自然图像的概率,而Relativistic D则尝试估计真实图像相对来说比fake图像更逼真的概率。
作者把标准的判别器换成Relativistic average Discriminator(RaD),在SRGAN中的标准D可以表示为D(X)=σ(C(X)),其中σ是Sigmoid函数,C(X)是非变换的鉴别器输出。然后将RaD定义为 D R a ( x r , x f ) = σ ( C ( x r ) − E x f [ C ( x f ) ] ) D_{Ra}(x_r,x_f)=\sigma(C(x_r)-E_{x_f}[C(x_f)]) DRa(xr,xf)=σ(C(xr)−Exf[C(xf)]),其中 E x f [ ⋅ ] E_{x_f}[·] Exf[⋅]表示取batchsize中所有fake data的平均值。所以
-
判别器损失函数为:
L D R a = − E x r [ l o g ( D R a ( x r , x y ) ) ] − E x f [ 1 − l o g ( D R