SRGAN

SRGAN是一个这篇文章将生成对抗学习用于基于单幅图像的高分辨重建,不同于传统的CNN的方法,SRGAN得到的超分辨率的图片放大四倍之后还是能够体现细节感。

Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network
submit time:2017
arxiv link

SRGAN的作用

SRGAN目标从一个低分辨率的图片中生成它的高分辨率版本

传统CNN方法:基于深度学习的高分辨率图像重建已经取得了很好的效果,其方法是通过一系列低分辨率图像和与之对应的高分辨率图像作为训练数据,学习一个从低分辨率图像到高分辨率图像的映射函数。但是当图像的放大倍数在4以上时,很容易使得到的结果显得过于平滑,而缺少一些细节上的真实感。这是因为传统的方法使用的代价函数一般是最小均方差(MSE),使得生成的图像有较高的信噪比,但是缺少了高频信息,出现过度平滑的纹理。作者还做了实验,证明并不是信噪比越高超分辨率效果越好。
本文的做法:应当使重建的高分辨率图像与真实的高分辨率图像无论是低层次的像素值上,还是高层次的抽象特征上,和整体概念和风格上,都应当接近。因此在loss部分,SRGAN加上了feature map部分的MSE loss。

网络结构

生成网络部分:SRResnet,由残差结构,BN,PReLU组成,用于实现高分辨率的生成。
判别器部分:由大量卷积层,Leaky ReLU,BN等结构组成,用于判别图像的真实性。

损失函数

SGGAN的损失函数由两部分组成:

content loss,以及adversarial loss组成。
content loss:传统算法使用的是还原图像与GT图像之间的MSE损失,作者为了避免放大后特征过于平滑,认为高层次(features map)也应当相似。因此定义了VGG feature map loss。

其中$\phi_{i,j}$表示feature map的位置在j-th conv 与i-th Max pooling 中间的部分。即同时对GT与生成的图片提取feature map,然后最小化这两种features map的MSE loss。

adversarial loss:对抗网络部分的loss为判别器判别loss,即当生成器生成的图片,判别器认为为真实的图片时,该loss取得最小。

SRGAN输入输出以及亮点

SRGAN的训练数据:
GT:为原始高分辨率的图片
train data:原始图片经过高斯滤波得到的图片
输出:即为最终恢复高分辨率之后的图片

亮点:

  • 训练了一个SRResnet,由Resnet生成的一张恢复高分辨率的图片,然后将这张图片与GT传入Vgg网络中,训练一个MSE loss 最小。
  • 重新设计了Loss,将features map的MSE Loss,与对抗网络的Loss结合。

总结

这篇文章可以比较好的恢复分辨率低的问题,结合了高层特征Loss以及对抗网络的loss共同作用,得到比较好的还原结果。

看这篇文章的本意是想要对电阻成像数据进行恢复,这么看来,恢复的前提需要GT,但是数据集中并不存在这部分数据,因此这种方法可能需要进行修改。我觉得一个思路可能可以行得通,首先对电阻成像数据进行切割,然后将切割后的小batch图像作为GT,进行训练,可能可行。