【论文阅读】注意力综述(软注意力)

以下内容来自:综述:图像处理中的注意力机制 – 知乎

目录

概述

软注意力

Spatial Transformer Networks(空间域注意力)—2015 nips

SENET (通道域)—2017CPVR

Residual Attention Network(混合域)—2017

Non-local Neural Networks, CVPR2018

Interaction-aware Attention, ECCV2018

CBAM: Convolutional Block Attention Module(通道域+空间域), ECCV2018

CCNet

概述

计算机视觉(computer vision)中的注意力机制(attention)的基本思想就是想让系统学会注意力——能够忽略无关信息而关注重点信息。为什么要忽略无关信息呢?

神经网络中的「注意力」是什么?怎么用?

就注意力的可微性来分:

  • Hard-attention, 就是0/1问题,哪些区域是被 attentioned,哪些区域不关注.硬注意力在图像中的应用已经被人们熟知多年: 图像裁剪(image cropping)。硬注意力(强注意力)与软注意力不同点在于,首先强注意力是更加关注点,也就是图像中的每个点都有可能延伸出注意力,同时强注意力是一个随机的预测过程,更强调动态变化。当然, 最关键是强注意力是一个不可微的注意力训练过程往往是通过增强学习(reinforcement learning)来完成的。[Mnih, Volodymyr, Nicolas Heess, and AlexGraves. “Recurrent models of visual attention.” Advances inneural information processing systems. 2014.]
  • 硬注意力可以用Python(或Tensorflow)实现为:
g = I[y:y+h, x:x+w]

上述存在的唯一的问题是它是不可微分的;你如果想要学习模型参数的话,就必须使用分数评估器(score-function estimator)
* Soft-attention, [0,1]间连续分布问题,每个区域被关注的程度高低,用0~1的score表示.软注意力的关键点在于,这种注意力更关注区域或者通道,而且软注意力是确定性的注意力,学习完成后直接可以通过网络生成, 最关键的地方是软注意力是可微的,这是一个非常重要的地方。可以微分的注意力就可以通过神经网络算出梯度并且前向传播和后向反馈来学习得到注意力的权重。
然而,这种类型的软注意力在 计算上是非常浪费的。输入的黑色部分对结果没有任何影响,但仍然需要处理。同时它也是过度参数化的:实现注意力的sigmoid 激活函数是彼此相互独立的。它可以一次选择多个目标,但实际操作中,我们经常希望具有选择性,并且只能关注场景中的一个单一元素。由DRAW和空间变换网络(Spatial Transformer Networks)引入的两种机制很好地别解决了这个问题。它们也可以调整输入的大小,从而进一步提高性能。

就注意力关注的域来分

  1. 空间域(spatial domain)
  2. 通道域(channel domain)
  3. 层域(layer domain)
  4. 混合域(mixed domain)
  5. 时间域(time domain):还有另一种比较特殊的强注意力实现的注意力域,时间域(time domain),但是因为强注意力是使用reinforcement learning来实现的,训练起来有所不同

一个概念:Self-attention自注意力,就是 feature map 间的自主学习,分配权重(可以是 spatial,可以是 temporal,也可以是 channel间)

软注意力

Spatial Transformer Networks(空间域注意力)—2015 nips

Spatial Transformer Networks(STN)模型[4]是15年NIPS上的文章,这篇文章 通过注意力机制,将原始图片中的空间信息变换到另一个空间中并保留了关键信息

这篇文章认为之前pooling的方法太过于暴力,直接将信息合并会导致关键信息无法识别出来,所以提出了一个叫空间转换器(spatial transformer)的模块, 将图片中的的空间域信息做对应的空间变换,从而能将关键的信息提取出来

spatial transformer其实就是注意力机制的实现,因为训练出的spatial transformer能够找出图片信息中需要被关注的区域,同时这个transformer又能够具有旋转、缩放变换的功能,这样图片局部的重要信息能够通过变换而被框盒提取出来。

【论文阅读】注意力综述(软注意力)

(a)列是原始的图片信息,其中第一个手写数字7没有做任何变换,第二个手写数字5,做了一定的旋转变化,而第三个手写数字6,加上了一些噪声信号;

(b)列中的彩色边框是学习到的spatial transformer的框盒(bounding box),每一个框盒其实就是对应图片学习出来的一个spatial transformer;

©列中是通过spatial transformer转换之后的特征图,可以看出7的关键区域被选择出来,5被旋转成为了正向的图片,6的噪声信息没有被识别进入。

SENET (通道域)—2017CPVR

中间的模块就是SENet的创新部分,也就是注意力机制模块。这个注意力机制分成三个部分:挤压(squeeze),激励(excitation),以及scale(attention)。
流程:

  1. 将输入特征进行 Global AVE pooling,得到 1_1_ Channel
  2. 然后bottleneck特征交互一下,先压缩 channel数,再重构回channel数
  3. 最后接个 sigmoid,生成channel 间0~1的 attention weights,最后 scale 乘回原输入特征

Residual Attention Network(混合域)—2017

文章中注意力的机制是软注意力基本的加掩码(mask)机制,但是不同的是,这种注意力机制的mask借鉴了残差网络的想法,不只根据当前网络层的信息加上mask,还把上一层的信息传递下来,这样就防止mask之后的信息量过少引起的网络层数不能堆叠很深的问题。

文提出的注意力mask,不仅仅只是对空间域或者通道域注意,这种mask可以看作是每一个特征元素(element)的权重。 通过给每个特征元素都找到其对应的注意力权重,就可以同时形成了空间域和通道域的注意力机制

很多人看到这里就会有疑问,这种做法应该是从空间域或者通道域非常自然的一个过渡,怎么做单一域注意力的人都没有想到呢?原因有:

  • 如果你给每一个特征元素都赋予一个mask权重的话,mask之后的信息就会非常少,可能直接就破坏了网络深层的特征信息;
  • 另外,如果你可以加上注意力机制之后,残差单元(Residual Unit)的恒等映射(identical mapping)特性会被破坏,从而很难训练。

该文章的注意力机制的创新点在于提出了 残差注意力学习(residual attention learning),不仅只把mask之后的特征张量作为下一层的输入,同时也将mask之前的特征张量作为下一层的输入,这时候可以得到的特征更为丰富,从而能够更好的注意关键特征。

文章中模型结构是非常清晰的,整体结构上,是三阶注意力模块(3-stage attention module)。每一个注意力模块可以分成两个分支(看stage2),上面的分支叫主分支(trunk branch),是基本的残差网络(ResNet)的结构。而下面的分支是软掩码分支(soft mask branch),而软掩码分支中包含的主要部分就是残差注意力学习机制。通过下采样(down sampling)和上采样(up sampling),以及残差模块(residual unit),组成了注意力的机制。

Non-local Neural Networks, CVPR2018

CNN中的 convolution单元每次只关注邻域 kernel size 的区域,就算后期感受野越来越大,终究还是局部区域的运算,这样就忽略了全局其他片区(比如很远的像素)对当前区域的贡献。

所以 non-local blocks 要做的是,捕获这种 long-range 关系:对于2D图像,就是图像中任何像素对当前像素的关系权值;对于3D视频,就是所有帧中的所有像素,对当前帧的像素的关系权值。

网络框架图也是简单粗暴:

【论文阅读】注意力综述(软注意力)

文中有谈及多种实现方式,在这里简单说说在DL框架中最好实现的 Matmul 方式:

  1. 首先对输入的 feature map X 进行线性映射(说白了就是 1x1x1 卷积,来压缩通道数),然后得到θ,ϕ,g特征
  2. 通过reshape操作,强行合并上述的三个特征除通道数外的维度,然后对 进行矩阵点乘操作,得到类似协方差矩阵的东西(这个过程很重要,计算出特征中的自相关性,即得到每帧中每个像素对其他所有帧所有像素的关系)
  3. 然后对自相关特征 以列or以行(具体看矩阵 g 的形式而定) 进行 Softmax 操作,得到0~1的weights,这里就是我们需要的 Self-attention 系数
  4. 最后将 attention系数,对应乘回特征矩阵 g 中,然后再上扩 channel 数,与原输入 feature map X 残差一下,完整的 bottleneck

嵌入在 action recognition 框架中的attention map 可视化效果:

【论文阅读】注意力综述(软注意力)

图中的箭头表示,previous 若干帧中的某些像素 对最后图(当前帧)的脚关节像素的贡献关系。由于是soft-attention,其实每帧每个像素对对其有贡献关系,图中黄色箭头是把响应最大的关系描述出来。

Pros:non-local blocks很通用的,容易嵌入在任何现有的 2D 和 3D 卷积网络里,来改善或者可视化理解相关的CV任务。比如前不久已有文章把 non-local 用在 Video ReID [2] 的任务里。

Cons:文中的结果建议把non-local 尽量放在靠前的层里,但是实际上做 3D 任务,靠前的层由于 temporal T 相对较大,构造及点乘操作那步,超多的参数,需要耗费很大的GPU Memory

Interaction-aware Attention, ECCV2018

在 non-local block 的协方差矩阵基础上,设计了基于 PCA 的新loss,更好地进行特征交互。作者认为,这个过程,特征会在channel维度进行更好的 non-local interact,故称为 Interaction-aware attention。

怎么实现 通过PCA来获得 Attention weights呢?

文中不直接使用 协方差矩阵的特征值分解 来实现,而是使用一种等价形式。

CBAM: Convolutional Block Attention Module(通道域+空间域), ECCV2018

【论文阅读】注意力综述(软注意力)

【论文阅读】注意力综述(软注意力)

【论文阅读】注意力综述(软注意力)

空间注意力公式:(空间域注意力是通过对通道axis进行AvgPool和MaxPool得来的)

【论文阅读】注意力综述(软注意力)

CBAM 特别轻量级,也方便在端部署。

DANet:Dual Attention Network for Scene Segmentation(空间域+通道域), CPVR2019

把Self-attention的思想用在图像分割,可通过long-range上下文关系更好地做到精准分割。

主要思想也是上述文章 CBAM 和 non-local 的融合变形把deep feature map进行spatial-wise self-attention,同时也进行channel-wise self-attetnion,最后将两个结果进行 element-wise sum 融合。

【论文阅读】注意力综述(软注意力)

在 CBAM 分别进行空间和通道 self-attention的思想上,直接 使用了 non-local 的自相关矩阵 Matmul 的形式进行运算,避免了 CBAM 手工设计 pooling,多层感知器 等复杂操作

CCNet

本篇文章的亮点在于 用了巧妙的方法减少了参数量。在上面的DANet中,attention map计算的是所有像素与所有像素之间的相似性,空间复杂度为(HxW)x(HxW),而本文采用了criss-cross思想, 只计算每个像素与其同行同列即十字上的像素的相似性,通过进行循环(两次相同操作),间接计算到每个像素与每个像素的相似性,将空间复杂度降为(HxW)x(H+W-1),以图为例为下:

【论文阅读】注意力综述(软注意力)

整个网络的架构与DANet相同,只不过attention模块有所不同,如下图:在计算矩阵相乘时每个像素只抽取特征图中对应十字位置的像素进行点乘,计算相似度。

【论文阅读】注意力综述(软注意力)

经过一轮此attention计算得到的attention map如下图R1所示,对于每个元素只有十字上的相似性,而通过两轮此计算,对于每个元素就会得到整张图的相似性,如R2。

【论文阅读】注意力综述(软注意力)

得到此结果的原因如下图,经过一轮计算,每个像素可以得到在其十字上的相似性,对于不同列不同行(不在其十字上)的像素是没有相似性的,但是这个不同行不同列像素同样也进行了相似性计算, 计算了在其十字上的相似性,那么两个十字必有相交,在第二次attention计算的时候,通过交点,相当于是间接计算了这两个不同列不同行像素之间的相似性

实验结果达到了SOTA水平,但 没有计算全部像素的attention方法准确率高

GCNet:Non-local Networks Meet Squeeze-Excitation Networks and Beyond

GCNet 网络结构结构了non-local network和Squeeze-excitation networks.我们知道non-local network(NLNet)可以捕获长距离依赖关系。可以发现NLnet的网络结构采用的是自注意力机制来建模像素对关系。在这篇文章中non-local network的全局上下文在不同位置几乎是相同的,这表明学习到了无位置依赖的全局上下文,因此这样导致了大量的计算量的浪费。作者在这里提出了一种简化版的模型去获得全局上下文信息。使用的是query-independent(可以理解为无query依赖)的建模方式。同时更可以共享这个简化的结构和SENet网络结构。因此作者在这里联合了这三种方法产生了一个global context(GC) block。

卷积运算有一个显著缺陷,即仅在局部近邻上工作,也由此会错失全局信息。另一方面,自注意则是获取长程交互性方面的一项近期进展,但还主要应用于序列建模和生成建模任务上。在这篇论文中,我们研究了 将自注意(作为卷积的替代)用于判别式视觉任务的问题。我们提出了一种全新的二维相对自注意机制,研究表明这足以在图像分类任务上替代卷积作为一种单独的原语。我们在对照实验中发现,当结合使用卷积与自注意时所得到的结果最好。 因此我们提出使用这种自注意机制来增强卷积算子,具体做法是将卷积特征图与通过自注意产生的一组特征图连接起来

注意增强仅需极少量的计算负担就能实现系统性的改善,并且 在所有实验中都明显优于流行的 Squeeze-and-Excitation 通道式注意方法

实验还有个让人惊讶的结果:在 ImageNet 上全自注意模型(注意增强的一种特例)的表现仅略逊于对应的全卷积模型,这说明自注意本身就是一种强大的图像分类基本方法。

Original: https://blog.csdn.net/qq_36182852/article/details/121501516
Author: yepoyou
Title: 【论文阅读】注意力综述(软注意力)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/688569/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球