新的 self-attention 网络结构,Visual Attention Network

随着现在大家把transformer 的各种结构玩成花以后,后面也没有出什么比较经典的结构了。然后研究者们就开始挖掘以前的网络结构特点,加上各种技巧提高网络准确度。比如前段时间的ConvNeXt,各种叠技巧最后冲的很好准确度。现在又出来一个新的网络结构:Visual Attention Network。作者提出了一种新的Large Kernel Attention (LKA)模块,以使self-attention的自适应和长距离相关,同时避免了上述问题。

与MobileNet相似,它将一个标准的卷积解耦为2个部分:depthwise convolution和pointwise convolution(也就是1x1Conv)。本文的方法将卷积分解为3部分:depthwise convolution、depthwise and dilated convolution、pointwise convolution。得益于这种分解,本文的方法更适合于高效地分解大型核卷积。作者还在方法中引入了注意力机制来获得自适应特征。

新的 self-attention 网络结构,Visual Attention Network_第1张图片 

 新的 self-attention 网络结构,Visual Attention Network_第2张图片

 这里,是输入特征。表示注意力图。注意力图中的值表示每个特征的重要性。⊗指的是元素级的点乘。作者提出的LKA结合了卷积和自注意力的优点。它考虑了局部上下文信息、大的感受域和动态过程。

其中代码如下:

class AttentionModule(nn.Module):
    def __init__(self, dim):
        super().__init__()
        # depth-wise convolution
        self.conv0 = nn.Conv2d(dim, dim, 5, padding=2, groups=dim)
        # depth-wise dilation convolution
        self.conv_spatial = nn.Conv2d(dim, dim, 7, stride=1, padding=9, groups=dim, dilation=3)
        # channel convolution (1×1 convolution)
        self.conv1 = nn.Conv2d(dim, dim, 1)


    def forward(self, x):
        u = x.clone()        
        attn = self.conv0(x)
        attn = self.conv_spatial(attn)
        attn = self.conv1(attn)
        return u * attn

其中我个人看来,该网络结构利用拆分进行了特征提取,在一般的网络结构都有这些结构了,作者提出了一个Large Kernel Attention的概念。

你可能感兴趣的:(论文推荐,transformer,深度学习,机器学习)