文章目录

  • 前言
  • Demo效果
  • 链接
  • 原理分析
    • 系统模型
    • 损失函数
  • 实验
  • 结束

前言


平时生活中,我们经常碰到一些自己喜欢的图片却苦于分辨率很低,而原图又找不太到。 现在,神经网络可以帮助我们从一张给定的低分辨率图片恢复出高分辨率的图片。 这个功能听上去既炫酷又实用,具体是怎么做的呢,详见下文!

Demo效果



上图就是训练了2000次后的模型的效果,只需要输入一张左边的低精度的图片, 就可以生成右边的高精度的图片。肉眼看上去效果还是非常不错的!

这张GIF则展示了整个训练过程的变化, 左边的图是由神经网络生成的, 中间的是原始的高精度的图片, 右边的是输入到神经网络的低分辨率图片, 神经网络在整个生成过程中是没有得到高精度图片信息的,这里给出高精度图片只是为了对比体现生成的效果。可以看到在100次epoch迭代之后,性能已经非常不错了。

链接

项目源码:基于keras的SRGAN实现.
主要参考了著名的keras-GAN这个库,做了一些小改动使得节目效果更好,适合作为Demo来展示哈哈。如果对你有帮助的话请Star一下哈!
论文地址 被引用了1500多次,很强了!这个代码也是根据论文里的参数写的。
数据集地址 这个链接给出了百度云和谷歌云盘的下载地址,笔者是用百度云下载的,非会员用户, 5M/s的速度,很给力!

原理分析

这里提供非常概括性的分析,想深入理解的同学建议参考原文。

系统模型


首先作者使用了非常火热的GAN生成对抗网络(对GAN不熟悉的可以百度一下GAN,已经有许多优质的资料)。 生成网络(上图上半部)接收低精度图片作为输入,通过残差网络等,生成高精度图片。 然后 判别器网络(上图下半部)接收一个输入, 判断其是否为生成的图片。 损失函数为:
min⁡θGmax⁡θDEIHR∼pranin(IHR)[log⁡DθD(IHR)]+EILR∼pG(ILR)[log⁡(1−DθD(GθG(ILR))]\begin{array}{c}{\min _{\theta_{G}} \max _{\theta_{D}} \mathbb{E}_{I^{H R} \sim p_{\mathrm{ranin}}\left(I^{H R}\right)}\left[\log D_{\theta_{D}}\left(I^{H R}\right)\right]+} {\mathbb{E}_{I^{L R} \sim p_{G}\left(I^{L R}\right)}\left[\log \left(1-D_{\theta_{D}}\left(G_{\theta_{G}}\left(I^{L R}\right)\right)\right]\right.}\end{array} minθG​​maxθD​​EIHR∼pranin​(IHR)​[logDθD​​(IHR)]+EILR∼pG​(ILR)​[log(1−DθD​​(GθG​​(ILR))]​
没有GAN基础的同学可能比较难理解上述公式,这里深入浅出的通俗解释下训练过程其实就是:

  1. 固定生成器G (参数为θG{\theta_{G}}θG​), 训练判别器,使得其能够分辨 真实的图片和生成器生成的图片。
  2. 固定判别器, 训练生成器, 使得其能够让固定的判别器将其判别为真实的图片
    如此迭代之后, 判别器再也无法分别真实和生成的图片,此时就说明生成器生成的图片已经足够以假乱真。这里真实的图片指的就是高精度的图片,训练完成后,我们期望生成器可以接收低精度图片,来生成高精度图片。

生成器作者主要使用了ResNet来实现。
判别器是使用了常规的卷积神经网络。

损失函数

与普通的GAN网络不同的是,这篇文章还考虑了content loss:
lVGG/i.jSR=1Wi,jHi,j∑x=1Wi,jHi,j(ϕi,j(IHR)x,y−ϕi,j(GθG(ILR))x,y)2\begin{array}{r}{l_{V G G / i . j}^{S R}=\frac{1}{W_{i, j} H_{i, j}} \sum_{x=1}^{W_{i, j} H_{i, j}}\left(\phi_{i, j}\left(I^{H R}\right)_{x, y}\right.} {-\phi_{i, j}\left(G_{\theta_{G}}\left(I^{L R}\right)\right)_{x, y} )^{2}}\end{array} lVGG/i.jSR​=Wi,j​Hi,j​1​∑x=1Wi,j​Hi,j​​(ϕi,j​(IHR)x,y​−ϕi,j​(GθG​​(ILR))x,y​)2​
意思就是,生成的图片会和准确的图片一起,输入到VGG网络中,然后得到特征图。 再将两者的特征图求MSE,并训练生成器缩小该MSE。这就是从内容的角度,让生成的图片和准确图片尽可能的接近。

结合上述的GAN网络,本文采用的loss是:
lSR=lXSR⏟content loss +10−3lGenSR⏟adversarial loss l^{S R}=\underbrace{l_{\mathrm{X}}^{S R}}_{\text { content loss }}+\underbrace{10^{-3} l_{G e n}^{S R}}_{\text { adversarial loss }} lSR= content loss lXSR​​​+ adversarial loss 10−3lGenSR​​​
也就是说在MSE损失的基础上,掺入了一点GAN的损失,作者指出这样会获得更好的性能。

实验

上述简单的概述应该很难让读者完全看懂,建议结合论文与代码一起融会贯通。这里说一下仿真细节:
数据集使用了数据集地址 人脸数据集,因此要恢复的图片也应该是人像图才会效果比较好。
笔者的配置是1080Ti + i9-9900k + 48G内存, 因此使用的batch_size为10。配置不够的同学可以先设为1,确保机器可以跑起来。
具体还可以参见基于keras的SRGAN实现中的readme,有具体的使用方法。

结束

这个Demo非常简单,但是效果很不错,适合课堂演示,Presentation之类的。
我给出了自己这边训练了2000次后的模型权重,可以从链接下载
提取码:su92
由于训练的模型固定了输出的尺寸,因此你自己想输入的图片也尽可能取正方形图片(裁剪一下就行)。

深度学习:用生成对抗网络(GAN)来恢复高分辨率(高精度)图片 (附源码,模型与数据集)相关推荐

  1. 【深度学习】生成对抗网络GAN|GAN、WGAN、WGAN-UP、CGAN、CycleGAN、DCGAN

    文章目录 一.Typical GAN 二.WGAN 三.Improved GAN (WGAN-GP) 四.Conditional GAN(CGAN) 五.CycleGAN 六.

  2. 深度学习之生成对抗网络(6)GAN训练难题

    深度学习之生成对抗网络(6)GAN训练难题 1. 超参数敏感 2. 模式崩塌  尽管从理论层面分析了GAN网络能够学习到数据的真实分布,但是在工程实现中,常常出现GAN网络训练困难的问题,主要体现在G ...

  3. 深度学习之生成对抗网络(4)GAN变种

    深度学习之生成对抗网络(4)GAN变种 1. DCGAN 2. InfoGAN 3. CycleGAN 4. WGAN 5. Equal GAN 6. Self-Attention GAN 7. Bi ...

  4. 深度学习之生成对抗网络(2)GAN原理

    深度学习之生成对抗网络(2)GAN原理 1. 网络结构 生成网络G(z)\text{G}(\boldsymbol z)G(z) 判别网络D(x)\text{D}(\boldsymbol x)D(x) ...

  5. 【深度学习】生成对抗网络(GAN)的tensorflow实现

    [深度学习]生成对抗网络(GAN)的tensorflow实现 一.GAN原理 二.GAN的应用 三.GAN的tensorflow实现 参考资料 GAN( Generative Adversarial ...

  6. 深度学习之生成对抗网络(8)WGAN-GP实战

    深度学习之生成对抗网络(8)WGAN-GP实战 代码修改 完整代码 WGAN WGAN_train 代码修改  WGAN-GP模型可以在原来GAN代码实现的基础上仅做少量修改.WGAN-GP模型的判别 ...

  7. 深度学习之生成对抗网络(7)WGAN原理

    深度学习之生成对抗网络(7)WGAN原理 1. JS散度的缺陷 2. EM距离 3. WGAN-GP  WGAN算法从理论层面分析了GAN训练不稳定的原因,并提出了有效的解决方法.那么是什么原因导致了 ...

  8. 深度学习之生成对抗网络(1)博弈学习实例

    深度学习之生成对抗网络(1)博弈学习实例 博弈学习实例  在 生成对抗网络(Generative Adversarial Network,简称GAN)发明之前,变分自编码器被认为是理论完备,实现简单, ...

  9. 深度学习之生成对抗网络(5)纳什均衡

    深度学习之生成对抗网络(5)纳什均衡 1. 判别器状态 2. 生成器状态 3. 纳什均衡点  现在我们从理论层面进行分析,通过博弈学习的训练方式,生成器G和判别器D分别会达到什么平衡状态.具体地,我们 ...

  10. 生成对抗网络(GANs)的资料小结,另附:资源|17类对抗网络经典论文及开源代码(附源码)

    1.GANs的一些资料链接 ************************************************** *********************************** ...

最新文章

  1. Tomcat 6 部署工程总结,使用JNDI数据源配置
  2. lucene正向索引(续)——域(Field)的元数据信息在.fnm里,在倒排表里,利用跳跃表,有利于大大提高搜索速度。...
  3. 解决yum错误Error: requested datatype primary not available
  4. Python类的部分
  5. C语言易错题集 第四部
  6. mysql 默认当前时间_复制信息记录表|全方位认识 mysql 系统库
  7. 学习WPF——使用Font-Awesome图标字体
  8. mysql insert 不需要日志_详解MySQL|你不知道的新特性-8.0错误日志增强
  9. 循环矩阵与傅里叶相关的几点性质
  10. cf550D. Regular Bridge(构造)
  11. Android Camera (13)---MTK平台相机插值修改
  12. 小技巧 ----- 通过二进制串的位运算进行二维指数型枚举
  13. 中国首个5G全覆盖产研一体化创新园启动
  14. SpringMVC的Model、Model Map、ModelAndView
  15. Linux操作系统配置基础详解:GRUB入门 (转)
  16. Visual reasoning
  17. 短视频后期要做哪些内容?注意细节才能做出优质短视频
  18. android 自动剪裁图片,android使用系统裁剪图片
  19. hadoop快速自我学习--hadoop平台管理与维护
  20. 20个2013年最值得关注的网页设计趋势

热门文章

  1. Deep Mind用AlphaZero开发国际象棋新规则-3!
  2. 2021年中国兽医热疗室市场趋势报告、技术动态创新及2027年市场预测
  3. 台式计算机垃圾清理程序,PC Cleaning Utility(电脑垃圾清理软件)
  4. qt中socket通信流程图_Qt学习 之 Socket通信(世界上最简单的例子了)
  5. 计算机网络实践项目(大学宿舍网络部署)
  6. Users用户类默认值及各属性可能的值
  7. R语言学习记录:sample()函数
  8. IDEA的快捷键与qq的冲突了怎么办
  9. 输出星期几的英文表示
  10. 移动机器人定位方法概述