RCAN——Image Super-Resolution Using Very Deep Residual Channel Attention Networks
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」!

RCAN——Image Super-Resolution Using Very Deep Residual Channel Attention Networks的更多相关文章
- ASRWGAN: Wasserstein Generative Adversarial Network for Audio Super Resolution
ASEGAN:WGAN音频超分辨率 这篇文章并不具有权威性,因为没有发表,说不定是外国的某个大学的毕业设计,或者课程结束后的作业.或者实验报告. CS230: Deep Learning, Sprin ...
- Speech Super Resolution Generative Adversarial Network
博客作者:凌逆战 博客地址:https://www.cnblogs.com/LXP-Never/p/10874993.html 论文作者:Sefik Emre Eskimez , Kazuhito K ...
- Deep Residual Learning for Image Recognition (ResNet)
目录 主要内容 代码 He K, Zhang X, Ren S, et al. Deep Residual Learning for Image Recognition[C]. computer vi ...
- Deep Residual Learning
最近在做一个分类的任务,输入为3通道车型图片,输出要求将这些图片对车型进行分类,最后分类类别总共是30个. 开始是试用了实验室师姐的方法采用了VGGNet的模型对车型进行分类,据之前得实验结果是训练后 ...
- Computer Vision Applied to Super Resolution
Capel, David, and Andrew Zisserman. "Computer vision applied to super resolution." Signal ...
- 深度残差网(deep residual networks)的训练过程
这里介绍一种深度残差网(deep residual networks)的训练过程: 1.通过下面的地址下载基于python的训练代码: https://github.com/dnlcrl/deep-r ...
- [论文阅读] Deep Residual Learning for Image Recognition(ResNet)
ResNet网络,本文获得2016 CVPR best paper,获得了ILSVRC2015的分类任务第一名. 本篇文章解决了深度神经网络中产生的退化问题(degradation problem). ...
- 论文笔记:Deep Residual Learning
之前提到,深度神经网络在训练中容易遇到梯度消失/爆炸的问题,这个问题产生的根源详见之前的读书笔记.在 Batch Normalization 中,我们将输入数据由激活函数的收敛区调整到梯度较大的区域, ...
- Deep Residual Learning for Image Recognition这篇文章
作者:何凯明等,来自微软亚洲研究院: 这篇文章为CVPR的最佳论文奖:(conference on computer vision and pattern recognition) 在神经网络中,常遇 ...
随机推荐
- Linux 虚拟机扩容
由于在装软件,原来的20G空间不够使用,需要扩容操作. 1.关闭虚拟机 2.点击编辑虚拟机设置 选中硬盘,添加,硬盘,推荐,确定大小,完成. 2.启动虚拟机 查看磁盘使用情况: [root@maste ...
- phpstorm 习惯设置
phpstorm 习惯设置 1. 字体:Source Code Pro 大小:14 链接: https://pan.baidu.com/s/1HLpbduBHFvbq1a10QV4uCg 提取码: y ...
- Delphi 从一个对象中继承数据和方法
- kubernetes之pod调度
调度规则 deployment全自动调度: 运行在哪个节点上完全由master的scheduler经过一系列的算法计算得出, 用户无法进行干预 nodeselector定向调度: 指定pod调度到一些 ...
- Kotlin环境搭建---Hello World
对于亲爹都已经宣布它的重要性了,那做为搞安卓的自己有理由去拒绝它么?当然目前国内真正在商业中去采用Kotlin去开发项目的应该不多,但是!这肯定会被普及的,所以为了走在时代的前言,接下来会从基础语法开 ...
- Appium Desired Capabilities-General Capabilities
Desired Capabilities are keys and values encoded in a JSON object, sent by Appium clients to the ser ...
- java与JSON
XML 格式数据极其的冗长.因为每个离散的数据片段需要大量的 XML 结构,所有有效 的数据的比例非常低.XML 语法还有轻微的模糊.还有,解析 XML 是非常占程序员的精力的.你需要提前了解详细的结 ...
- linux基础_使用指令2
1.cat指令 功能:查看文件内容,是以只读的方式打开. 语法:cat [] 要查看的文件 选项: -n:显示行号 末尾加 | more:分页 使用细节: cat只能浏览文件,而不能修改文件,为了浏览 ...
- mybatis中foreach使用方法
作者:学无先后 达者为先 作者:偶尔记一下 foreach一共有三种类型,分别为List,[](array),Map三种. 下面表格是我总结的各个属性的用途和注意点. foreach属性 属性 描述 ...
- [Svelte 3] Use an onMount lifecycle method to fetch and render data in Svelte 3
Every Svelte component has a lifecycle that starts when it is created, and ends when it is destroyed ...