坐标注意力学习(Coordinate Attention)

一·.摘要部分重要语句:

        坐标注意力将位置信息嵌入到通道中,与SE通道注意中通过2D全局池将特征张量转换为单个特征向量不同,坐标注意将通道注意分解为两个一维特征编码过程,分别沿两个空间方向聚合特征。通过这种方法,可以在一个空间方向上捕获远程依赖关系,同时在另一个空间方向上保存精确的位置信息。然后,所产生的feature map被分别编码为一对方向感知和位置敏感的注意映射,该注意映射可以互补地应用于输入feature map,以增加感兴趣的对象的表示。后面是作者表示他的注意力模块很好的运用在轻量型网络,在分类和检测语义分割等下游任务表现得也很好。

CA注意力机制模型代码

二.引言部分重要语句

        注意力机制是用来告诉模型输入图像是“什么{通道注意力告知--》图像的意义}”和“在哪里{空间注意力给与图像关注的信息在哪-》位置}”,并被广泛应用于提高现代深度神经网络的性能。由于注意力机制带来的开销巨大,故在移动网络的应用是不如大型网络的。考虑到移动网络有限的计算能力,迄今为止,最流行的移动网络注意机制仍然是挤压-激励(squeeze -and - dexcitation, SE)注意力。它在二维全局池的帮助下计算通道注意力,以相当低的计算成本提供显著的性能收益。然而,SE注意只考虑通道间信息的编码,而忽略了位置信息的重要性,位置信息是视觉任务中捕获目标结构的关键。后来的作品,如BAM和CBAM,试图通过降低输入张量的通道维数,然后使用卷积计算空间注意力,来利用位置信息。然而,卷积只能捕获局部关系(卷积核那一小块位置),而无法建模远景任务所必需的长范围依赖关系。在本文中,提出了一种新颖高效的注意机制,将位置信息嵌入通道注意中,使移动网络能够在较大的区域上进行注意,同时避免了大量的计算开销。为了缓解二维全局池化导致的位置信息损失,我们将通道注意力分解为两个并行的一维特征编码过程,有效地将整合空间坐标信息输入到生成的注意力feature map中。具体来说,我们的方法利用两个1D全局池操作,分别沿着垂直和水平方向将输入特征聚合为两个独立的方向感知feature maps。这两个嵌入方向特定信息的feature maps被分别编码为两个注意映射,每个注意映射捕获输入特征映射沿一个空间方向的长范围依赖关系。因此,位置信息可以保存在生成的注意图中。然后通过乘法将两个注意映射应用到输入特征映射中,以强调兴趣的表示。我们将所提出的注意方法命名为坐标注意,因为其操作可以区分空间方向(即坐标)并生成坐标感知的注意映射。

坐标注意的优势:

1.它不仅捕获跨通道的信息,还捕获方向感知和位置敏感的信息,这有助于模型更准确地定位和识别感兴趣的对象。

2.方法既灵活又轻便,可以很容易地插入移动网络的经典构建块中,例如MobileNetV2[34]中提出的反向残留块和MobileNeXt[49]中提出的沙漏块,通过强调信息表示来增强特征。如下所示为插入位置。

其中a表示MobileNetV2中提出的逆残留块,(b)MobileNeXt中提出的沙漏瓶颈块。 

3.作为一个预先训练的模型,我们的协调注意力可以为移动网络的下游任务带来显著的性能提升,特别是对于那些具有密集预测的任务(例如语义分割)。

三:坐标注意力架构

 其中(a)表示SE注意力,(b)表示CBAM,(c)CAB模块

### 坐标注意力机制架构图 坐标注意力机制通过两个主要阶段来处理输入特征图:坐标信息嵌入和坐标注意力生成。具体来说,在坐标信息嵌入阶段,模型会将空间位置信息融入到特征表示中;而在坐标注意力生成阶段,则基于这些增强后的特征计算出最终的注意力权重矩阵[^1]。 对于具体的模块结构图,虽然无法直接展示图像,可以文字描述该图的主要组成部分: - **输入层**:接收来自前一层网络输出的多维张量作为初始数据源。 - **坐标信息嵌入子模块**:此部分负责向原始特征添加额外的位置编码,使得后续操作能够利用绝对或相对的空间布局特性。这一步骤有助于捕捉不同通道间的关联以及远距离像素间的关系。 - **中间转换层**:经过初步加工后得到的新特征映射会被传递至此处进一步变换,可能涉及卷积运算或其他形式的数据重组过程。 - **坐标注意力生成子模块**:在此环节内完成核心逻辑——即依据前述预处理过的特征构建自适应性的关注分布模式。这种设计允许算法更加聚焦于重要的局部区域而忽略无关紧要的部分。 - **输出层**:最后产生的注意力掩码将会被应用于原输入上,从而实现对特定目标的有效强调与筛选效果。 为了更直观理解整个流程,建议查阅原文献中的Figure 2右侧所示的具体图形化表达方式。 ```python import matplotlib.pyplot as plt def plot_architecture(): fig, ax = plt.subplots() # 绘制各组件示意框 input_box = plt.Rectangle((0.1, 0.7), 0.8, 0.15, fc='lightblue') embed_box = plt.Rectangle((0.1, 0.45), 0.8, 0.15, fc='lightgreen') transform_box = plt.Rectangle((0.1, 0.2), 0.8, 0.15, fc='lightcoral') output_box = plt.Rectangle((0.1, 0.95), 0.8, 0.05, fc='wheat') ax.add_patch(input_box) ax.add_patch(embed_box) ax.add_patch(transform_box) ax.add_patch(output_box) # 添加标签说明 plt.text(0.5, 0.825, 'Input Layer', ha='center', va='center') plt.text(0.5, 0.525, 'Coordinate Info\nEmbedding', ha='center', va='center') plt.text(0.5, 0.3, 'Intermediate\nTransformation', ha='center', va='center') plt.text(0.5, 0.975, 'Output Attention Mask', ha='center', va='center') # 连接线指示流向 plt.arrow(0.5, 0.65, 0, -0.15, head_width=0.05, color='black') plt.arrow(0.5, 0.4, 0, -0.15, head_width=0.05, color='black') plt.arrow(0.5, 0.15, 0, -0.1, head_width=0.05, color='black') plt.xlim(0, 1) plt.ylim(0, 1) plt.axis('off') plt.show() plot_architecture() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值