前言

似乎是第一篇用Gan做超分?挺有借鉴意义的,原文为Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial

摘要

简单来说就是用MSE做loss容易丢失高频信息,他们提出用内容损失更好就是特征图的MSE,并且提出MOS作为评价指标自己定的一个评分标准,用来吹水,然后使用Gan来训练能够避免高频信息丢失,MOS更好确实人眼效果更好

网络

SRResNet

就是一个ResNet堆叠然后使用2个pixel shuffler层放大了4倍。

看到网上有些人把BN换成了IN,PRelu换成了LeakyRelu,其实是个trick,IN在gan里面表现更好。

SRGan

使用有预训练的SRResNet作为生成器,训练一个新卷积网络作为判别器。

训练

先单独使用MSE loss训练SRResNet,有一定效果后作为生成器的预训练权重,然后训练gan,有些细节:

  • Adam beta0 使用0.9 影响不大
  • lr 训练到一半时降一半 个人因为没有训练那么多epoch就没有降
  • lr 使用ImageNet参数normalize,hr归一到-1~1。 方便统一数量级
  • MSE loss 除一个常数,也是方便统一数量级但是新的pytorch mse默认求平均,本身就很小感觉不用除 但是统一数量级很值得借鉴
  • 生成器的loss为内容损失+1e-4 判别器交叉熵损失
  • 文章还说一个图片拆成16个96X96,但我只是随机crop了96X96,然后flip,多次训练。

代码

最后附上我实现的代码,见Github,参考了这篇 blog,数据集使用的是coco2014的val 4w张图片,验证集是bsd100。个人亲测训练集太小(使用bsd500 train)效果不好 也有可能是我数据增强写的不好?