CV | SRGAN论文笔记:Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network

 

题外话

时隔一年多,距离第一篇SRCNN 超分系列的文章再更新 >.< 随着22个月的过去,超分在工业界的落地趋势逐渐明朗,让我们一起来回顾超分辨率这个领域又一经典里程碑式的方法——基于生成式对抗网络的超分辨率网络 SRGAN。

 

研究背景介绍

超分辨率(super resolution)任务的目标是将输入的低分辨率图像,例如256×256的图像,等比例放大若干倍后(如放大4倍),输出尺寸为1024×1024的图像。严格来说,现在PS里使用的等比例缩放(拉住图像对角线),也属于超分辨率的一种。在SRCNN中也有讨论过,随着CNN对图像处理领域的冲击,将CNN应用到超分辨率方向已成为主要趋势。与传统的缩放算法,例如基于线性插值、稀疏编码的缩放算法,结合CNN的超分算法可以学习出更具有细节性更符合人眼观测效果的图像结果。在PSNR的数值指标上,CNN的方法相比传统的方法更具鲁棒性。

 

算法概述

本文介绍的方法是twitter团队于2017年CVPR上发表的Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network,中文翻译理解上是基于生成对抗网络的单帧图像超分辨率方法,该方法可以生成近似照片真实性的放大效果,在学术界上人们都将该方法简称为SRGAN。

在SRCNN提出之后,后续的超分算法主要是依照它的算法框架来进行改进:1)增加更深的卷积层;2)使用更复杂的卷积结构;3)改进损失函数。尽管在PSNR值和表达能力上,这些方法推进了发展,一方面仍没能在整体框架上进行突破。另一方面,尽管PSNR的值有所提高,但在生成细节上会倾向于抹去一些复杂的纹理。如上图所示,SRResNet的生成结果是按照SRCNN的基本框架进行训练,相比SRGAN取得了更高的PSNR值,但是在细节上来看SRGAN的结果更好。

 

SRGAN的作者将GAN与超分辨率任务相结合,这是第一个将对抗生成网络引入超分任务的工作,对后续的超分工作奠定了一个新的方向。而且SRGAN也是第一个支持放大×4倍的方法,并且效果喜人。为了更好地捕捉纹理和细节,该文作者对应设计出改进的损失函数,包含内容损失(content loss) 和对抗损失(adversarial loss)。除此之外,MOS的评价标准也被引入,MOS是mean opinion score的简称,通过培训专业的图像质量评价员,来对随机的图像打分,以此评价合成的图像质量。

 

模型结构

如之前介绍过的生成对抗网络GAN提及的,SRGAN也由两个子网络构成:生成模型Generator(缩写为G)和判别模型Discriminator(缩写为D),整体结构如下所示。

对于生成模型G:

模型的结构设计主要受ResNet启发,由B个残差block网络结构级联构成。每个残差block中包含层顺序为 卷积conv--归一化BN--激活层PReLU--卷积conv--归一化BN--点加操作。值得注意的是,生成模型的大部分卷积操作都是保留图像的原尺寸的,也就是低分辨率的W、H尺寸,只在C维度上加深。框图里靠近输出的两个绿框,大家可以看到一个PixelShuffler操作,它的作用等同于upsampling放大操作,两个绿框分别对W和H维度进行两倍的放大,到输出的时候W和H就变为目标的×4大小了。

 

对于判别模型D:

判别模型的结构就相对简单,值得注意的是输入部分,将生成的SR图像和HR图像随机混合输入到判别模型中进行判断。不过我看了一些具体的实现,大家会把两张图像级联起来或者拼接起来进行处理。这个输入的具体做法可以看看哪种的效果更好。判别模型的后续处理都比较好理解,卷积--BN--激活,最后全连接为1024维度输出最终的判别概率,靠近1则为HR,靠近0则为SR。判别模型输出接近0.5的时候,理论上是GAN训练停止的标志。这里为何是理论上在下一部分具体讨论。

 

损失函数

引入GAN的机制后,对应的损失函数就得加上对抗损失项。整体的损失loss函数定义如下。

CV | SRGAN论文笔记:Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network_第1张图片

损失函数由两个项构成,content loss和adversarial loss,分别对应生成图像的质量(内容)和对抗网络的判别而定义。在判别模型的收敛标准里,理论上l_{Gen}的值趋近于0.5说明GAN训练好了,但是看SRGAN的这个定义,l_{Gen}前有一个10^{-3}的系数,当然这个系数作者在后面的实验部分应该说明是在多种条件训练结果里,选出的最佳的值。不过就我个人训练了几个网上SRGAN的实现代码来看,即使l_{Gen}的值训飞了,最终模型的生成效果也还不错,只是可能与原文的PSNR有一些差距,但差距是可容忍的。关于GAN的训练,有很多人总结过很多技巧性的细节,这个之后可以多多关注一下。

 

内容损失

内容损失content loss由两部分组成,一部分和SRCNN的定义类似,主要基于MSE基于定义。对生成的图像G(I)和目标图像I进行点对点的方差值求和求平均。

CV | SRGAN论文笔记:Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network_第2张图片

另一部分也是作者提出的创新点之一,取名为l_{VGG},具体定义如下。顾名思义,是利用VGG网络分别对生成的图像G(I)和目标高清图像I分别进行特征提取,在同一层卷积后池化之前,取特征向量值进行点对点差值。这么做是为了进一步保证合成的图像与目标图像接近,更好地学习图像的内容和纹理。

CV | SRGAN论文笔记:Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network_第3张图片

为何使用基于GAN的生成效果会更好呢?作者给出分析如下图。基于MSE的方法,也就是在SRGAN之前的方法,主要是基于MSE定义损失函数,倾向于对所有生成的图像求均值,这个是根据MSE的基本定义来分析的。而基于GAN的方法,虽然生成的图像,不能靠近所有样本的分布,但是会距离某些图像内容很近,从而使得人眼感官提升。这可能也是SRGAN的PSNR虽然没有SRResNet高,但是人眼看起来更逼真的原因。

CV | SRGAN论文笔记:Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network_第4张图片

 

实验结果

作者给出了很详细的实验内容,还有很多分析。感兴趣的同学们可以移步原文看看。下表是取自原文的一组实验结果,和SRResNet相比,SRGAN的PSNR值并不出彩,但是在MOS这个人眼主观评测指标下,SRGAN领先很多。

CV | SRGAN论文笔记:Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network_第5张图片

 

模型的落地和优化

因为SRGAN是全卷积网络,在推理阶段用GPU加速会取得一定的收益,不过因为超分的目标是生成高清的图像,这部分想要达到实时则需要对模型进行剪裁或者更多地并行化设计。

 

欢迎大家评论区指正和讨论!即将迎来四月啦!

 

 

后记:

宅在家的第60多++++天,已经数不出来了= = 工作加油!纪念奋斗一周年啦!

 

 

 

 

 

 

你可能感兴趣的:(CV,DL)