1. 摘要

注意力机制是深度神经网络的一个设计趋势,其在各种计算机视觉任务中都表现突出。但是,应用到图像超分辨领域的注意力模型大都没有考虑超分辨和其它高层计算机视觉问题的天然不同。

作者提出了一个新的注意力模型,由针对 SR 问题优化的新的通道和空间注意力机制以及将这两者结合起来的融合机制组成。基于此,作者设计了一个残差注意力模块(RAM)以及用来超分辨的 SRRAM 网络。

2. 介绍

通常,大多数基于 CNN 来进行图像超分辨的方法在内部同等地处理所有类型的信息,这可能无法有效地区分内容的详细特征(例如低频和高频信息)。换句话说,网络选择性地使用特征的能力有限。

最近,注意力机制是各种计算机视觉问题中值得注意的网络结构之一。它允许网络重新校准提取的特征图,从而可以进行更加自适应和有效的训练。许多研究者也尝试了将注意力模型引入图像超分辨领域,但却都是从其他视觉任务(比如分类)中直接借鉴来的,针对超分辨问题则可能不是最优的。

因此,作者提出了一个新的注意力模型,可以有效地将通道注意力和空间注意力融合起来,并且是专门针对图像超分辨问题设计的。将这个注意力模型和基于 ResNet 的结构相结合,作者设计了一个 SRRAM 网络取得了比以往方法更好的效果。

3. 网络结构

3.1. 一些相关的注意力机制

RCAB 只有通道注意力,CBAM 以顺序的方式引入通道注意力和空间注意力,而 CSAR 则以并行的方式引入通道注意力和空间注意力。具体细节可参阅每篇论文阅读笔记。

3.2. RAM

在以前的方法中,通道注意力(CA)大多采用平均池化或者最大池化。但是,作者认为超分辨问题旨在恢复出图像的高频成分,因此利用通道的高频特性来学习注意力更加合理。所以,这里采取方差池化,也就是求得每个通道大小为 W×H 的特征图的方差。后续步骤与之前方法类似,通过两层神经网络来预测注意力图。

在空间注意力(SA)中,每个通道代表着一种滤波器,不同的滤波器负责提取图像的不同特征。例如,在提取到的边缘或复杂纹理特征图中,更详细的信息,即来自复杂滤波器的信息更重要。另一方面,在该区域几乎没有诸如天空或漫画图像的均匀区域之类的高频分量的情况下,相对较不详细的信息更重要并且需要被关注。也就是说,我们需要区别对待不同的通道,而不是像之前的注意力机制那样直接对通道维度进行压缩。这里,作者采用了深度可分离卷积,针对每个通道的特征分别卷积得到注意力图。

最后,将通道注意力图和空间注意力图相加后经过一个 Sigmoid 函数再与原特征相乘即可,与残差网络结合便得到了上图所示的 RAM 结构。其一个 TensorFlow 实现如下。

  1. def RAM(input, reduction):
  2. """
  3. @Residual Attention Module for Single Image Super-Resolution
  4. Residual Attention Module
  5. """
  6. _, width, height, channel = input.get_shape() # (B, W, H, C)
  7. u = tf.layers.conv2d(input, channel, 3, padding='same', activation=tf.nn.relu) # (B, W, H, C)
  8. u = tf.layers.conv2d(u, channel, 3, padding='same') # (B, W, H, C)
  9. # channel attention
  10. _, x = tf.nn.moments(u, axes=[1, 2], keep_dims=True) # (B, 1, 1, C)
  11. x = tf.layers.conv2d(x, channel // reduction, 1, activation=tf.nn.relu) # (B, 1, 1, C // r)
  12. x = tf.layers.conv2d(x, channel, 1) # (B, 1, 1, C)
  13. # spatial attention
  14. filter = tf.random_normal([3, 3, int(channel), 1], stddev=0.01)
  15. y = tf.nn.depthwise_conv2d(u, filter, strides=[1, 1, 1, 1], padding='SAME') # (B, W, H, C)
  16. z = tf.add(x, y) # (B, W, H, C)
  17. z = tf.nn.sigmoid(z)
  18. z = tf.multiply(u, z)
  19. z = tf.add(input, z)
  20. return z

3.3. SRRAM

整体网络结构由特征提取和上采样组成,特征提取由 R 个 RAM 模块以及长跳跃连接组成,上采样网络负责提高图像的分辨率。

4. 实验结果

4.1. Ablation studies

引入 CA 后模型在所有数据集上的平均表现比基线模型要高出 0.1 dB,同时引入 CA 和 SA 后模型表现继续有更大提升,而且在大部分情况下也都优于其他注意力机制。

4.2. 客观和主观评价对比

获取更多精彩,请关注「seniusen」!

RAM: Residual Attention Module for Single Image Super-Resolution的更多相关文章

  1. 【论文学习】A Fuzzy-Rule-Based Approach for Single Frame Super Resolution

    加尔各答印度统计研究所,作者: Pulak Purkait (pulak_r@isical.ac.in) 2013 年 代码:CodeForge.cn http://www.codeforge.cn/ ...

  2. [论文阅读] Residual Attention(Multi-Label Recognition)

    Residual Attention 文章: Residual Attention: A Simple but Effective Method for Multi-Label Recognition ...

  3. Paper | Residual Attention Network for Image Classification

    目录 1. 相关工作 2. Residual Attention Network 2.1 Attention残差学习 2.2 自上而下和自下而上 2.3 正则化Attention 最近看了些关于att ...

  4. [论文理解] CBAM: Convolutional Block Attention Module

    CBAM: Convolutional Block Attention Module 简介 本文利用attention机制,使得针对网络有了更好的特征表示,这种结构通过支路学习到通道间关系的权重和像素 ...

  5. Residual Attention Network for Image Classification(CVPR 2017)详解

    一.Residual Attention Network 简介 这是CVPR2017的一篇paper,是商汤.清华.香港中文和北邮合作的文章.它在图像分类问题上,首次成功将极深卷积神经网络与人类视觉注 ...

  6. 【论文笔记】CBAM: Convolutional Block Attention Module

    CBAM: Convolutional Block Attention Module 2018-09-14 21:52:42 Paper:http://openaccess.thecvf.com/co ...

  7. CBAM: Convolutional Block Attention Module

    1. 摘要 作者提出了一个简单但有效的注意力模块 CBAM,给定一个中间特征图,我们沿着空间和通道两个维度依次推断出注意力权重,然后与原特征图相乘来对特征进行自适应调整. 由于 CBAM 是一个轻量级 ...

  8. CBAM(Convolutional Block Attention Module)使用指南

    转自知乎 这货就是基于 SE-Net [5]中的 Squeeze-and-Excitation module 来进行进一步拓展 具体来说,文中把 channel-wise attention 看成是教 ...

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

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

随机推荐

  1. 如何通过PHP将excel的数据导入MySQL中

    在开发PHP程序时,很多时候我们会有将数据批量导入数据库的需求,如学生信息批量添加到数据库中,而事先用excel编排好,对excel实行操作,便是我们比较常用的选择方式. 在对excel的操作中,ph ...

  2. tensorflow学习笔记二----------变量

    tensorflow里面的变量表示,需要使用特定的语法进行.如果想构造一个行(列)向量,需要调用Variable函数进行.对两个变量进行操作,也要调用相应的函数. import tensorflow ...

  3. 最小生成树: HDU1233还是畅通工程

    还是畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  4. JS 的 Browser对象

    Window对象 closed innerHeight    窗口文档显示区的高度,包括滚动条 outerHeight    窗口总高度,包括工具条和滚动条 open() close() alert( ...

  5. 自定义UICollectionLayout

    #import "AppDelegate.h"#import "CircleLayout.h"#import "CollectionViewDataS ...

  6. 内置的re模块

    re(正则表达式) 字符匹配: 普通字符匹配:re.findall("alex","shfalexjaf"),直接查找符合的字符 元字符:  .  ^ $ * ...

  7. Codeforces Round #430 (Div. 2) - D

    题目链接:http://codeforces.com/contest/842/problem/D 题意:定义Mex为一个序列中最小的未出现的正整数,给定一个长度为n的序列,然后有m个询问,每个询问给定 ...

  8. PAT Advanced 1002 A+B for Polynomials (25 分)(隐藏条件,多项式的系数不能为0)

    This time, you are supposed to find A+B where A and B are two polynomials. Input Specification: Each ...

  9. C#基础知识之SharpZipLib压缩解压的使用

    项目中使用 Velocity 将模板和生成的动态内容(HTML.XML等)合并保存到redis数据库中,考虑到压缩的文件容量会比较小,方便传输而且存储所使用的空间也会比较小,所以要压缩一下,读取的时候 ...

  10. Node Buffer 利用 slice + indexOf 生成 split 方法

    demo let buf = Buffer.from('你你我们我你们'); Buffer.prototype.split = function (seq) { let arr=[]; let len ...