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的更多相关文章

  1. ASRWGAN: Wasserstein Generative Adversarial Network for Audio Super Resolution

    ASEGAN:WGAN音频超分辨率 这篇文章并不具有权威性,因为没有发表,说不定是外国的某个大学的毕业设计,或者课程结束后的作业.或者实验报告. CS230: Deep Learning, Sprin ...

  2. Speech Super Resolution Generative Adversarial Network

    博客作者:凌逆战 博客地址:https://www.cnblogs.com/LXP-Never/p/10874993.html 论文作者:Sefik Emre Eskimez , Kazuhito K ...

  3. Deep Residual Learning for Image Recognition (ResNet)

    目录 主要内容 代码 He K, Zhang X, Ren S, et al. Deep Residual Learning for Image Recognition[C]. computer vi ...

  4. Deep Residual Learning

    最近在做一个分类的任务,输入为3通道车型图片,输出要求将这些图片对车型进行分类,最后分类类别总共是30个. 开始是试用了实验室师姐的方法采用了VGGNet的模型对车型进行分类,据之前得实验结果是训练后 ...

  5. Computer Vision Applied to Super Resolution

    Capel, David, and Andrew Zisserman. "Computer vision applied to super resolution." Signal ...

  6. 深度残差网(deep residual networks)的训练过程

    这里介绍一种深度残差网(deep residual networks)的训练过程: 1.通过下面的地址下载基于python的训练代码: https://github.com/dnlcrl/deep-r ...

  7. [论文阅读] Deep Residual Learning for Image Recognition(ResNet)

    ResNet网络,本文获得2016 CVPR best paper,获得了ILSVRC2015的分类任务第一名. 本篇文章解决了深度神经网络中产生的退化问题(degradation problem). ...

  8. 论文笔记:Deep Residual Learning

    之前提到,深度神经网络在训练中容易遇到梯度消失/爆炸的问题,这个问题产生的根源详见之前的读书笔记.在 Batch Normalization 中,我们将输入数据由激活函数的收敛区调整到梯度较大的区域, ...

  9. Deep Residual Learning for Image Recognition这篇文章

    作者:何凯明等,来自微软亚洲研究院: 这篇文章为CVPR的最佳论文奖:(conference on computer vision and pattern recognition) 在神经网络中,常遇 ...

随机推荐

  1. ESP8266 UDP通信

    #include "driver/uart.h" #include "espconn.h" void ICACHE_FLASH_ATTR user_rf_pre ...

  2. 这段时间大量网站被k的原因分析

    百度这次更新的K站幅度比较大,通过对被k网站的分析,没有发现文章类型网站有降权现象,主要集中在企业网站上.分析大约30发个网站发现共同明显的特征就是这样的网站有大量的页面只有一张或者两张图片,而这些网 ...

  3. IDEA乱码总结和处理

    工程乱码 打开File-Setting, 找到File Encodings这个选项,把encoding设置成你工程的编码即可,一般是UTF-8,如下图(红框的地方),然后重新rebuild一下,基本就 ...

  4. 【Struts2】 国际化

    一.概述 二.Struts2中国际化: 2.1 问题1 全局 局部 2.2 问题2 2.3 问题3 2.4 问题4 在Action中怎样使用 在JSP页面上怎样使用 一.概述 同一款软件 可以为不同用 ...

  5. springboot Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

    报错如下: 在请求目标中发现无效字符.有效字符在RFC 7230和RFC 3986中定义. 原因是Tomcat在 7.0.73, 8.0.39, 8.5.7 版本后,添加了对于http头的验证. 就是 ...

  6. u-boot移植易用性设置

    u-boot移植易用性设置 以下设置使用的u-boot版本为u-boot-2012.04.01 环境参数 在Flash上划分了一块区域用于存储环境变量,所以当u-boot启动时会有如下操作: 读取Fl ...

  7. VS---《在VS2010中 使用C++创建和使用DLL》(002)

    VS---<在VS2010中 使用C++创建和使用DLL>(002) 前面初认识了创建和调用DLL,在VS工程下可以通过在 同一工程.不同工程 下创建和调用DLL.现在,同一工程下创建和调 ...

  8. bug是前端还是后端

    分析bug是前端还是后端的   如何分析一个bug是前端还是后端的? 平常提bug的时候,前端开发和后端开发总是扯皮,不承认是对方的bug这种情况很容易判断,先抓包看请求报文,对着接口文档,看请求报文 ...

  9. D. Connected Components Croc Champ 2013 - Round 1 (并查集+技巧)

    292D - Connected Components D. Connected Components time limit per test 2 seconds memory limit per t ...

  10. docker学习系列-jdk基础镜像制作

    准备一台安装有docker服务的机器 1.编辑Dockerfile   vim Dockerfile FROM centos:latest ADD ./jdk-8u141-linux-x64.tar. ...