超分之RDN

超分之RDN这篇文章提出了一种结合ResNet结构和DenseNet结构的深度超分网络——ResidualDenseNetwork(后文简称RDN)。RDN基于ResidualDenseBlock(后文简称RDB)块以及全局残差连接来提取全局特征,而RDB块基于Dense结构和局部残差连接进一步提取局部特征。通过这种结构,作者最大化利用了LRLRLR不同层级的特征,在当时取得了SOTA的表现力。Note:这篇文章和RCAN是同一批作者。参考文档:转载于博主暖风博文:超分算法RDNResNet.

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

在这里插入图片描述

这篇文章提出了一种结合ResNet结构和DenseNet结构的深度超分网络——Residual Dense Network(后文简称RDN)。RDN基于Residual Dense Block(后文简称RDB)块以及全局残差连接来提取全局特征,而RDB块基于Dense结构和局部残差连接进一步提取局部特征。通过这种结构,作者最大化利用了 L R LR LR不同层级的特征,在当时取得了SOTA的表现力。

Note:

  1. 这篇文章和RCAN是同一批作者。

参考文档:

  1. 转载于博主暖风博文:超分算法RDN
  2. ResNet
  3. DenseNet

Abstract

在这里插入图片描述

这篇文章提出的原因在于之前的SISR算法都没有很全面地利用 L R LR LR层级中所有的特征信息,如SRDenseNet宽度网络EDSRSRGAN(内置SRResNet)等这些虽然利用了不同层级的特征信息,但是还不够,还有更多的信息没有提取;再比如SRCNNFSRCNNDCSCNESPCN等这种就很少利用不同层级的特征信息。故为了解决这个问题,作者提出了最大化提取利用 L R LR LR层级所有的特征信息的SR算法——RDN。

RDN具有如下特点:

  1. RDN基于RDB模块和全局残差连接,其中RDB模块内部有 C C C个层,它们组成Dense结构和局部残差连接可以充分提取局部特征
  2. RDB模块会接受上一个RDB模块的特征信息,该特征信息会分别传到RDB中稠密结构的每一级,从而构成相邻存储机制(contiguous memory)。
  3. 为了缓解RDB中Dense结构带来网络过宽而不稳定的现象,作者在RDB的末端加入了 1 × 1 1\times 1 1×1瓶颈层来缩小输出通道。
  4. RDN将 D D D个RDB块通过concat融合起来并使用全局残差连接来提取全局特征信息
  5. RDN经实验证明确实充分提取了特征信息,当时取得了SOTA的表现力!
  6. 整个RDN网络包括低层特征提取、高层(深层)特征提取(局部特征提取+全局特征提取)、上采样层、重建层。

1 Introduction

这篇论文的贡献如下:

  1. 提出了一个可充分提取图像 L R LR LR层级所有特征信息的超分网络RDN,其网络结构如下:在这里插入图片描述整个RDN主要基于 D D D个RDB模块进行全局特征融合(GFF)和全局残差学习(GRL其实就是Long skip connection),将每个RDB提取的局部特征进行concat融合之后和来自低层特征信息进行残差连接,从而使得低层特征和高层特征相结合并迫使网络去学习更多的残差信息。我们通过GFF和GRL组成的Dense Feature Fusion(DFF)来提取全局特征。
  2. RDB模块用于充分提取 L R LR LR层级的局部特征,其网络结构如下:在这里插入图片描述
    整个RDB模块由 C C C个卷积层(包括ReLU)通过Dense结构相连(LFF),并使用局部残差学习LRL(其实就是short skip connection)将上一个RDB输出的特征信息和当前RDB输出的特征信息进行结构。此外上一个RDB的输出特征还会依次加入到Dense结构的每一个层中,形成相邻存储(CM) 。此外,由于每个RDB中设置了 1 × 1 1\times 1 1×1的瓶颈层来缩小输出通道,从而整个RDB块就允许设置较大的Dense growth rate。

2 Related Work

3 Residual Dense Network for Image SR

接下来我们具体分析下RDN的网络结构。

3.1 Network Structure

在这里插入图片描述

如上图所示就是整个RDN的网络结构:它包括浅层特征提取、RDBs、dense特征融合(DFF)、上采样层组成;不过我更喜欢用浅层特征提取、深层特征提取、上采样层、重建层来表示。


①浅层特征提取
和很多SR算法一样,浅层特征的提取往往只用 1 − 2 1-2 12 3 × 3 3\times 3 3×3卷积层实现,具体表达式为:
F − 1 = H S F E 1 ( I L R ) . (1) F_{-1} = H_{SFE1}(I_{LR}).\tag{1} F1=HSFE1(ILR).(1)其中 H S F E 1 ( ⋅ ) H_{SFE1}(\cdot) HSFE1()表示浅层特征第一层卷积层,它通过GRL和深层特征进行残差相连。
浅层特征提取的第二层用数学表达式为:
F 0 = H S F E 2 ( F − 1 ) . (2) F_0 = H_{SFE2}(F_{-1}).\tag{2} F0=HSFE2(F1).(2)其中 H S F E 2 ( ⋅ ) H_{SFE2}(\cdot) HSFE2()表示浅层特征提取的第二层卷积层,它用来作为第一个RDB块的输入。

②深层特征提取
假设深层特征提取一共有 D D D个RDB块,那么对于 d ∈ { 1 , ⋯   , D } d\in \{1,\cdots,D\} d{
1,,D}
,第 d d d个RDB块的输入输出可表示为:
F d = H R D B , d ( F d − 1 ) = H R D B , d ( H R D B , d − 1 ( ⋯ ( H R D B , 1 ( F 0 ) ) ⋯   ) ) . (3) F_d = H_{RDB,d}(F_{d-1})=H_{RDB,d}({\color{lightseagreen}H_{RDB,d-1}(\cdots({\color{mediumorchid}H_{RDB,1}(F_0)})\cdots)}).\tag{3} Fd=HRDB,d(Fd1)=HRDB,d(HRDB,d1((HRDB,1(F0)))).(3)其中 F d F_d Fd表示第 d d d个RDB块输出的局部特征, H R D B , d ( ⋅ ) H_{RDB,d}(\cdot) HRDB,d()是第 d d d个RDB块算子,表示深层特征提取。

Dense Feature Fusion(DFF):最后将 D D D个RDBs的所有局部特征进行concat之后,用 1 × 1 1\times 1 1×1瓶颈层进行降维并使用一个 3 × 3 3\times 3 3×3卷积层进一步提取深层特征,最后输出的就是全局特征 F G F F_{GF} FGF。全局特征和来自浅层特征 F − 1 F_{-1} F1通过GRL进行残差相连输出最终的Dense Feature—— F D F F_{DF} FDF,表达式为:
F D F = H D F F ( F − 1 , F 0 , F 1 , ⋯   , F D ) . (4) F_{DF} = H_{DFF}(F_{-1},F_0, F_1,\cdots,F_D).\tag{4} FDF=HDFF(F1,F0,F1,,FD).(4)其中 H D F F ( ⋅ ) H_{DFF}(\cdot) HDFF()表示整个DFF过程,它是GFF和GRL的结合。

③上采样层
上采样层采用ESPCN提出的亚像素卷积层,这种方式既节约存储资源又有较高效的执行效率,使用PyTorch可以直接调用torch.nn.PixelShuffle(r),具体可见我的另一篇PyTorch之PixelShuffle

④重建层
和其他SR结构一样,重建层可以重用一层 3 × 3 3\times 3 3×3卷积层代替,来进一步调整校正上采样的结构。


整个RDN网络的前向过程可表示为:
I S R = H R D N ( I L R ) . (5) I_{SR} = H_{RDN}(I_{LR}).\tag{5} ISR=HRDN(ILR).(5)其中 H R D N ( ⋅ ) H_{RDN}(\cdot) HRDN()是RDN网络算子,表示上述4个过程的串接总和。

3.2 Residual Dense Block

接下来我们从上往下分析RDB的结构,如下图所示:
在这里插入图片描述
整个RDB块由CM机制、Dense结构、局部特征融合LFF以及局部残差学习LRL组成,接下来我们分别介绍这4个部分。

①CM机制
CM,相邻存储机制,指的是对于每个RDB块中每个Dense块的每一层 c ∈ { 1 , ⋯   , C } c\in \{1, \cdots, C\} c{
1,,C}
都会接受来自于上一个RDB块输出的局部特征。

②Dense结构
和SRDenseNet结构类似,我们在RDB中使用Dense结构:在这里插入图片描述
我们直接用表达式为(不了解Dense块的前向过程可阅读DenseNet的论文):
F d , c = σ ( W d , c [ F d − 1 , F d , 1 , ⋯   , F d , c − 1 ] ) . (6) F_{d,c} = \sigma(W_{d,c}[F_{d-1},F_{d,1},\cdots, F_{d,c-1}]).\tag{6} Fd,c=σ(Wd,c[Fd1,Fd,1,,Fd,c1]).(6)其中 F d , c F_{d,c} Fd,c表示为第 c c c层输出的局部特征,其深度为 G G G,表示DenseNet中的Growth rate; W d , c W_{d,c} Wd,c表示第 d d d个RDB中第 c c c层的卷积层参数,这里省略bias; σ ( ⋅ ) \sigma(\cdot) σ()表示ReLU; [ F d − 1 , F d , 1 , ⋯   , F d , c − 1 ] [F_{d-1},F_{d,1},\cdots, F_{d,c-1}] [Fd1,Fd,1,,Fd,c1]表示上一个RDB的输出 F d − 1 F_{d-1} Fd1、前 c − 1 c-1 c1层输出的局部特征通过concat堆叠而成,其深度为 G 0 + ( c − 1 ) G G_0+(c-1)G G0+(c1)G

Note:

  1. 经典DenseNet块相比,在本文的Dense结构中去掉了BN层。一来是BN层的存储消耗和一层卷积层类似,我们大可以节省下这部分资源而用卷积层代替进一步提升模型复杂度;二来是在EDSR中文中提出了不同于识别等高级计算机任务,BN并不适用于超分任务。
  2. 每个RDB块的输出和输出feature map( F d F_d Fd)的深度都是 G 0 G_0 G0

③局部特征融合
我们将上一个RDB的输出 F d − 1 F_{d-1} Fd1、当前RDB中 C C C个层输出的所有局部特征进行concat融合,表达式为:
F d , L F = H L F F d ( [ F d − 1 , F d , 1 , ⋯   , F d , c , ⋯   , F d , C ] ) . (7) F_{d,LF} = H^d_{LFF}([F_{d-1}, F_{d,1}, \cdots, F_{d,c}, \cdots, F_{d,C}]).\tag{7} Fd,LF=HLFFd([Fd1,Fd,1,,Fd,c,,Fd,C]).(7)其中算子 H L F F d ( ⋅ ) H^d_{LFF}(\cdot) HLFFd()表示在第 d d d个RDB中将所有层特征信息进行融合,并使用 1 × 1 1\times 1 1×1进行缩减输出feature map的通道,从而避免Dense结构导致网络过宽而让训练不稳定的问题,缩减后的输出 F d , L F F_{d,LF} Fd,LF的通道数为 G 0 + C ∗ G → G 0 G_0+C*G\to G_0 G0+CGG0
Note:

  1. LFF的存在允许让Dense结构的RDB拥有更大的增长率Growth rate!

④局部残差学习
作者指出在上述结构基础上再添加LRL结构可以进一步提升整体的表现力,因此LRL的引入也是有必要的,其数学表达式为:
F d = F d − 1 + F d , L F . (8) F_d = F_{d-1} + F_{d,LF}.\tag{8} Fd=Fd1+Fd,LF.(8)

3.3 Dense Feature Fusion

当对所有RDBs输出的局部特征进行concat融合之后并使用全局残差学习GRL进一步将不同层级特征进行融合之后,就可以将输出的feature map进行上采样了。而上述这个过程就是Dense Feature Fusion(DFF)做的事情,它包括全局特征融合GFF和全局残差学习GRL两个部分。

①全局特征融合GFF
通过GFF将各个RDBs输出的局部特征信息进行concat融合,并使用 1 × 1 1\times 1 1×1卷积层进行通道缩减以及 3 × 3 3\times 3 3×3卷积层进一步提取高层特征信息,这一层也很重要,它提取之后的特征和来自低层的信息 F − 1 F_{-1} F1进行残差融合会产生不错的性能提升,这在SRGAN结构中也得到了体现:在这里插入图片描述
用数学表达式为:
F G F = H G F F ( [ F 1 , ⋯   , F D ] ) . (9) F_{GF} = H_{GFF}([F_1, \cdots, F_D]).\tag{9} FGF=HGFF([F1,,FD]).(9)其中算子 H G F F ( ⋅ ) H_{GFF}(\cdot) HGFF()表示的就是上述过程。

②全局残差学习GRL
类似于RDBs中的LRL,GRL也是将低层特征信息和高层特征信息进行残差连接,具体表达式为:
F D F = F − 1 + F G F . (10) F_{DF} = F_{-1} + F_{GF}.\tag{10} FDF=F1+FGF.(10)
最后的输出 F D F F_{DF} FDF就是我们下一个环节上采样的输入。

3.4 Implementation Details

  1. 除了 1 × 1 1\times 1 1×1的卷积层之外,其余所有卷积层都是用 3 × 3 3\times 3 3×3卷积核大小的滤波器。
  2. G 0 = 64 G_0=64 G0=64
  3. 最后重建层输出通道数为3,当然也可是处理灰度图,即通道数为1。

4 Discussions

①Difference to DenseNet

  1. 一般来说,DenseNet广泛用于高级计算机视觉任务(如目标识别),而RDN是为图像SR这种简单任务设计的。因此去掉了批处理规范化(BN)层,减轻了GPU内存消耗,减小了计算复杂度,并提升了网络性能。
  2. 在DenseNe中,两个相邻Dense块之间使用过渡层。而在RDN中,密集连接层输出与局部特征融合输出(LFF)的结合方式是使用局部残差学习(LRL),这在实验中证明是非常有效的。
  3. 采用全局特征融合来充分利用DenseNet中忽略的层次特征。

②Difference to SRDenseNet

  1. 第一个是基本架构块的设计不同。本文的残差密集块(RDB)从三个方面做了改进:一、引入了相邻存储(CM)机制,它允许前面RDB的状态直接访问当前RDB的每一层。二、通过使用局部特征融合(LFF),RDB允许更大的增长率,从而能够更稳定地训练深度网络。三、局部残差学习(LRL)被用于RDB,以进一步优化信息流和梯度。
  2. 第二个不同是RDB之间没有紧密的连接。相反,RDB使用全局特征融合(GFF)和全局残差学习来提取全局特征,因为具有相邻内存的RDB已经完整的提取了局部特征。
  3. SRDenseNet使用L2损失函数。而RDN使用了L1损失函数,L1损失函数已被证实了对性能具有更强大的收敛性。

5 Experiments

实验部分可参考:超分算法RDN:Residual Dense Network for Image Super-Resolution 超分辨率图像重建

6 Conclusion

  1. 文章提出了一种具有非常深的SISR结构——RDN。RDN通过结合ResNet和DenseNet的优势在 L R LR LR层级上最大化提取所有的特征信息。
  2. RDN基于RDB以及全局残差学习(GRL),每个RDB块中包含了Dense结构,通过LFF来提取融合每一层局部信息之后的特征信息,并于LRL的另一端,即来自上个RDB块的局部特征信息进行残差结合输出当前RDB块最终的局部特征信息。GFF将所有来自RDBs的局部信息进行融合产生全局信息 F G F F_{GF} FGF,并于GRL另一端,即低层特征信息 F − 1 F_{-1} F1进行残差结合输出最终的特征信息。
  3. RDN属于SISR方法,其结构主要包括低层特征提取深层特征提取上采样层、重建层。本文中上采样层采用亚像素卷积层,而深层特征提取GFF是RDN的重点。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

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

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

(0)


相关推荐

  • GBDT算法详解_gbdt算法

    GBDT算法详解_gbdt算法基本思想GBDT的基本结构是决策树组成的森林,学习方式是梯度提升。具体的讲,GBDT作为集成模型,预测的方式是把所有子树的结果加起来。GBDT通过逐一生成决策子树的方式生成整个森林,生成新子树的过程是利用样本标签值与当前树林预测值之间的残差,构建新的子树。例如,当前已经生成了3课子树了,则当前的预测值为D(x)=d1(x)+d2()x+d3(x),此时我们得到的当前的预测值为D(x)效果并不好,与真正的拟合函数f(x)还有一定的差距。GBDT希望的是构建第四棵子树,使当前树林的预测结果D(x)与第四棵

    2022年10月12日
  • 口罩、安全帽识别比赛踩坑记(一) 经验漫谈及随想

    口罩、安全帽识别比赛踩坑记(一) 经验漫谈及随想前言       因为疫情迎来的史无前例大假期,从开始理直气壮的天天划手机,到中间百无聊赖的躺尸,再到之后实在憋得慌,就想找点什么事搞一搞。恰好这时,一直关注的极视角联合Intel公司举办了一个对口罩和安全帽进行识别的比赛,能免费用一个月的云服务器对于我这还在用跑个Demo都能卡死的老爷机来说还是相当具有吸引力的。于是…

  • 拓端tecdat|基于R语言实现LASSO回归分析「建议收藏」

    拓端tecdat|基于R语言实现LASSO回归分析「建议收藏」模拟假数据集set.seed(0820)n<-50p<-25beta<-rep(0,p)beta[1:5]<-1:5/5X<-matrix(rnorm(n*p),n,p)X<-scale(X)Xb<-X%*%betaY<-X%*%b…

  • MyBatis Log Plugin激活码买(注册激活)2022.02.23

    (MyBatis Log Plugin激活码买)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

  • Jps命令—使用详解[通俗易懂]

    Jps命令—使用详解[通俗易懂]原文:https://blog.csdn.net/wisgood/article/details/38942449 jps是jdk提供的一个查看当前java进程的小工具,可以看做是JavaVirtualMachineProcessStatusTool的缩写。非常简单实用。    命令格式:jps[options][hostid]     [options…

  • 交叉线与直通线的区别

    交叉线与直通线的区别网线分为两种:直通线和交叉线。1>直通线:标准线,两端都采用568B做线标准。两端的线序对是:1、白橙、2、橙、3、白绿、4、蓝、5、白蓝、6、绿、7、白棕、8、棕。注意两端都是同样的线序且一一对应,这种线就是我们平时最常用的网线。直通线一般连接不同的设备,比如电脑和路由器。2>交叉线:反线,一端采用568B做线标准,一端采用568A的标准。一端的线序对是:1、白橙、2、橙

发表回复

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

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