超分辨率-RDN[通俗易懂]

超分辨率-RDN[通俗易懂]一、简介RDN——ResidualDenseNetwork——残差深度网络RDN是基于深度学习的超分方法之一二、结构RDN网络结构分为4个部分:1、SFENet(ShallowFeatureExtractionNet,浅层特征提取网络)2、RDBs(ResidualDenseBlocks,残差稠密块)3、DFF(DenseFeatureFusion,稠密特…

大家好,又见面了,我是你们的朋友全栈君。

一、简介

RDN——Residual Dense Network—— 残差深度网络
RDN是基于深度学习的超分方法之一,发表于CVPR 2018

二、结构

RDN网络结构分为4个部分:

1、SFENet(Shallow Feature Extraction Net, 浅层特征提取网络)
2、RDBs( Residual Dense Blocks, 残差稠密块)
3、DFF(Dense Feature Fusion, 稠密特征块 )
4、Up-Sampling Net(上采样网络)

在这里插入图片描述

2.1 SFENet

包含两个CONV层,用于提取浅层特征

2.2 RDBs

包含D个RDB,用于提取各层特征,一个RDB提取出一个局部特征。RDB结构如下图(c)所示:
在这里插入图片描述
可以看出,RDB = Residual block(残缺块) + Dense block(稠密块)
由于网络深度的增加,每层CONV层的特征会逐渐分级(得到hierarchical features),因为有不同的感受野(receptive fileds)。而Hierarchical features对图像重建提供了重要信息, 我们要充分利用所有层的信息和特征。

一个RDB结构分为3个部分:

2.2.1 CM(Contiguous Memory 近邻记忆)

RDB含有C个[CONV+ReLU],CM机制会将上一个RDB的状态发送到当前RDB中的每一个CONV层,也就是图(c)的小桥们

2.2.2 LFF(Local Feature Fusion 局部特征融合)

LLF将前一个RDB的各个状态与当前RDB的所有CONV层融合在一起。
RDN中,前一个RDB输出的feature-map 是直接与当前RDB串联起来的,这时,减少feature的数量就很有必要了。
我们使用一个11的CONV来减少feature的数量/控制输出信息:11CONV用于减少通道数,并保持nh,nw不变(具体看吴恩达深度学习4.2.5笔记)

2.2.3 LRL(Local Residual Learning 局部残差学习)

也就是将以下两者加起来,看c图下部的红箭头以及绿色加号:
前一RDB的输出 + 上面LFF的1*1CONV的输出
引入LRL以进一步提高信息流、提高网络表示能力,以达到更好的性能


2.3 DFF(Dense Feature Fusion, 稠密特征块 )

DFF在全局上提取各层特征。
包含两个部分:

2.3.1. GFF(global feature fusion 全局特征融合)

GFF 用于将所有RDB提取到的特征融合在一起,得到全局特征。GFF分为两部分:

 1x1 CONV 融合一系列的特征(1*1CONV的作用就是减少通道数,并保持Nh, Nw,详见吴恩达4.2.5)
 3x3 CONV 为下一步的GRL进一步提取特征
2.3.2. GRL(global residual learning 全局残差学习)

就是RDN结构图中的绿色加号
就是实现:
浅层特征 + 所有RDB提取到的特征

2.4 UPNet(Up-Sampling Net 上采样网络)

该模块表示网络最后的上采样+卷积操作。实现了输入图片的放大操作。


三、实现细节

  1. 除了用于融合局部或全局特征的CONV层的kernel size = 1×1 外,其他的CONV层都是 3×3的
  2. kernel size = 3×3的CONV层,都用SAME padding 以保持inputsize不变
  3. 浅层特征提取层、局部全局特征融合层的CONV的filter数量都是G0 = 64
  4. 其他层(RDB中)的CONV的filter数量都是G,并使用ReLU作为其激活函数
  5. 使用ESPCNN来提高粗分辨率特征,从而使得UPNet性能更好(???)
  6. RDN最后的CONV,若需要输出彩色高清图像,则可设置其输出的channel = 3;若需要输出灰度高清图像,可设置其输出的channel = 1

四、讨论(与其他网络的区别)

4.1 Difference to DenseNet

  1. 受DenseNet的启发,将局部密集连接加入到了RDB中
  2. 与DenseNet不同:移除了BN层,以提高运算速度降低计算复杂度和GPU内存的消耗
  3. 与DenseNet不同:移除了Pooling层,防止其将像素级的信息给去除掉
  4. 在RDN中,我们使用了局部残差学习,来将密集连接层和局部特征融合(LFF)结合起来
  5. 在RDN中,前一个RDB提取到的特征会与当前RDB的每一个CONV直接连接起来(局部特征融合LFF),更好地保障了信息流的贯通
  6. 与DenseNet不同:使用GFF将各RDB提取的特征全部concat起来,充分利用。而DenseNet 整个网络中只使用每一个DenseBlock最后的输出。

4.2 Difference to SRDenseNet

  1. RDN在三个方面对SRDenseNet的DenseNet进行了改进:
    1)加入了CM机制,使得先前的RDB模块和当前的RDB模块都有直接接触
    2)使用了LFF,使得RDB可以用更大的增长率
    3)RDB中的LRL模块增加了信息和梯度的流动
  2. 在RDB中,提取全局特征时不使用Dense Connection,取而代之的是DFF(Dense Feature Fusion, 稠密特征块,包含GFF和GRL)
  3. 损失函数:SRDenseNet使用L2 ;RDN使用L1(提高了性能,加快了收敛)

4.3 Difference to MemNet

  1. 损失函数:MemNet使用L2 ;RDN使用L1(提高了性能,加快了收敛)
  2. MemNet要用Bicubic插值方式对LR图片进行上采样,从而使LR图片达到所需的大小,这就导致特征提取和重建过程都在HR空间(高分辨率空间)中进行;而RDN从原始的LR图片(低分辨率图片)提取各层特征,很大程度上减少了计算的复杂度,并提高了性能
  3. MemNet中包含了递归和门限单元,这使得当前层不能接收上一层的输入,而RDB的前后模块是有交互的
  4. MemNet 没有全部利用中间的特征信息,而RDN通过Global Residual Learning 将所有信息都利用起来。

五、实验及结果

5.1 实验设置:

数据集
  1. 数据集: DIV2K(800 training imgs + 100 vali imgs + 100 testing imgs)
  2. 训练:DIV2K——800 training img + 5 vali img
  3. 测试:五个standard benchmark datasets:Set5 [1], Set14 [33], B100 [18], Urban100 [8], and Manga109 [19].
退化模型

训练的输入图片(LR)使用DIV2K的高清图片通过下面3种退化模型得到:

  1. BI模型:Bicubic插值方式对高清图片进行下采样, 缩小比例为x2,x3,x4
  2. BD模型:先对高清图片做(7*7卷积,1.6方差)高斯滤波,再对滤波后图片做下采样, 缩小比例为x3。
  3. DN模型:①Bicubic插值方式对高清图片进行下采样, 缩小比例为x3,②再加30%的高斯噪声。
训练设置
  1. 在每个训练batch中,随机取出16张RGB的LR patches(shape = 32 * 32)作为输入
  2. 随机地对patches做数据增强——上下翻转,垂直翻转90°等
  3. 一个epoch包含1000个iteration
  4. 使用Touch7框架来写RDN,并使用Adam作为优化器
  5. 所有层的学习率初始化都是10-4,并且每200个epoch就减少至一半
  6. 训练RDN需要一天的时间,泰坦GPU,200个epoch
超参D/C/G的设置

在这里插入图片描述
从上图看出,大的D/C/G值能提升性能,原因是加深了网络深度

Ablation Investigation(消融研究)

在这里插入图片描述
可看出, CM, LRL, and GFF 缺一不可,缺一个性能就下降

实验结果(退化模型下)
  1. 在BI退化模型下:
    在这里插入图片描述在这里插入图片描述
    可看出,RDN的重建效果最佳
  2. 在BD和DN退化模型下:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    可看出,依然是RDN的重建效果最佳

实验结果(真是图片下)

在真实图片下,不再有原始的高清图片(如DIV2K),因此也当然没有退化模型,真实图片的退化模型(比如湍流大气和视宁度造成的模糊)都是未知规律的
在这里插入图片描述
从结果可以看出,分层特征对于不同或未知的退化模型执行依然有鲁棒性(强健)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/150421.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • win10安装JDK1.8及配置java环境变量详解

    win10安装JDK1.8及配置java环境变量详解首先下载一个jdk,可以通过这个链接下载:https://pan.baidu.com/s/1aP6SdL8UQK_C2GvALLb6Wg接下来就是安装,非常的简单,如下图所示:双击下载的文件,出现该界面,点击下一步。安装路径我们选择默认的,当然,我们也可也修改安装路径,但一定要记得安装路径,这里我们选择默认的。点击下一步。这里我们还是默认的安装路径。点击下一步。到此,安装就完成了…

  • [CV] Structure from motion(SFM)- 附我的实现结果

    [CV] Structure from motion(SFM)- 附我的实现结果【更新】我的新博客:www.ryuzhihao.cc,当然这个csdn博客也会更新本文在新博客中的链接:点击打开链接完成时间:2017年2月27日博客时间:2017年4月26日去年,我有幸了解到image-basedmodeling的相关知识。作为一个大三本科生,虽说自己此前也做过一些相关工作,但是要自己实现Structuref…

  • 十大Intellij IDEA快捷键

    十大Intellij IDEA快捷键IntellijIDEA中有很多快捷键让人爱不释手,stackoverflow上也有一些有趣的讨论。每个人都有自己的最爱,想排出个理想的榜单还真是困难。以前也整理过Intellij的快捷键,这次就按照我日常开发时的使用频率,简单分类列一下我最喜欢的十大快捷-神-键吧。1智能提示Intellij最强大的功能当然就是Intelligence智能!基本的代码提示用Ctrl+Space,还有…

  • 采用CreateThread()创建多线程程序[通俗易懂]

    采用CreateThread()创建多线程程序[通俗易懂]采用CreateThread()创建多线程程序在window环境下,Win32提供了一系列的API函数来完成线程的创建、挂起、恢复、终结以及通信等工作:1、主要的函数列表:序号函数名功能1CreateThread()创建一个新线程2ExitThread()正

  • 公网ip远程访问nas_无公网ip访问家庭nas

    公网ip远程访问nas_无公网ip访问家庭nas2018-12-0113:45:00770点赞5996收藏566评论上次的那篇NAS的文章有着很不错的热度,首先是感谢观众老爷们的大力支持啦,那么这篇文章主要是回答一些评论中的问题,而且也为那些第一次接触NAS的小伙伴提供一个简单的参考,如果对这方面想有所了解的,请耐心阅读下面的内容,个人记忆力有限,有些东西记不起来了,如有遗漏或者错误,请斧正。废话不多说,我们开始。如何申请公网IP这个是大家问的最多的,而且许多问题的根本原因都是公网IP造成的,那么,首先我们要知道一点基础的…

  • (转载)iphone 用法总结:NSNumber、NSString、NSDate、NSCalendarDate、NSData

    (转载)iphone 用法总结:NSNumber、NSString、NSDate、NSCalendarDate、NSData

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号