注意力机制-CA注意力-Coordinate attention

这篇具有很好参考价值的文章主要介绍了注意力机制-CA注意力-Coordinate attention。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介

CA(Coordinate attention for efficient mobile network design)发表在CVPR2021,帮助轻量级网络涨点、即插即用。

CA注意力机制的优势:

1、不仅考虑了通道信息,还考虑了方向相关的位置信息。
2、足够的灵活和轻量,能够简单的插入到轻量级网络的核心模块中。

提出不足

1、SE注意力中只关注构建通道之间的相互依赖关系,忽略了空间特征。
2、CBAM中引入了大尺度的卷积核提取空间特征,但忽略了长程依赖问题。

算法流程图

ca注意力,卷积注意力机制,深度学习,人工智能
step1: 为了避免空间信息全部压缩到通道中,这里没有使用全局平均池化。为了能够捕获具有精准位置信息的远程空间交互,对全局平均池化进行的分解,具体如下:
ca注意力,卷积注意力机制,深度学习,人工智能
ca注意力,卷积注意力机制,深度学习,人工智能
对尺寸为 C ∗ H ∗ W C*H*W CHW输入特征图 I n p u t Input Input分别按照 X X X方向和 Y Y Y方向进行池化,分别生成尺寸为 C ∗ H ∗ 1 C*H*1 CH1 C ∗ 1 ∗ W C*1*W C1W的特征图。如下图所示(图片粘贴自B站大佬渣渣的熊猫潘)。
ca注意力,卷积注意力机制,深度学习,人工智能
step2:将生成的 C ∗ 1 ∗ W C*1*W C1W的特征图进行变换,然后进行concat操作。公式如下:
ca注意力,卷积注意力机制,深度学习,人工智能
z h z^h zh z w z^w zw进行concat后生成如下图所示的特征图,然后进行F1操作(利用1*1卷积核进行降维,如SE注意力中操作)和激活操作,生成特征图 f ∈ R C / r × ( H + W ) × 1 f \in \mathbb{R}^{C/r\times(H+W)\times1} fRC/r×(H+W)×1
ca注意力,卷积注意力机制,深度学习,人工智能
step3:沿着空间维度,再将 f f f进行split操作,分成 f h ∈ R C / r × H × 1 f^h\in \mathbb{R}^{C/r\times H \times1} fhRC/r×H×1 f w ∈ R C / r × 1 × W f^w\in \mathbb{R}^{C/r\times1\times W} fwRC/r×1×W,然后分别利用 1 × 1 1 \times 1 1×1卷积进行升维度操作,再结合sigmoid激活函数得到最后的注意力向量 g h ∈ R C × H × 1 g^h \in \mathbb{R}^{C \times H \times 1 } ghRC×H×1 g w ∈ R C × 1 × W g^w\in \mathbb{R}^{C \times1\times W} gwRC×1×W
ca注意力,卷积注意力机制,深度学习,人工智能
最后:Coordinate Attention 的输出公式可以写成:
ca注意力,卷积注意力机制,深度学习,人工智能

代码

代码粘贴自github。CoordAttention
地址:https://github.com/houqb/CoordAttention/blob/main/mbv2_ca.py

class CoordAtt(nn.Module):
    def __init__(self, inp, oup, groups=32):
        super(CoordAtt, self).__init__()
        self.pool_h = nn.AdaptiveAvgPool2d((None, 1))
        self.pool_w = nn.AdaptiveAvgPool2d((1, None))

        mip = max(8, inp // groups)

        self.conv1 = nn.Conv2d(inp, mip, kernel_size=1, stride=1, padding=0)
        self.bn1 = nn.BatchNorm2d(mip)
        self.conv2 = nn.Conv2d(mip, oup, kernel_size=1, stride=1, padding=0)
        self.conv3 = nn.Conv2d(mip, oup, kernel_size=1, stride=1, padding=0)
        self.relu = h_swish()

    def forward(self, x):
        identity = x
        n,c,h,w = x.size()
        x_h = self.pool_h(x)
        x_w = self.pool_w(x).permute(0, 1, 3, 2)

        y = torch.cat([x_h, x_w], dim=2)
        y = self.conv1(y)
        y = self.bn1(y)
        y = self.relu(y) 
        x_h, x_w = torch.split(y, [h, w], dim=2)
        x_w = x_w.permute(0, 1, 3, 2)

        x_h = self.conv2(x_h).sigmoid()
        x_w = self.conv3(x_w).sigmoid()
        x_h = x_h.expand(-1, -1, h, w)
        x_w = x_w.expand(-1, -1, h, w)

        y = identity * x_w * x_h

        return y

最后

CA不仅考虑到空间和通道之间的关系,还考虑到长程依赖问题。通过实验发现,CA不仅可以实现精度提升,且参数量、计算量较少。

简单进行记录,如有问题请大家指正。文章来源地址https://www.toymoban.com/news/detail-783908.html

到了这里,关于注意力机制-CA注意力-Coordinate attention的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包