1. 摘要
在图像超分辨领域,卷积神经网络的深度非常重要,但过深的网络却难以训练。低分辨率的输入以及特征包含丰富的低频信息,但却在通道间被平等对待,因此阻碍了网络的表示能力。
为了解决上述问题,作者提出了一个深度残差通道注意力网络(RCAN)。特别地,作者设计了一个残差中的残差(RIR)结构来构造深层网络,每个 RIR 结构由数个残差组(RG)以及长跳跃连接(LSC)组成,每个 RG 则包含一些残差块和短跳跃连接(SSC)。
RIR 结构允许丰富的低频信息通过多个跳跃连接直接进行传播,使主网络专注于学习高频信息。此外,我们还提出了一种通道注意力机制(CA),通过考虑通道之间的相互依赖性来自适应地重新调整特征。
2. 介绍
网络的深度在许多视觉识别任务中展示了非常重要的作用,特别是在 ResNet 引入残差块之后,最近许多图像超分辨效果的重大提升都是基于网络表示的深度来改进的。
但是,另一方面,现在的大多数 CNN 都平等对待特征的每一个通道,这无疑缺少处理不同类型信息的灵活度。图像超分辨是为了尽可能多地恢复高频信息,而低分辨率的图片却包含着许多可以直接被传播到输出的低频信息,因此,特征的所有通道如果被平等对待则会使网络缺乏辨别学习能力。
基于上面的分析,作者提出了一个 RIR(Residual In Residual)架构,其中 RG(Residual Group)作为基本模块,LSC(Long Skip Connection)则用来进行粗略的残差学习,在每个 RG 内部则叠加数个简单的残差块和 SSC(Short Skip Connection)。LSC、SSC 和残差块内部的短连接可以允许丰富的低频信息直接通过恒等映射向后传播,这可以保证信息的流动,加速网络的训练。
进一步,作者提出了通道注意力(Channel Attention)机制,通过对特征通道之间的相互依赖性建模来自适应地重新缩放每个通道的特征。实验证明,这种机制允许网络专注于更有用的信道并增强辨别学习能力。
3. 网络结构
3.1. CA
如上图所示,输入是一个 H×W×C 的特征,我们先进行一个空间的全局平均池化得到一个 1×1×C 的通道描述。接着,再经过一个下采样层和一个上采样层得到每一个通道的权重系数,将权重系数和原来的特征相乘即可得到缩放后的新特征,整个过程实际上就是对不同通道的特征重新进行了加权分配。
其中,下采样和上采样层都利用 1×1 的卷积来实现,下采样层的通道数减少 r 倍,激活函数为 Relu,上采样层的激活函数为 Sigmoid。在论文中,作者采用的通道数 C=64,r = 16。
3.2. RCAB
RCAB 就是将 CA 和残差思想融合在一起。
输入一个特征 input,我们首先进行一个卷积-Relu-卷积操作得到 f,然后 f 再经过一个 CA 模块进行重新缩放得到 x,最后将 x 和 input 相加得到输出特征。其中,卷积操作都采用 3×3 的卷积核。
RCAB 的一个 TensorFlow 实现如下所示:
def RCAB(input, reduction):
"""
@Image super-resolution using very deep residual channel attention networks
Residual Channel Attention Block
"""
batch, height, width, channel = input.get_shape() # (B, W, H, C)
f = tf.layers.conv2d(input, channel, 3, padding='same', activation=tf.nn.relu) # (B, W, H, C)
f = tf.layers.conv2d(f, channel, 3, padding='same') # (B, W, H, C)
x = tf.reduce_mean(f, axis=(1, 2), keepdims=True) # (B, 1, 1, C)
x = tf.layers.conv2d(x, channel // reduction, 1, activation=tf.nn.relu) # (B, 1, 1, C // r)
x = tf.layers.conv2d(x, channel, 1, activation=tf.nn.sigmoid) # (B, 1, 1, C)
x = tf.multiply(f, x) # (B, W, H, C)
x = tf.add(input, x)
return x
3.3. RG
一个 RG 则由 B 个 RCAB、一个卷积层和一个 SSC 组成,在本文中,B 取 20。
3.4. RCAN
输入一个低分辨率图片,先经过一个 3×3 的卷积提取特征 F,然后经过一个 RIR 模块:包含 10 个 RG、一个 3×3 的卷积和一个 LSC,最后是一个上采样层和一个 3×3 的卷积层,上采样层采取 ESPCNN。网络的损失函数是 L1 损失。
4. 实验结果
可以看到,如果移除 LSC 和 SSC 的话,无论有没有引入 CA 实验结果都很差,而添加这些跳跃连接后,模型的整体性能都会有所提升,说明 LSC 和 SSC 非常有效。同时,在同样的条件下,引入 CA 后模型性能也有所提升,验证了注意力机制的有效性。
在几个数据集上的测试结果,也表明 RCAN 取得了比以往方法更好的效果。如果采用几个模型集成的话,效果还能再提升,如上面 RCAN+ 所示。
一个主观的超分辨效果如下所示,可以看到 RCAN 恢复出了更多的细节和纹理。
获取更多精彩,请关注「seniusen」!