Advertisement

每日Attention学习2——Multi-Scale Convolutional Attention

阅读量:
模块出处

[link] [

复制代码
](https://github.com/Visual-Attention-Network/SegNeXt) [NIPS 22] SegNeXt: Rethinking Convolutional Attention Design for Semantic Segmentation

* * *

##### 模块名称

Multi-Scale Convolutional Attention (MSCA)

* * *

##### 模块作用

多尺度特征提取,更大感受野

* * *

##### 模块结构
![在这里插入图片描述](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-13/PZicaMVNwk65UsuYRgA7hJFEHb9r.jpeg)

* * *

##### 模块代码
复制代码
import torch
import torch.nn as nn

class MSCA(nn.Module):
def __init__(self, dim):
    super(MSCA, self).__init__()
    self.conv0 = nn.Conv2d(dim, dim, 5, padding=2, groups=dim)
    self.conv0_1 = nn.Conv2d(dim, dim, (1, 7), padding=(0, 3), groups=dim)
    self.conv0_2 = nn.Conv2d(dim, dim, (7, 1), padding=(3, 0), groups=dim)

此操作符基于深度可分离卷积设计(3x3空间窗口),其输入和输出通道数均为dim。
此处为另一层深度可分离卷积操作(3x3空间窗口),其输入和输出通道数均为dim。
输入高度与输出高度一致。
输入宽度增加6个像素。
组的数量等于输入通道数。

self.conv2_₁ = nn.Conv₂d(
dim,
dim,
kernel dimensions height:₁ row 和 width:₂₁ columns,
padding top:₀ rows 和 padding bottom:=₁₀ rows,
groups=dim
)
self.conv₂₂ = nn.Conv₂d(
dim,
dim,
kernel dimensions height:=₂₁ rows 和 width:₁ column,
padding left:=₁₀ columns 和 padding right:=₀ columns,
groups=dim
)
self.conv₃ = nn.Conv₂d(dim,
dim,
kernel dimensions of size (3×3) with kernel size (height x width)
)

复制代码
def forward(self, x):
    u = x.clone()
    attn = self.conv0(x)

    attn_0 = self.conv0_1(attn)
    attn_0 = self.conv0_2(attn_0)

    attn_1 = self.conv1_1(attn)
    attn_1 = self.conv1_2(attn_1)

    attn_2 = self.conv2_1(attn)
    attn_2 = self.conv2_2(attn_2)
    attn = attn + attn_0 + attn_1 + attn_2

    attn = self.conv3(attn)

    return attn * u

if __name__ == '__main__':
x = torch.randn([1, 512, 16, 16])
msca = MSCA(512)
out = msca(x)
print(out.shape)  # 1, 512, 16, 16

python
复制代码
* * *

##### 原文表述

如图2(a)所示,MSCA包含三个部分:一个深度卷积以汇总局部信息;一个多分支深度条带卷积以获取多尺度上下文;一个1×1卷积以建模不同通道之间的信息。该1×1卷积的输出将直接作为注意力以对MSCA的输出结果进行后处理加权。

全部评论 (0)

还没有任何评论哟~