CVPR2021-即插即用 | Coordinate Attention详解与CA Block实现(文末获取论文原文)(一)

简介: CVPR2021-即插即用 | Coordinate Attention详解与CA Block实现(文末获取论文原文)(一)

1 简介


Mobile Network设计的最新研究成果表明,通道注意力(例如,SE注意力)对于提升模型性能具有显著效果,但它们通常会忽略位置信息,而位置信息对于生成空间选择性attention maps是非常重要。

因此在本文中,作者通过将位置信息嵌入到通道注意力中提出了一种新颖的移动网络注意力机制,将其称为“Coordinate Attention”。

与通过2维全局池化将特征张量转换为单个特征向量的通道注意力不同,coordinate注意力将通道注意力分解为两个1维特征编码过程,分别沿2个空间方向聚合特征。这样,可以沿一个空间方向捕获远程依赖关系,同时可以沿另一空间方向保留精确的位置信息。然后将生成的特征图分别编码为一对方向感知和位置敏感的attention map,可以将其互补地应用于输入特征图,以增强关注对象的表示。

本文所提的Coordinate注意力很简单,可以灵活地插入到经典的移动网络中,例如MobileNetV2,MobileNeXt和EfficientNet,而且几乎没有计算开销。大量实验表明,Coordinate注意力不仅有益于ImageNet分类,而且更有趣的是,它在下游任务(如目标检测和语义分割)中表现也很好。


2 相关工作


2.1 Mobile Network

最近的很多关于Mobile Network的工作大多数都是基于深度可分离卷积inverted残差模块

  • HBONet:在每个inverted残差模块中引入下采样操作,用于建模具有代表性的空间信息。
  • ShuffleNetV2:在inverted残差模块之前和之后使用通道分割模块和通道shuffle模块。
  • MobileNetV3:结合神经网络结构搜索算法,寻找最优激活函数和不同深度的inverted残差块的扩展比。
  • MixNet、EfficientNet和ProxylessNAS:也采用不同的搜索策略来搜索深度可分卷积的最优核大小或标量,从而从扩展比、输入分辨率、网络深度和宽度等方面控制网络权值。
  • 最近,有学者重新思考了基于深度可分离卷积的方法,专门设计了基于Mobile Network的bottleneck结构,并基于此设计MobileNeXt

2.2 注意力机制

想必大家都已经知道注意力机制在各种计算机视觉任务中都是有帮助,如图像分类和图像分割。其中最为经典和被熟知的便是SENet,它通过简单地squeeze每个2维特征图,进而有效地构建通道之间的相互依赖关系。

image.png

CBAM进一步推进了这一思想,通过大尺度核卷积引入空间信息编码。后来的研究如GENet、GALA、AA、TA,通过采用不同的空间注意力机制或设计高级注意力块,扩展了这一理念。

image.png

Non-local/self-attention Network则着重于构建spatial或channel注意力。典型的例子包括NLNet、GCNet、A2Net、SCNet、gsopnet和CCNet,它们都利用Non-local机制来捕获不同类型的空间信息。然而,由于self-attention模块内部计算量大,常被用于大型模型中,不适用于Mobile Network。

image.png

与Non-local/self-attention的方法不同,CA方法考虑了一种更有效的方法来捕获位置信息和通道关系,以增强Mobile Network的特征表示。通过将二维全局池操作分解为两个一维编码过程,本文方法比其他具有轻量级属性的注意力方法(如SENet、CBAM和TA)运行得更好。


3 Coordinate Attention


一个coordinate attention块可以被看作是一个计算单元,旨在增强Mobile Network中特征的表达能力。它可以将任何中间特征张量作为输入并通过转换输出了与张量具有相同size同时具有增强表征的。为了更加清晰的描述CA注意力,这里先对SE block进行讨论。

3.1 Revisit SE Block

在结构上,SE block可分解为SqueezeExcitation 2步,分别用于全局信息嵌入和通道关系的自适应Re-weight。

Squeeze

在输入的条件下,第通道的squeeze步长可表示为:

image.png

式中,是与第通道相关的输出。

输入来自一个固定核大小的卷积层,因此可以看作是局部描述符的集合。Sqeeze操作使模型收集全局信息成为可能。

Excitation

Excitation的目的是完全捕获通道之间的依赖,它可以被表述为:

image.png

其中为通道乘法,为激活函数,为变换函数生成的结果,公式如下:

image.png

这里,和是2个线性变换,可以通过学习来捕捉每个通道的重要性。

为什么SE Block不好?

SE Block虽然近2年来被广泛使用;然而,它只考虑通过建模通道关系来重新衡量每个通道的重要性,而忽略了位置信息,但是位置信息对于生成空间选择性attention maps是很重要的。因此作者引入了一种新的注意块,它不仅仅考虑了通道间的关系还考虑了特征空间的位置信息。

3.2 Coordinate Attention Block

Coordinate Attention通过精确的位置信息对通道关系和长期依赖性进行编码,具体操作分为Coordinate信息嵌入Coordinate Attention生成2个步骤。

image.png

3.2.1 Coordinate信息嵌入

全局池化方法通常用于通道注意编码空间信息的全局编码,但由于它将全局空间信息压缩到通道描述符中,导致难以保存位置信息。为了促使注意力模块能够捕捉具有精确位置信息的远程空间交互,本文按照以下公式分解了全局池化,转化为一对一维特征编码操作:

image.png

具体来说,给定输入,首先使用尺寸为(H,1)或(1,W)的pooling kernel分别沿着水平坐标和垂直坐标对每个通道进行编码。因此,高度为的第通道的输出可以表示为:

image.png

同样,宽度为的第通道的输出可以写成:

image.png

上述2种变换分别沿两个空间方向聚合特征,得到一对方向感知的特征图。这与在通道注意力方法中产生单一的特征向量的SE Block非常不同。这2种转换也允许注意力模块捕捉到沿着一个空间方向的长期依赖关系,并保存沿着另一个空间方向的精确位置信息,这有助于网络更准确地定位感兴趣的目标。

3.2.2 Coordinate Attention生成

通过3.2.1所述,本文方法可以通过上述的变换可以很好的获得全局感受野并编码精确的位置信息。为了利用由此产生的表征,作者提出了第2个转换,称为Coordinate Attention生成。这里作者的设计主要参考了以下3个标准:

  • 首先,对于Mobile环境中的应用来说,新的转换应该尽可能地简单;
  • 其次,它可以充分利用捕获到的位置信息,使感兴趣的区域能够被准确地捕获;
  • 最后,它还应该能够有效地捕捉通道间的关系。

通过信息嵌入中的变换后,该部分将上面的变换进行concatenate操作,然后使用卷积变换函数对其进行变换操作:

image.png

式中为沿空间维数的concatenate操作,为非线性激活函数,为对空间信息在水平方向和垂直方向进行编码的中间特征映射。这里,是用来控制SE block大小的缩减率。然后沿着空间维数将分解为2个单独的张量和。利用另外2个卷积变换和分别将和变换为具有相同通道数的张量到输入,得到:

这里是sigmoid激活函数。为了降低模型的复杂性和计算开销,这里通常使用适当的缩减比(如32)来减少的通道数。然后对输出和进行扩展,分别作为attention weights。

最后,Coordinate Attention Block的输出可以写成:

image.png

3.2.3 CA Block的PyTorch实现

import torch
from torch import nn
class CA_Block(nn.Module):
    def __init__(self, channel, h, w, reduction=16):
        super(CA_Block, self).__init__()
        self.h = h
        self.w = w
        self.avg_pool_x = nn.AdaptiveAvgPool2d((h, 1))
        self.avg_pool_y = nn.AdaptiveAvgPool2d((1, w))
        self.conv_1x1 = nn.Conv2d(in_channels=channel, out_channels=channel//reduction, kernel_size=1, stride=1, bias=False)
        self.relu = nn.ReLU()
        self.bn = nn.BatchNorm2d(channel//reduction)
        self.F_h = nn.Conv2d(in_channels=channel//reduction, out_channels=channel, kernel_size=1, stride=1, bias=False)
        self.F_w = nn.Conv2d(in_channels=channel//reduction, out_channels=channel, kernel_size=1, stride=1, bias=False)
        self.sigmoid_h = nn.Sigmoid()
        self.sigmoid_w = nn.Sigmoid()
    def forward(self, x):
        x_h = self.avg_pool_x(x).permute(0, 1, 3, 2)
        x_w = self.avg_pool_y(x)
        x_cat_conv_relu = self.relu(self.conv_1x1(torch.cat((x_h, x_w), 3)))
        x_cat_conv_split_h, x_cat_conv_split_w = x_cat_conv_relu.split([self.h, self.w], 3)
        s_h = self.sigmoid_h(self.F_h(x_cat_conv_split_h.permute(0, 1, 3, 2)))
        s_w = self.sigmoid_w(self.F_w(x_cat_conv_split_w))
        out = x * s_h.expand_as(x) * s_w.expand_as(x)
        return out
if __name__ == '__main__':
    x = torch.randn(1, 16, 128, 64)    # b, c, h, w
    ca_model = CA_Block(channel=16, h=128, w=64)
    y = ca_model(x)
    print(y.shape)


相关文章
|
5月前
|
机器学习/深度学习 自然语言处理 算法
【论文精读】ACL 2022:Graph Pre-training for AMR Parsing and Generation
【论文精读】ACL 2022:Graph Pre-training for AMR Parsing and Generation
|
5月前
|
机器学习/深度学习 编解码 算法
图像超分:RFB-ESRGAN(Perceptual Extreme Super Resolution Network with Receptive Field Block)
图像超分:RFB-ESRGAN(Perceptual Extreme Super Resolution Network with Receptive Field Block)
117 0
|
5月前
|
机器学习/深度学习 网络架构 计算机视觉
YOLOv5改进有效涨点系列->适合多种检测场景的BiFormer注意力机制(Bi-level Routing Attention)
YOLOv5改进有效涨点系列->适合多种检测场景的BiFormer注意力机制(Bi-level Routing Attention)
296 0
|
2月前
|
机器学习/深度学习 人工智能 算法
【博士每天一篇论文-算法】Collective Behavior of a Small-World Recurrent Neural System With Scale-Free Distrib
本文介绍了一种新型的尺度无标度高聚类回声状态网络(SHESN)模型,该模型通过模拟生物神经系统的特性,如小世界现象和无标度分布,显著提高了逼近复杂非线性动力学系统的能力,并在Mackey-Glass动态系统和激光时间序列预测等问题上展示了其优越的性能。
24 1
【博士每天一篇论文-算法】Collective Behavior of a Small-World Recurrent Neural System With Scale-Free Distrib
|
2月前
|
存储 机器学习/深度学习 算法
【博士每天一篇文献-算法】A biologically inspired dual-network memory model for reduction of catastrophic
本文介绍了一种受生物学启发的双网络记忆模型,由海马网络和新皮层网络组成,通过模拟海马CA3区的混沌行为和齿状回区的神经元更替,以及新皮层网络中的伪模式学习,有效减少了神经网络在学习新任务时的灾难性遗忘问题。
18 4
|
2月前
|
机器学习/深度学习 算法 测试技术
【博士每天一篇文献-算法】A Simple Way to Initialize Recurrent Networks of Rectified Linear Units
本文介绍了一种新的递归神经网络(RNN)初始化方法,通过使用单位矩阵或其缩放版本来初始化修正线性单元(ReLU)组成的RNN,称为IRNN,该方法在处理长期依赖任务时表现优异,与长短期记忆(LSTM)RNN性能相当。
26 1
|
2月前
|
机器学习/深度学习 编解码 算法
【文献学习】Model-Driven Channel Estimation for OFDM Systems Based on Image SuperResolution Network
本文介绍了一种基于图像超分辨率网络的OFDM系统模型驱动信道估计算法,通过结合最小二乘法和深度学习技术来提高信道估计的准确性。
25 6
|
5月前
[Transformer-XL]论文实现:Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context
[Transformer-XL]论文实现:Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context
30 1
|
算法 PyTorch 算法框架/工具
论文解读:LaMa:Resolution-robust Large Mask Inpainting with Fourier Convolutions
论文解读:LaMa:Resolution-robust Large Mask Inpainting with Fourier Convolutions
619 0
|
机器学习/深度学习 自然语言处理 数据可视化
CVPR2021-即插即用 | Coordinate Attention详解与CA Block实现(文末获取论文原文)(二)
CVPR2021-即插即用 | Coordinate Attention详解与CA Block实现(文末获取论文原文)(二)
140 0
下一篇
无影云桌面