超分辨率-RDN

article/2025/11/10 16:50:10

一、简介

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 = 1x1 外,其他的CONV层都是 3x3的
  2. kernel size = 3x3的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),因此也当然没有退化模型,真实图片的退化模型(比如湍流大气和视宁度造成的模糊)都是未知规律的
在这里插入图片描述
从结果可以看出,分层特征对于不同或未知的退化模型执行依然有鲁棒性(强健)


http://chatgpt.dhexx.cn/article/QyFdxRHR.shtml

相关文章

【图像超分辨】RDN

RDN 网络结构实现细节讨论(与其他网络的区别)实验设置实验结果参考博客 RDN——Residual Dense Network—— 残差深度网络。RDN是基于深度学习的超分方法之一,发表于CVPR 2018。 网络结构 RDN网络结构分为4个部分: SFENet(Shall…

【图像复原】RDN论文详解(Residual Dense Network for Image Restoration)

这是CVPR2018的一篇文章,提出了针对图像复原任务的CNN模型RDN(residual dense network)。 RDN主要是提出了网络结构RDB(residual dense blocks),它本质上就是残差网络结构与密集网络结构的结合。 1.残差网络(resnet)与密集网络&am…

超分之RDN

这篇文章提出了一种结合ResNet结构和DenseNet结构的深度超分网络——Residual Dense Network(后文简称RDN)。RDN基于Residual Dense Block(后文简称RDB)块以及全局残差连接来提取全局特征,而RDB块基于Dense结构和局部残差连接进一步提取局部特征。通过这种结构&…

Java线程中的用户态和内核态

内核态用户态是什么? 操作系统对程序的执行权限进行分级,分别为用户态和内核态。用户态相比内核态有较低的执行权限,很多操作是不被操作系统允许的,简单来说就是用户态只能访问内存,防止程序错误影响到其他程序,而内核态则是可以操作系统的…

「操作系统」什么是用户态和内核态?为什么要区分

「操作系统」什么是用户态和内核态?为什么要区分 参考&鸣谢 从根上理解用户态与内核态 程序员阿星 并发编程(二十六)内核态和用户态 Lovely小猫 操作系统之内核态与用户态 fimm 文章目录 「操作系统」什么是用户态和内核态?为…

用户态与内核态之间切换详解

用户空间和内核空间 用户程序有用户态和内核态两种状态。用户态就是执行在用户空间中,不能直接执行系统调用。必须先切换到内核态,也就是系统调用的相关数据信息必须存储在内核空间中,然后执行系统调用。 操作硬盘等资源属于敏感操作&#…

用户态和内核态 中断处理机制

操作系统 一、操作系统基础知识 1.1 用户态和内核态 1.1.1 定义:什么是用户态和内核态? Kernel 运行在超级权限模式(Supervisor Mode)下,所以拥有很高的权限。按照权限管理的原则,多数应用程序应该运行…

用户态和内核态:用户态线程和内核态线程有什么区别?

转载 文章来源于 拉钩教育 重学操作系统 林䭽 用户态和内核态:用户态线程和内核态线程有什么区别? 什么是用户态和内核态 Kernel 运行在超级权限模式(Supervisor Mode)下,所以拥有很高的权限。按照权限管理的原则&a…

什么是用户态和内核态

什么是用户态和内核态 从图上我们可以看出来通过系统调用将Linux整个体系分为用户态和内核态(或者说内核空间和用户空间)。 那内核态到底是什么呢?其实从本质上说就是我们所说的内核,它是一种特殊的软件程序,特殊在哪儿…

用户态和内核态之间的切换

用户态和内核态之间的切换 切换方式 从用户态到内核态切换可以通过三种方式,或者说会导致从用户态切换到内核态的操作: 系统调用,这个上面已经讲解过了,在我公众号之前的文章也有讲解过。其实系统调用本身就是中断,…

OS用户态和内核态

1、linux进程有4GB地址空间,如图所示: 3G-4G大部分是共享的,是内核态的地址空间。这里存放整个内核的代码和所有的内核模块以及内核所维护的数据。 2、特权级的概念: 对于任何操作系统来说,创建一个进程是核心功能。…

用户态和内核态区别

操作系统用户态和内核态之间的切换过程 1. 用户态和内核态的概念区别 究竟什么是用户态,什么是内核态,这两个基本概念以前一直理解得不是很清楚,根本原因个人觉得是在于因为大部分时候我们在写程序时关注的重点和着眼的角度放在了实现的功能…

操作系统用户态和内核态之间的切换过程

操作系统用户态和内核态之间的切换过程 1. 用户态和内核态的概念区别 究竟什么是用户态,什么是内核态,这两个基本概念以前一直理解得不是很清楚,根本原因个人觉得是在于因为大部分时候我们在写程序时关注的重点和着眼的角度放在了实现的功能和…

用户态和内核态的内存管理

内核态:cpu可以访问内存的所有数据,包括外围设备,例如硬盘,网卡,cpu也可以将自己从一个程序切换到另一个程序。 用户态:只能受限的访问内存,且不允许访问外围设备,占用cpu的能力被剥…

CPU的用户态和内核态

内核从本质上看是一种软件——控制计算机的硬件资源 用户态和内核态也可以说是对应系统执行权限的一个分级 个人理解慎浅,多是参考别人的文章,日后工作之于在研究 文章目录 指令集一、用户态二、内核态三、用户态和内核态切换状态四、态切换的消耗4.1、上…

用户态和内核态切换

1. 切换方式 从用户态到内核态切换可以通过三种方式,或者说会导致从用户态切换到内核态的操作: 系统调用,这个上面已经讲解过了,在我公众号之前的文章也有讲解过。其实系统调用本身就是中断,但是软件中断&#xff0c…

计算机内核态和用户态,用户态和内核态的区别是什么

用户态和内核态的区别是,内核态运行操作系统程序,操作硬件,用户态运行用户程序;当程序运行在3级特权级上时,可以称之为运行在用户态,当程序运行在0级特权级上时,称之为运行在内核态。 本文操作环…

从根上理解用户态与内核态

欢迎来到操作系统系列,采用图解 大白话的形式来讲解,让小白也能看懂,帮助大家快速科普入门。 本篇文章开始探秘用户态与内核态,虽然一般面试不会问这个,但搞清楚这块,对我们理解整个计算机系统是及其有意…

详解内核态与用户态

介绍下内核态与用户态 内核态和用户态是操作系统中的两种不同的运行状态,它们的区别如下: 权限不同:内核态是操作系统拥有最高权限的运行状态,可以访问系统的所有资源,而用户态只能访问受限的资源。 系统调用&#x…

用户态和内核态的简单理解

文章目录 linux基础系统调用和库函数的区别为什么要区分用户态和内核态?用户态和内核态的切换耗费时间的原因哪些情况会出出现用户态和内核态的切换用户态切换到内核态的三种方式 linux基础 linux的kernel内核外是系统调用,系统调用外是shell、库函数&a…