ESRGAN任务是超分,是ECCV18年的文章,曾在PIRM2018超分竞赛获得第一名,模型是在SRGAN基础上进行的改进;而SRGAN(CVPR17)是最早用GAN来做超分的文章,其2个特色分别是:
(1)生成器使用残差块。使用残差结构主要是由于设计的网络比较深,为了保证梯度信息的有效传播,增强网络稳定性。
(2)相较同行较早使用perceptual loss,是不是它最早提出的有待考证。
回到ESRGAN,它在SRGAN基础上把模型的几个组成成分都改了:(1)生成器结构改进。(2)判别器改用相对判别器。(3)损失函数(微调)。
生成器
本文对生成器的结构做了两个改进,分别就是下图的左右两部分。
(1)去掉了所有BN层。原因是作者发现BN层在网络较深时及GAN网络训练时会带来伪影。另外去掉它也减少了计算复杂度。
BN层效果不好的原因方面,比较赞同这个知乎专栏提到的:相对于分类这种“粗粒度”任务,像风格迁移、增强等这种“细粒度”任务中用BN的话,mini-batch内多张无关的图片之间计算了统计量,会弱化单张图片本身特有的细节信息。引自:深度学习中的Normalization模型,https://zhuanlan.zhihu.com/p/43200897。
(2)用残差密集块(RRDB)代替原始基础块,结合了多层残差网络和密集连接。使用Dense Block是因为之前用BN使得网络更容易优化,不容易陷入局部极小值,去掉BN后优化难一些,就使用了解空间更平滑、更容易训练的DenseNet结构,不过这里加大了计算量。
判别器
判别器方面,则是将最原始的标准GAN判别器改成了相对判别器(Relativistic Discriminator)。优化上是从原来真图判别为1增强图判别为0改为:真图的判别结果-增强图的平均判别结果往1方向优化(反过来同理)。
实际意义是使用对比的思想,优化使得当前真图比当前mini batch中增强图的平均更真实(反过来同理)。原来的话其实单纯往1、0优化只是将真/假距离拉大,而相对判别器进行真假对比更合理。
之前的EnlightenGAN也采用了相对判别器。
损失函数
主要关注生成器,其损失函数分三部分。其中第二项是GAN对抗损失(相对判别器版);第三项L1损失是监督学习增强输出与标签的L1。
改进在于第一项感知损失,之前的感知损失是vgg特征提取网络种**后的层进行特征提取再优化特征向量距离,作者改为用**前的层提取特征,因为**后损失了一些信息。
如下图,上面的四幅图为**前,下面四幅为**后,同时左半部分四幅图和右半部分对比又可以得出,网络越深**后损失的信息会越多。
网络插值
这部分Motivation是权衡视觉效果和量化指标(PSNR),采取了一个较直观的策略:在网络权重上进行插值。其中GPSNR模型是PSNR导向的模型,未详细介绍估计是把PSNR放进了loss中训练得到的。
不在增强图像上逐像素插值的原因是容易产生伪影和模糊。除了这两个策略,还有平衡loss中的权重超参数,作者没做这个的原因是计算代价太高。
实验
训练数据集:
主要使用的是DIV2K(2040*1356)已经收集好了,其次使用的是Flickr2K(20G)和OST。
训练、测试过程:
先划分成patch,然后下采样得到成对训练数据。生成配对数据集时,本文是对HR图像用MATLAB bicubic核函数进行下采样得到LR图。测试时用模型超分将LR图像增强,再与HR图计算PSNR等量化指标。另外评价时作者也用了Ma’s score和NIQE这俩无参考的指标。
小结
ESRGAN在生成器结构、判别器更换、损失函数优化三个方面对SRGAN进行了改进。
从再改进角度上看,虽然ESRGAN的效果有所增强,但是其计算量也大了,导致速度不太快,下一步看其生成器结构是否可以改进。
实验结果记录
(1)测试模型增强效果
效果方面测试了BSD100和DIV2K数据集,下面的结果是RGB颜色空间下三通道的PSNR结果,这才发现文章报告的PSNR是YcbCr颜色空间中只计算Y亮度这个通道的PSNR结果,有些耐人寻味,之后再改下代码跟原文结果对比一下。
BSD100 PSNR22.52
DIV2K 的前50张 PSNR24.54
(2)测试模型速度
1080Ti单卡,4倍上采样。
输入图Size 120*80 平均0.083s
输入图Size 500*400 平均0.85s
输入图Size 1000*700 平均3.31s
Size再大处理单张图像单卡空间就不够了,需要分割后进行增强,再合并增强结果。