(ESRGAN)增强型超分辨率生成对抗网络-解读与实现

我们知道GAN 在图像修复时更容易得到符合视觉上效果更好的图像,今天要介绍的这篇文章——ESRGAN: Enhanced Super-Resolution Generative Adversarial Networks,它 发表于 ECCV 2018 的 Workshops,作者在 SRGAN 的基础上进行了改进,包括改进网络的结构、判决器的判决形式,以及更换了一个用于计算感知域损失的预训练网络。

(ESRGAN)增强型超分辨率生成对抗网络-解读与实现_第1张图片

超分辨率生成对抗网络(SRGAN)是一项开创性的工作,能够在单一图像超分辨率中生成逼真的纹理。这项工作发表于 CVPR 2017。

但是,放大后的细节通常伴随着令人不快的伪影。为了更进一步地提升视觉质量,作者仔细研究了 SRGAN 的三个关键部分:1)网络结构;2)对抗性损失;3)感知域损失。并对每一项进行改进,得到 ESRGAN。

具体而言,文章提出了一种 Residual-in-Residual Dense Block (RRDB) 的网络单元,在这个单元中,去掉了 BN(Batch Norm)层。此外,作者借鉴了 Relativistic GAN 的想法,让判别器预测图像的真实性而不是图像“是否是 fake 图像”。

最后,文章对感知域损失进行改进,使用激活前的特征,这样可以为亮度一致性和纹理恢复提供更强的监督。在这些改进的帮助下,ESRGAN 得到了更好的视觉质量以及更逼真和自然的纹理。

改进后的效果图(4 倍放大):

在纹理和细节上,ESRGAN都优于SRGAN

SRGAN的思考与贡献

现有的超分辨率网络在不同的网络结构设计以及训练策略下,超分辨的效果得到了很大的提升,特别是 PSNR 指标。但是,基于 PSNR 指标的模型会倾向于生成过度平滑的结果,这些结果缺少必要的高频信息。PSNR 指标与人类观察者的主观评价从根本上就不统一。

一些基于感知域信息驱动的方法已经提出来用于提升超分辨率结果的视觉质量。例如,感知域的损失函数提出来用于在特征空间(instead of 像素空间)中优化超分辨率模型;生成对抗网络通过鼓励网络生成一些更接近于自然图像的方法来提升超分辨率的质量;语义图像先验信息用于进一步改善恢复的纹理细节。

通过结合上面的方法,SRGAN 模型极大地提升了超分辨率结果的视觉质量。但是 SRGAN 模型得到的图像和 GT 图像仍有很大的差距。

ESRGAN的改进

文章对这三点做出改进:

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

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

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

 

网络结构及思想

生成器部分

首先,作者参考 SRResNet 结构作为整体的网络结构,SRResNet 的基本结构如下:

(ESRGAN)增强型超分辨率生成对抗网络-解读与实现_第2张图片

为了提升 SRGAN 重构的图像质量,作者主要对生成器 G 做出如下改变:

1. 去掉所有的 BN 层;

2. 把原始的 block 变为 Residual-in-Residual Dense Block (RRDB),这个 block 结合了多层的残差网络和密集连接。

如下图所示:

(ESRGAN)增强型超分辨率生成对抗网络-解读与实现_第3张图片

思想

BN 层的影响:对于不同的基于 PSNR 的任务(包括超分辨率和去模糊)来说,去掉 BN 层已经被证明会提高表现和减小计算复杂度。

BN 层在训练时,使用一个 batch 的数据的均值和方差对该 batch 特征进行归一化,在测试时,使用在整个测试集上的数据预测的均值和方差。当训练集和测试集的统计量有很大不同的时候,BN 层就会倾向于生成不好的伪影,并且限制模型的泛化能力。

作者发现,BN 层在网络比较深,而且在 GAN 框架下进行训练的时候,更会产生伪影。这些伪影偶尔出现在迭代和不同的设置中,违反了对训练稳定性能的需求。所以为了稳定的训练和一致的性能,作者去掉了 BN 层。此外,去掉 BN 层也能提高模型的泛化能力,减少计算复杂度和内存占用。

 技巧

除了上述的改进,作者也使用了一些技巧来训练深层网络:

1. 对残差信息进行 scaling,即将残差信息乘以一个 0 到 1 之间的数,用于防止不稳定;

2. 更小的初始化,作者发现当初始化参数的方差变小时,残差结构更容易进行训练。

(ESRGAN)增强型超分辨率生成对抗网络-解读与实现_第4张图片

判别器部分

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

Experiments篇

 复现所参考项目地址:https://github.com/xinntao/ESRGAN (Pytorch implementation)

如果想用tensorboardx,只需将train_ESRGAN.json文件中name里的debug拿掉即可:

 

另外,由于我使用的tensorboardx版本1.7比较新,需要将train.py中的49行的SummaryWriter的参数名称有log_dir改为logdir,因为新版的源码里这一块更新过:

(ESRGAN)增强型超分辨率生成对抗网络-解读与实现_第5张图片

 

 

PS: Windows上的实现推荐阅读文章vs2017 ESRGAN(Enhanced SRGAN)的PyTorch实现

转载于:https://www.cnblogs.com/carsonzhu/p/10967369.html

你可能感兴趣的:(人工智能,json,python)