RCAN论文笔记:Image Super-Resolution Using Very Deep Residual Channel Attention Networks

RCAN阅读笔记


原文:Image Super-Resolution Using Very Deep Residual Channel Attention Networks:https://arxiv.org/abs/1807.02758
补充材料:ECCV-2018-RCAN_supp:http://yulunzhang.com/papers/ECCV-2018-RCAN_supp.pdf

Pytorch原码:RCAN_pytorch:https://github.com/yulunzhang/RCAN

论文中文翻译:RCAN:Image Super-Resolution Using Very Deep Residual Channel Attention Networks 翻译




论文目的

给定一个低分辨率(LR)图像,然后重建出一个精确的高分辨率(HR)图像,即单图像超高分辨率(SR)


背景

  1. 卷积神经网络(CNN)的深度对于图像超分辨率(SR)是极其关键的因素。然而,作者观察到,更深层次的图像SR网络更难训练
  2. 低分辨率图像(LR)的输入和特征包含大量的低频信息,这些信息在通道间被平等对待,从而阻碍了CNNs的表征能力。

解决方案

  • 对于第一个更深的网络更难训练的问题,作者研究发现,通过在网络中引入残差块,这种残差块使得网络达到了1000层,但是仅仅通过叠加残差块来构建更深的网络很难获得更好的提升效果。因此,作者提出了残差嵌套(residual in residual,RIR)结构构造非常深的可训练网络,RIR中的长跳连接和短跳连接有助于绕过大量的低频信息,使主网络学习到更有效的信息。
  • 对于第二个LR输入低频和高频信息在通道被平等对待的问题,作者发现注意力可以使可用处理资源的分配偏向于输入中信息量最大的部分,因此引入通道注意(Channel Attention ,CA)机制

网络架构

如图2所示,作者提出的RCAN主要由四个部分组成:浅层特征提取、残差嵌套(RIR)深度特征提取、上采样模块和重建部分
在这里插入图片描述
整个网络RCAN组成:Conv + RIR+ 上采样模块 + Conv

  • RIR组成:G个RG(带长跳连接),如图2

  • 每个RG:B个RCAB组成(带短跳连接),如图2

  • 每个RCAB组成:Conv + ReLU + Conv + CA,如图4

  • CA组成:Global pooling + Conv + ReLU + Conv ,如图4

在这里插入图片描述

名词解释

  • Residual Channel Attention Network,RCAN:残差通道注意网络

  • residual in residua,RIR:残差嵌套

  • residual groups,RG:残差组

  • Residual Channel Attention Block,RCAB:残差通道注意块

  • Channel Attention,CA:通道注意

  • long skip connection,LSC:长跳连接

  • short skip connection,SSC:短跳连接


论文重点

Channel Attention(CA)

作者的灵感来源于文献Squeeze-and-excitation networks,(该论文对CA的机制原理讲的非常具体,建议阅读)。文献是用于分类任务,提出了新的架构单元,即“Squeeze-and-Excitation”(SE)块,这项工作拿到了ImageNet2017 image classification 的冠军,作者很好的运用到image SR任务上了。(感觉作者讲CA原理不是太细致,因此本部分将结合文献理解

作者首先考虑两个问题:第一,LR空间中信息具有大量的低频成分和有价值的高频成分。低频部分似乎比较平坦。高频成分通常是充满边缘、纹理和其他细节的区域。另一方面,Conv层的每个过滤器都有一个局部感受野。因此,卷积后的输出无法利用局部区域之外的上下文信息

以前基于CNN的SR方法对LR通道特征的处理是平等的,即之前的SR文章对待feature map中每一个通道是一样的,作者认为每一个通道的重要性不一样,有些通道重要,而有些不那么重要,所以我们要扬长避短, 增加重要通道的权重,抑制不那么重要的权重


那么,如何赋予每个通道不同的权重呢?

两个重要点:全局平均池化,sigmoid激活


看图3:

在这里插入图片描述

C C C 个大小为 H × W H\times W H×W 的特征图首先通过一个全局平均池化操作,该操作跨越空间维度 H × W H\times W H×W 聚合特征映射来产生通道描述符,即将全局空间信息压缩成一个通道描述符。这个描述符嵌入了通道特征响应的全局分布,使来自网络全局感受野的信息能够被其较低层利用。

原文代码:

## Channel Attention (CA) Layer
class CALayer(nn.Module):
    # reduction;降维比例为r=16
    def __init__(self, channel, reduction=16):
        super(CALayer, self).__init__()
        # global average pooling: feature --> point
        self.avg_pool = nn.AdaptiveAvgPool2d(1)
        # feature channel downscale a undpscale --> channel weight
        self.conv_du = nn.Sequential(
            # channel // reduction,输出降维,即论文中的1x1xC/r
            nn.Conv2d(channel, channel // reduction, 1, padding=0, bias=True),
            nn.ReLU(inplace=True),
            # channel,输出升维,即论文中的1x1xC
            nn.Conv2d(channel // reduction, channel, 1, padding=0, bias=True),
            nn.Sigmoid()
        )

    def forward(self, x):
        '''
        x就是 HxWxC 通道  y是权重
        y权重通过上面方式求出,然后 和x求乘积
        使得重要通道权重更大,不重要通道权重减小
        '''
        y = self.avg_pool(x)
        y = self.conv_du(y)
        return x * y

全局平均池化(压缩并汇聚信息):每个特征图所有的像素值加起来求平均,得到一个值(记为 y i y_i yi )就为这个特征图的全局表示,即为这个通道的描述符,如果这个特征图高频部分多,那个全局平均池化得来的 y i y_i yi 值就大,不同大小的 y i y_i yi 与 x 相乘,就赋予了x不同的权重,即实现了对C个通道不同的注意( y i y_i yi 值越大,注意力越高)。


既然实现了不同通道的不同权重的赋予,且含高频的通道赋予权重更大,不就实现了通道注意了么?并不是。

全局平均池化只是一个数学上的求和再平均,我们发现这里也并没有“学习”,每个求出的 y i y_i yi 都是不变的且独立的网络并不灵活;而且这里我们也没有获得通道与通道之间的相关性。我们需要一个机制,利用这些 y i y_i yi 信息(全局平均池化操作中汇聚的信息),来全面捕获通道依赖性

而这个机制必须符合两个标准:第一,它必须是灵活的(特别是它必须能够学习通道之间的非线性交互);第二,它必须学习一个非互斥的关系,与onte-hot激活相反,这里允许强调多个通道

为了满足这些标准,作者选择采用一个简单的门机制(即代码中conv_du部分),并使用sigmoid激活。
s = f ( W U δ ( W D z ) ) {\large s} =f(W_U\delta(W_Dz)) s=f(WUδ(WDz))
结合代码:

nn.Conv2d(channel, channel // reduction, 1, padding=0, bias=True) 降维层,其参数(权重)为 W D W_D WD

nn.Conv2d(channel // reduction, channel, 1, padding=0, bias=True) 升维层,其参数(权重)为 W U W_U WU

这两个层是为了限制模型复杂度和辅助泛化,通过在非线性周围形成两个卷积层的瓶颈来参数化门机制。

然后经过sigmoid为每个通道学习特定采样的激活,控制每个通道的激励


可参考《Squeeze-and-excitation networks》论文中类似模块SE-ResNet Module:

在这里插入图片描述

FC为全连接层,本文作者把它改为卷积层,并且最后的“Scale”操作与“ ⨁ \bigoplus ”操作合并为一个“ ⨂ \bigotimes ”操作,即x*y


补充(长跳连接LSC)
在这里插入图片描述

如图,假设网络输入为x,输出为F(x),卷积网络输出为f(x),无残差连接时,网络输出F(x)=f(x);有残差连接时,网络输出F(x)=x+f(x)。

显然,想要相同的输出,无残差连接时,卷积网络需要学习的就为f(x)=F(x);有残差连接时,卷积网络需要学习的就为f(x)=F(x)-x。

这样,长跳连接就不需要学习x,即网络绕过了低频信息。

  • 27
    点赞
  • 102
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值