查看原文
其他

SRGAN With WGAN,让超分辨率算法训练更稳定

Justin ho 极市平台 2021-09-19

加入极市专业CV交流群,与6000+来自腾讯,华为,百度,北大,清华,中科院等名企名校视觉开发者互动交流!更有机会与李开复老师等大牛群内互动!

同时提供每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流。关注 极市平台 公众号 ,回复 加群,立刻申请入群~


作者:Justin ho

来源:https://zhuanlan.zhihu.com/p/37009085

本文已经作者授权,禁止二次转载


写在前面:


此文挖坑了很久,项目本在7个月前已经结束,但一直没心思把代码整理出来,后来发现有相同思路的团队把它写成论文占坑了,也就更没动力写了。昨晚发现我的github项目竟然有星星,感受到了莫大的支持,忽然燃起了写文章的动力,于是就有了现在这篇。



SRGAN简介


SRGAN,2017年CVPR中备受瞩目的超分辨率论文,把超分辨率的效果带到了一个新的高度,而2017年超分大赛NTIRE的冠军EDSR也是基于SRGAN的变体。


图来自原论文


图来自原论文

SRGAN是基于GAN方法进行训练的,有一个生成器和一个判别器,判别器的主体使用VGG19,生成器是一连串的Residual block连接,同时在模型后部也加入了subpixel模块,借鉴了 Shi et al的Subpixel Network[6]的思想,让图片在最后面的网络层才增加分辨率,提升分辨率的同时减少计算资源消耗。详细的介绍建议大家还是直接看论文[1],网上也有一些解读的文章,这里就直接介绍实现的一些创新细节。

  • Subpixel Network 链接:

    https://arxiv.org/abs/1609.05158


图来自原论文



GAN存在的问题


传统GAN存在一个问题是,你无法知道什么时候该停止训练Generator,什么时候该停止训练Discriminator,如果过度训练Discriminator,Generator就无法学习下去,反之也会导致模型效果差。如果能有一个loss指标来反映训练情况的话,训练的难度就会大大降低。而17年提出的WGAN[3]正是解决这一问题的重要方法。


WGAN使用Wasserstein距离来描述两个数据集分布之间的差异程度,只要把模型修改成WGAN的形式,就能根据一个唯一的loss来监控模型训练的程度。有关WGAN的解释强烈推荐大家阅读这篇文章:令人拍案叫绝的Wasserstein GAN ,作者用非常直白明了的语言介绍WGAN。

  • 令人拍案叫绝的Wasserstein GAN 链接:

    https://zhuanlan.zhihu.com/p/25071913



SRGAN结合WGAN


SRGAN的一个超赞复现来自 董豪 之手,他也是tensorlayer的作者之一,他的复现项目在github上得到了大量的星星,而笔者的代码就正是在他的基础上进行拓展,首先非常感谢作者的开源。

  • 董豪 链接:

    https://www.zhihu.com/people/zsdh123/activities

  • github 链接:https://github.com/tensorlayer/srgan


· 判别器最后一层去掉sigmoid
· 生成器和判别器的loss不取log
· 每次更新判别器的参数之后把它们的绝对值截断到不超过一个固定常数c
· 不要用基于动量的优化算法(包括momentum和Adam),推荐RMSProp,SGD也行
--来自《令人拍案叫绝的Wasserstein GAN》


根据这篇文章的介绍,对代码进行以上四项修改,把GAN的训练方式转换成WGAN,可以在tensorboard中监控loss的下降情况。因此,笔者对项目原作的进行了一些修改:


  1. 对模型代码进行了上面WGAN的改造;

  2. 增加了Tensorboard,监控loss下降情况;

  3. 对作者的model.py中,Generator的最后一层的卷积kernel从1×1改成9×9,这是原论文建议的结构。


SRGAN With Wasserstein GAN的完整代码已经开源到笔者的github:SRGAN_Wasserstein,里面有详细的改动介绍和使用说明,知乎不好写代码(写一句代码就少10个人看...),所以请直接移步到github上查看,觉得好的话就给个Star呀!

  • SRGAN_Wasserstein 链接:

    https://github.com/tensorlayer/srgan


改后的训练Loss下降情况

下面是一些复现后的超分复原效果:




一个来自工业界的问题


在实际生产使用中,遇到的低分辨率图片并不一定都是PNG格式的(无损压缩的图片复原效果最好),而且会带有不同程度的失真(有损压缩导致的artifacts),笔者尝试过很多算法,例如SRGAN、EDSR、RAISR、Fast Neural Style等等,这类图片目前使用任何一种超分算法都没法在提高分辨率的同时消除失真,这个问题我在 董豪 SRGAN项目的issue中也讨论过,同时在知乎也提出过这个问题:SRGAN超分辨率方法对于低清jpg格式的图片复原效果是否比不上对低清png格式的复原效果?,可惜没有很好的答案。目前学术界貌似还没有很好的算法,这里欢迎各位在评论区或者github上来讨论。

  • issue 链接:

    https://github.com/tensorlayer/srgan/issues/18

  • 问 题 链接:https://www.zhihu.com/question/65058389 



参考文献


[1] [1609.04802] Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network

  • 链接:https://arxiv.org/abs/1609.04802


[2] [1609.07009] Is the deconvolution layer the same as a convolutional layer?

  • 链接:https://arxiv.org/abs/1609.07009


[3] [1701.07875] Wasserstein GAN

  • 链接:https://arxiv.org/abs/1701.07875


[4] 令人拍案叫绝的Wasserstein GAN

  • 链接:https://zhuanlan.zhihu.com/p/25071913


[5] 本项目仓库:JustinhoCHN/SRGAN_Wasserstein

  • 链接:

    https://github.com/JustinhoCHN/SRGAN_Wasserstein


[6] [1609.05158] Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network

  • 链接:https://arxiv.org/abs/1609.05158



-End-


*延伸阅读





超分辨率交流群


添加极市小助手微信(ID : cv-mart),备注:研究方向-姓名-学校/公司-城市(如:目标检测-小极-北大-深圳),即可进群。(已经添加小助手的好友直接私信)


△长按添加极市小助手


其他方向如目标检测、目标跟踪、人脸、工业检测、医学影像、三维&SLAM、图像分割、姿态估计、嵌入式视觉、OCR 等,也可扫码添加极市小助手拉你进群,更有每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流,一起来让思想之光照的更远吧~

△长按关注极市平台


觉得有用麻烦给个在看啦~  

: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存