SRGAN的原理及Pytorch实现

Posted Rogn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SRGAN的原理及Pytorch实现相关的知识,希望对你有一定的参考价值。

follow this repo: https://github.com/aladdinpersson/Machine-Learning-Collection/tree/master/ML/Pytorch/GANs/SRGAN

paper: https://arxiv.org/pdf/1609.04802.pdf

 

介绍

号称是第一个将GAN应用于图像超分辨率的论文

Super-Resolution, SR

Single Image Super Resolution, SISR

low-resolution, LR

high-resolution, HR

mean square error, MSR

peak signal-to-noise ratio, PSNR

mean-opinion-score, MOS

结构

全部在图里面了

 

有一点出入的地方是,论文文字中residual block是16块,图中只画了5块(可能是画不下吧

喔 zz了,B=16

Subpixel模块

PixelShuffler操作,这里是用于Upsampling,扩大图片尺寸2倍

Subpixel模块是一种在超分辨率中经常使用的upscale方法,又叫做pixel shuffle。我们知道,对CNN的feature map进行放大的方法有转置卷积,但是如果直接用转置卷积的话,在超分辨率中通常会带入过多人工因素。而Subpixel模块会大大降低这个风险。

 

就是,如果我们想把图片放大2倍的话,那么我们需要生成2^2=4个一样大小的feature map,最后将这4个特征图拼成一个大图

  

loss改进

MSE/PSNR  不行

VGG feature map mse  行

作者认为PSNR高不一定好,PSNR低一点的可能更加符合人的视觉效果

为此作者设计了mean-opinion test(平均意见得分检验),请26个评分员对图片按5个梯度打分

 

比如第3幅的PSNR比第2幅低,但是看起来更逼真(比如帽子部分

一些思考

(1) vgg loss真的好吗?

高PSNR值并不符合人眼直观感受的缺点很早已经被注意到,但从未有有效的算法替代MSE类算法来进行相关工作,问题的根源在于MSE的高效性难以被超越;

SRGAN 似乎恢复了一些细节,但也有人认为这些其实时高频噪声,噪声在图像处理中的作用十分值得关注,但该领域已经进入半死不活的状态,期待有理论上的突破。

from https://zhuanlan.zhihu.com/p/27859358

qs 感觉就是加了复杂的vgg loss,变得既不优雅又低效 

效果提升也不明显,而是是个主观打分

论文作者说vgg越深越好,vgg loss就是符合人类视觉效果的终点吗

vgg随便选吗,需要是同类数据集训练出来的吗?

 

(2) residual block的深度怎么确定

论文中用的16层,作者后来又说>16层会更好,一直residual会学到多的知识吗 

其他

SRResNet可以单独用来做SR,这里是用作SRGAN的Generator

这么看GAN更像是一种训练方法,或者说是一种训练技巧,只是在训练过程中会用到Discirminator,而在推断阶段,仅仅用到的Generator

 

以上是关于SRGAN的原理及Pytorch实现的主要内容,如果未能解决你的问题,请参考以下文章

CycleGAN的原理及Pytorch实现

DCGAN的原理及Pytorch实现

deep_thoughts45_BatchNormLayerNormInstanceNormGroupNorm原理及pytorch手写实现API

Pytorch框架下CNN介绍及代码实现

基于PyTorch实现MNIST手写字识别

用Pytorch构建一个喵咪识别模型