s超分辨率(super-resolution)的通俗解释就是:将低分辨率的图像通过算法转换成高分辨率图像。听起来似乎很神奇,这样是不是可以把低清电影转换成高清了?就现在来看,基于深度学习的超分辨率(简称SR)已经达到了amazing的效果。


当然,以木盏的习惯就是,只在博文中讨论干货。

这篇博文要解析的算法叫做WDSR,来自UIUC的华人学生JiaHui Yu的论文。在SR界有一个比赛,叫做NTIRE,从2016年以来也才举办三届,不过自2017年开始,NTIRE就逐渐被全球学者所关注。NTIRE的冠军基本是保送CVPR的,NTIRE成长为SR界的COCO也是指日可待的。

NTIRE2018链接:http://www.vision.ee.ethz.ch/ntire18/

而WDSR就恰好是NTIRE2018的冠军,所以,目前看来WDSR就是SR界的state-of-the-art。WDSR文章目前只是挂在arxiv上,未来也许会发表在CVPR2019或ICCV2019上,所以,我们可以在论文正式发表之前了解到这篇优质算法。

介于很多同学更迫切的期待是实现而不是理解,所以我会在近期出一个复现教程。而这篇博文呢,主要讨论WDSR的算法思想。本文目的在于使得各种基础的同学看过都能有所收获,所以,我会花不少篇幅来介绍算法背景,有一定基础的同学可以跳着看。


首先按照国际惯例,直接给论文地址:https://arxiv.org/abs/1808.08718

八月底才挂到arxiv上的热乎文章,越早看越赚。


前言

通常的超分辨率分两种:SISRVSR。前者叫做单图像超分辨率,后者叫做视频超分辨率。我们通常理解的超分辨率都是指SISR,我们只需要输入一张低分辨率图像而获得高分辨率图像的输出。 而VSR会利用视频的时间关联性来获得对某一帧的SR。本文的算法就是针对前者。

最早将深度学习用到SISR的居然是Kaiming大神等人在ECCV2014年提到的SRCNN,那时并没有像NTIRE这样相关的比赛,只有少量开源数据集可以玩玩。至此,对kaiming大神的敬仰又多了一分。

ECCV2018有一篇关于小物体目标检测的论文让人印象深刻,迅速引起了大家的关注,这篇文章叫SOD-MTGAN,文中巧妙利用了SR对小物体进行放大,然后得到更高的小物体检测准确率。这也是木盏开始研究SR的原因,因为SR被证明是有利于目标检测和跟踪的

SOD-MTGAN论文地址:SOD-MTGAN: Small Object Detection via Multi-Task Generative Adversarial Network

我觉得在前言里面可以给出实现效果,这样可能更容易激起同学们想要探索这个算法的兴致。以下是我复现的算法效果:

一目了然,左图是低分辨率图像,右图是对WDSR retrain之后,复现的效果。这里的scale=2,就是边长放大两倍,即像素密度增加4倍,在下文中我会用X2来描述这种upscale。同理,X3表示边长放大3倍,X4表示边长放大4倍。一般来说,X2,X3和X4这三种规模用得比较多。上图是X2效果图。

评价指标

如果来描述SR效果呢?业界有个约定俗成的指标,叫做PSNR,即峰值信噪比。这个指标可以比较你SR结果图和ground truth(即原高清大图)之间的差距;此外,还有一个指标叫做SSIM,即结构相似性。这个指标与PSNR一样,也可以评价你SR的恢复效果。关于PSNR和SSIM两个指标,我都写了相关博文进行详细描述,想了解可以点击《PSNR》和《SSIM》

数据集

SR的数据集是数据来源最容易的数据集了,没有之一。因为你无须标注,只需准备一些高清图像,然后通过下采样把高清变成低清图像,这样就获得了一一对应的counterpart。就可以用以训练了。当然,对训练数据不同的下采样方法也会影响最后的算法性能,在这里不做重点讨论。

NTIRE2018指定的训练数据集是DIV2K,这个数据集只有1000张高清图(2K分辨率),其中800张作为训练,100张作为验证,再100张作为测试。DIV2K也提供了对高清图bicubic采样的低清图像,供以训练,就是说,下采样获得低分辨率图像这一步不用自己做了。

自制的数据对比样本:


WDSR

在这里正式对WDSR算法进行剖析。这里的W表示的是wide,即具有更宽泛的特征图。怎么理解更宽泛的特征图呢?作者对激活函数之前的特征图channel数增多,称为特征图更宽泛。这个描述怪怪的,不过就是这么个意思。

很多同学会认为SR算法一般会跟生成式算法GAN产生联系,然而事实并不是这样。确实有利用GAN来做SR的,不过目前顶尖的SR算法都是基于CNN的,WDSR也不例外。WDSR是基于CNN的SR算法

为什么基于CNN能做到SR?这个疑问先留在这里,待会儿好好解答。

基于CNN的SR算法自2014年何恺明大神的SRCNN以来,逐渐发展成如今的SR,具有四大法宝:

1. 上采样方法。我们从低分辨率图像转换到高分辨率图像,是不是要涉及上采样呢?100x100到400x400肯定要涉及上采样方法的。如果研究过自编码器等算法的同学会知道反卷积是图像深度学习种常用的上采样方法,在yolo v3中用到的上采样方法也是反卷积。事实上,反卷积这种上采样方法在目前一线的SR算法中是遭到鄙视的(虽然SOD-MTGAN中还在用)。不用反卷积用什么呢,有一种叫做pixel shuffle的新型卷积方法在CVPR2016年被提出来,也叫做sub-pixel convolution。这种新型卷积就是为SR量身定做的,如果想要详细了解这种卷积是如何操作的,请戳《pixel shuffle》,这也解释了为什么目前基于CNN的SR能比基于GAN效果更好了;

2. 超级深度&循环神经网络。神经网络深度的重要性相比无须多言了,在不少前辈们的研究成果表现,神经网络的深度是影响SR算法性能的关键因素之一。同时,利用循环神经网络的方法,可以增加权重的复用性。WDSR并没有用到RNN,可以跳过这个;

3. 跳跃连接。就如果Resnet做的那样,将前层输出与深层输出相加连接。一来呢,可以有效解决反向传播的梯度弥散,二来呢,可以有效利用浅层特征信息。目前的一线SR算法都会含有resblocks,WDSR也不例外。

4. 标准化层。BN层已经是说烂了的trick之一了,各种算法似乎都离不开BN。但batch normalization也不是唯一的normalization方法。如我其他博文中提到的LN,IN还有kaiming大神提出的GN。而WDSR算法采用了weight normalization的方法。对标准化层不熟悉的同学可以看我以前的文章《Batch Normalization》。

基于上面四个trick,作者提出了WDSR-A模型结构,我们可以看看长什么样子:

左边的EDSR呢,是NTIRE2017的冠军,自然要被2018的冠军吊打的。我们直接看右边,网络结构是超级简单的, residual body就是一系列的resblock组到一起,可以看作是一个自带激活函数的非线性卷积模块。上图的模块只包含三种:res模块,conv模块和pixel shuffle模块。只有pixel shuffle模块要特别注意。

WDSR在EDSR上的结构提升,一方面是去除了很多冗余的卷积层,这样计算更快。另一方面是改造了resblock。我们一分为二来看,去除冗余的卷积层(如上图阴影部分)作者认为这些层的效果是可以吸收到resbody里面的,通过去除实验之后,发现效果并没有下降,所以去除冗余卷积层可以降低计算开销。

改造resblock的方法如下:

左图呢就是ESDR的原始resblock,中间是WDSR-A,右边的是WDSR-B。作者在文中提出了两个版本的WDSR,这两个版本的区别就是resblock不同而已。 对于EDSR中的resblock,我们成为原始resblock,relu是在两个卷积运算中间,而且卷积核的filter数较少;而WDSR-A是在不增加计算开销的前提下,增加relu前卷积核的filter数以增加feature map的宽度。怎么理解这个操作呢?我们有神器neutron,用neutron分别打开ESDR和WDSR的结构图我们可以看到:

上图左边就是ESDR,右边就是WDSR-A。我们可以从relu前卷积核的filter数看到, 后者(192)是前者(64)的3倍。不过前者在relu后的filter数是后者的2倍。作者主要提的trick就是增加激活函数前的特征图的channel数。这样效果会更好。同样,我们可以对WDSR-B一目了然:

WDSR-B进一步解放了计算开销,将relu后的大卷积核拆分成两个小卷积核,这样可以在同样计算开销的前提下获得更宽泛的激活函数前的特征图(即channel数可以更多)。

所以,对于同样计算开销的前提下,表现性能是:WDSR-B > WDSR-A > ESDR。

Weight Normalization vs Batch Normalization

WN应该算是WDSR的最后一个重要的trick了。WN来自openAI在NIPS2016发表的一篇文章,就是将权重进行标准化。

对于WN我只是粗略了解,做一个简单的||v||表示v的欧几里得范数,w, v都是K维向量,而g=||w||,是一个标量。w是v的次态。 g/||v||这个标量就是为了线性改变向量v,从而使得||w||更靠近g。这样来使得权重w的值在一个规范的范围内。注意,WN和BN的操作有很大的不同。

根据作者的实验表明,WN可以用更高的学习率(10倍以上),而且可以获得更好的训练和测试准确率。

实验结果

上表数据主要是用PSNR作为指标进行比较,同时,特别讲究参数量,因为参数量直接决定计算开销。上述结果还是有些谦虚的,我用6M参数的WDSR-A测试DIV2K的val PSNR可以达到37多。 就我目前看的所有SR文章来看,对于DIV2K数据集能达到PSNR 35+的算法也就WDSR了。


总结

WDSR具有以下创新点:

1. 提高relu前的特征图channel数;

2. 将大卷积核拆分成两个低级卷积核,节省参数,进一步在同参数的情况下提高relu前的特征图channel数;

3. 加入weight norm。

WDSR(NTIRE2018超分辨率冠军)【深度解析】相关推荐

  1. NAFNet:图像去噪,去模糊新SOTA!荣获NTIRE 2022 超分辨率冠军方案!

    导读:2022年4月,旷视研究院发表了一种基于图像恢复任务的全新网络结构,它在SIDD和GoPro数据集上进行训练和测试,该网络结构实现了在图像去噪任务和图像去模糊任务上的新SOTA.具体计算量与实验 ...

  2. 单帧图像超分辨率与深度学习

    单帧图像超分辨率技术涉及到增加小图像的大小,同时尽可能地防止其质量下降.这一技术有着广泛用途,包括卫星和航天图像分析.医疗图像处理.压缩图像/视频增强及其他应用.我们将在本文借助三个深度学习模型解决这 ...

  3. 图像超分辨率(Super-Resolution)技术研究

    一.相关概念 1.分辨率 图像分辨率指图像中存储的信息量,是每英寸图像内有多少个像素点,分辨率的单位为PPI(Pixels Per Inch),通常叫做像素每英寸.一般情况下,图像分辨率越高,图像中包 ...

  4. 【超分辨率】从SRCNN到EDSR,总结深度学习端到端超分辨率方法发展历程

    此文转自 知乎专栏 棉花糖的工坊 作者 棉花糖 (侵删) 一直在学习图像超分辨率和深度学习,看到此文写得很好,故此转载分享.如有侵权,私信联系我,我将作删除. 超分辨率技术(Super-Resolut ...

  5. [翻译]2020年综述:基于深度学习的视频超分辨率

    综述:基于深度学习的视频超分辨率 Video Super Resolution Based on Deep Learning: A Comprehensive Survey 论文链接:https:// ...

  6. python opencv 实现基于深度学习的超分辨率处理

    s超分辨率(super-resolution)的通俗解释就是:将低分辨率的图像通过算法转换成高分辨率图像. 通常的超分辨率分两种:SISR和VSR.前者叫做单图像超分辨率,后者叫做视频超分辨率.我们通 ...

  7. 普通视频转高清:10个基于深度学习的超分辨率神经网络

    原文:http://www.tinymind.cn/articles/1176 在 AlphaGo 对弈李世石.柯洁之后,更多行业开始尝试通过机器学习优化现有技术方案.其实对于实时音视频来讲,对机器学 ...

  8. 超分辨率分析(二)--深度学习方案综述

    转自:https://www.jiqizhixin.com/articles/19022403 图像超分辨率(SR)是指从低分辨率(LR)图像中恢复高分辨率(HR)图像的过程,是计算机视觉和图像处理中 ...

  9. 学习笔记之——基于深度学习的图像超分辨率重建

    最近开展图像超分辨率( Image Super Resolution)方面的研究,做了一些列的调研,并结合本人的理解总结成本博文~(本博文仅用于本人的学习笔记,不做商业用途) 本博文涉及的paper已 ...

最新文章

  1. 局域网内其他电脑通过SSH访问NAT模式下的虚拟机
  2. 学php需要哪些基础,学习php需要什么基础?(附php学习路线图)
  3. 使用Python3进行AES加密和解密 输入的数据
  4. Mongodb参数详解(参考:http://blog.csdn.net/freebird_lb/article/details/8229567)
  5. OFD文件结构--带签名
  6. C++socket编程(二):系统socket库介绍
  7. Typora优化,Typora结合PicGo,让工作更轻松【图文教程】
  8. IDEA运行main,junit方法报错Class not found
  9. Linux入门-网络实验3.3
  10. 学生个人网页设计作品 学生个人网页模板 简单个人主页成品 个人网页制作 HTML学生个人网站作业设计 汉语言文学设计题材网页
  11. 如何在win10桌面便签日历中显示法定节假日安排?
  12. C#发送邮件 SMTP
  13. (3)Mathpix Snipping Tool——公式截图获取工具(转为LaTex、MarkDown格式)
  14. MFC调用Opencv显示视频
  15. java 合并pdf,如何在Java中合并PDF
  16. 合肥工业大学宣城校区2020年-2021年第一(大四上)学期物联网工程专业资料汇总(含课件、个人实验报告、实验代码、课设报告等)
  17. g33k 专用:使用 Mutt Email 客户端管理你的 Gmail
  18. JsonArray或者JsonObject转字符串后里面带有转义字符或者反斜杠的处理方式
  19. 2022年全球及中国半导体市场现状分析:数字化转型带来新机遇
  20. 服务器除了一个灯亮其余的都不亮,鼠标键盘没反应

热门文章

  1. 苹果浏览器微信底部返回栏显示/隐藏的问题
  2. 重点人员动态管控系统开发,合成作战平台建设方案
  3. iPhone13内存不够怎么解决 iPhone13显示内存不足怎么办
  4. 骁龙处理器哪一代产品发热控制最好?
  5. tensorflow兼容处理 tensorflow.compat.v1及module ‘tensorflow‘ has no attribute ‘reset_default_graph‘等问题汇总
  6. 数据库系统原理与应用教程(002)—— MySQL 安装与配置:MySQL 软件的卸载(windows 环境)
  7. 小引写帖子,我也写帖子
  8. DedeCMS实战-----2、制作频道封面页模板
  9. 计算机基础知识大全剪切,基础篇:剪切粘贴与复制粘贴的介绍
  10. 这里没大路 华军软件网