YOLOv11改进 | 注意力篇 | YOLOv11引入24年空间和通道协同注意模块(SCSA),并构建C2PSA_SCSA

1.SCSA介绍

1.1  摘要:通道关注和空间关注分别为各种下游视觉任务的特征依赖和空间结构关系提取带来了显著的改进。通道和空间注意力的结合使用被广泛认为有利于进一步提高性能,然而,通道和空间注意力之间的协同效应,特别是在空间指导和减轻语义差异方面,尚未得到深入研究。这促使我们提出了一个新的空间和通道协同注意模块(SCSA),需要我们的调查在多个语义层次上的空间和通道的注意力之间的协同关系。我们的SCSA由两部分组成:可共享多语义空间注意力(SMSA)和渐进通道自我注意力(PCSA)。SMSA融合了多语义信息,并利用渐进压缩策略将具有区分性的空间先验信息注入到PCSA的通道自注意中,有效地指导通道重新校准。此外,在PCSA中的鲁棒的特征交互的基础上的逐行单头自注意机制,进一步减轻SMSA中的不同子特征之间的多语义信息的差异。我们在七个基准数据集上进行了广泛的实验,包括ImageNet-1 K上的分类,MSCOCO上的对象检测,ADE 20 K上的分割以及其他四个复杂场景检测数据集。我们的研究结果表明,我们提出的SCSA不仅超越了目前的即插即用的最先进的注意力,但也表现出增强的泛化能力,在各

### YOLOv11中的SCSA注意力机制 在YOLOv11中,引入空间通道协同注意力模块(Spatial and Channel Synergistic Attention, SCSA)旨在提升模型对于目标检测任务的理解能力。该模块通过融合空间维度上的特征图以及不同通道之间的关系来增强网络的表现力。 #### 实现方法 为了实现这一功能,在卷积层之后添加了一个专门设计用于捕捉这些复杂模式的新组件——即SCSA单元。此过程涉及以下几个方面: - **空间注意力计算**:通过对输入特征映射应用一系列操作以获得表示各位置重要性的权重矩阵W_spatial。这通常涉及到先经过平均池化与最大池化的组合处理得到两个二维张量H_avg H_max ,再将其连接起来通过一个小型全连接神经网络转换成最终的空间注意力建议得分[^1]。 ```python import torch.nn as nn class SpatialAttention(nn.Module): def __init__(self): super(SpatialAttention, self).__init__() self.conv = nn.Conv2d(2, 1, kernel_size=7, padding=3) def forward(self, x): avg_out = torch.mean(x, dim=1, keepdim=True) max_out, _ = torch.max(x, dim=1, keepdim=True) out = torch.cat([avg_out, max_out], dim=1) out = self.conv(out) return torch.sigmoid(out) ``` - **通道注意力计算**:同样地,针对每一个单独的channel也执行类似的流程,只不过这次关注的是如何衡量各个channels的重要性程度据此调整其激活强度。这里采用全局均值/最大池化的方式获取每条路径下的响应向量C_avg 及 C_max ,随后送入一个多层感知器MLP进行变换从而得出期望的结果w_channel。 ```python class ChannelAttention(nn.Module): def __init__(self, in_planes, ratio=8): super(ChannelAttention, self).__init__() self.avg_pool = nn.AdaptiveAvgPool2d(1) self.max_pool = nn.AdaptiveMaxPool2d(1) self.fc1 = nn.Conv2d(in_planes, in_planes // ratio, 1, bias=False) self.relu1 = nn.ReLU() self.fc2 = nn.Conv2d(in_planes // ratio, in_planes, 1, bias=False) self.sigmoid = nn.Sigmoid() def forward(self, x): avg_out = self.fc2(self.relu1(self.fc1(self.avg_pool(x)))) max_out = self.fc2(self.relu1(self.fc1(self.max_pool(x)))) out = avg_out + max_out return self.sigmoid(out) ``` 最后一步则是将上述两部分所得结果相乘与原始feature map相结合形成新的输出作为后续阶段的基础数据源。 ```python class SCSABlock(nn.Module): def __init__(self, channel_in): super(SCSABlock, self).__init__() self.channel_attention = ChannelAttention(channel_in) self.spatial_attention = SpatialAttention() def forward(self, x): ca = self.channel_attention(x) * x sa = self.spatial_attention(ca) * ca return sa ``` 这种结构不仅能够有效地提高模型的学习效率而且有助于改善整体性能表现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值