用SRGAN提升图片清晰度(TensorFlow)

版权声明:本文为博主原创文章,允许转载,注明出处,回复告诉博主一声即可。 https://blog.csdn.net/Cloudox_/article/details/78666910

近两年GAN(Generative Adversarial Network
)相关的论文大火了一把,我自己也体验了几次,确实是很神奇的网络,GAN的各种变体基本都是用来生成图片的,关于GAN相关的说明这里不多讲,如有需要了解的可以自行搜索。

但是GAN似乎有个问题,生成的图片清晰度不是很好,因此SRGAN(Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial
Network
)也就是针对这个问题作出的优化,不同于普通的GAN是通过噪声来生成一个真实图片,SRGAN的目的在于将一个低分辨率的图片转化为一个高分辨率的图片。

具体的算法这里也不介绍了,GAN的变体太多,我也不是专门研究这些的,所以这里只介绍效果如何,以及怎么用。

先看几组图:

效果图

很好奇论文中选择的示例图居然是一个我国少数民族妹子。

训练方法大致就是构建好网络后,找一个高清图片数据集,对每个图片做处理得到低分辨率的图片,从而得到低分辨率图片数据集。用这两个数据集来训练网络,实现低分辨率到高分辨率图片的转化。

我自己测试了几张人脸图的转换:

  • 人脸·男:
    左:低分辨率   右:高分辨率

  • 人脸·女:
    左:低分辨率   右:高分辨率

从对比来看很容易发现确实提高了分辨率,至少视觉上看总觉得左边的是眼镜糊了。

我们放大来看一下算法到底做了什么:

低分辨率·男

高分辨率·男

从放大图中可以看到,人脸上多了很多奇怪的纹路,但是缩小后看就会觉得确实分辨率提高了,神奇的大自然!

如果你对这个实验感兴趣,也可以自己来尝试一下。在Github可以搜到很多TensorFlow下的开源代码,如果自己机器显卡够强的话可以自己按照说明训练,如果显卡不行也没关系,我实验的这份源码作者提供了预训练好的模型(最爱这种作者了!):https://github.com/brade31919/SRGAN-tensorflow

其训练好的模型需要在Google云盘下载,需要翻墙。

要注意的是,这份代码只能输入png图片,如果你是jpg图片,通过简单的画图工具转换成png格式也是不行的,代码会报错的。

下载源代码和模型后,将模型文件夹“SRGAN_pre-trained”直接放到源代码目录下,创建一个你的图片目录,将png图片丢进去,修改“inference_SRGAN.sh”文件的红框部分为你的图片路径:

inference_SRGAN.sh

然后在终端运行“inference_SRGAN.sh”文件即可,如果成功了会如下:

转换成功示例

其中“000156”是我图片的名字。

最后,我的运行环境是:
* macOS 10.12.6
* TensorFlow 1.3.0
* Python 2.7

Have fun!


查看作者首页

展开阅读全文

没有更多推荐了,返回首页