Reverse Attention反向注意模块

前言

OSFormer模型中提到了反向边缘注意(Reverse Edge Attention)模块,通过十分简单的操作,就可以预测出伪装目标的边缘特征。作者也将OSFormer模型强大的细长边缘特征分割能力归功于反向边缘注意。那么,什么是反向注意(reverse attention)?反向注意有什么作用?为什么反向边缘注意可以预测出边缘特征?

在这里插入图片描述
在这里插入图片描述

1. Reverse Attention的提出

溯源Reverse Attention,发现Reverse Attention最早是2017年由来自美国南加州大学的团队提出的(Semantic Segmentation with Reverse Attention)。

这篇文章的主要目的是为了提高语义分割网络对于confusion area的预测能力。所谓的confusion area,是指网络对某些类别的预测概率都差不多大的区域。

下面这张图表示FCN网络提取特征和预测的过程。右下角表示最终预测的结果,圆形区域内部就是猫和狗重合部分的区域,也就是confusion area。
在这里插入图片描述

作者的观点是,FCN只是预测某个pixel属于各个类别的概率,而对于那些confusion area,如果能训练一个网络来预测得到这个区域不属于猫的概率比不属于狗的概率更大,那么结合原始FCN的预测,就可以得到这个区域应该预测成狗。所以构建了一个reverse learning process反向学习过程,来预测pixel不属于各个类别的概率。也就是Reverse Attention Network(RAN)。

在这里插入图片描述
在这里插入图片描述
整体框架如上面两张图所示,主要分成三个分支。

  • 第一个分支,也就是original branch,使用原始的FCN网络学习pixel属于各个类别的概率分布;
  • 第二个分支,也就是reverse branch,学习pixel不属于各个类别的概率分布;
  • 第三个分支,也就是reverse attention branch,学习第一、二个分支的预测图之间结合的权重。

最终用来预测的是经过attention branch输出的混合预测(combined pred)。

为什么需要第三个分支,也就是reverse attention branch:

最直接的想法是将original prediction和reverse prediction的结果直接相减,但是问题在于reverse learning的效果可能没有original learning的好。我们期望的是在original learning结果的confusion area上引入reverse learning的预测结果,因此需要引入一个attention机制,将reverse learning的结果引入confusion的区域。

数学表示:
I r a ( i , j ) = S i g m o i d ( − F C O N V o r g ( i , j ) ) I_{ra}(i,j)=Sigmoid(-F_{CONV_{org}}(i,j)) Ira(i,j)=Sigmoid(FCONVorg(i,j))

( i , j ) (i,j) (i,j)表示像素位置坐标, F C O N V o r g F_{CONV_{org}} FCONVorg表示 C O N V o r g CONV_{org} CONVorg的响应图。
由于NEG反转和sigmoid函数的作用,Reverse Attention的效果是,对于FCN原始预测 F C O N V o r g F_{CONV_{org}} FCONVorg中负的、较小的响应将会被突出,考虑它的reverse attention;对于正的、较大的响应就会被抑制,变得很小,不考虑它的reverse attention。

2. 显著目标检测中的Reverse Attention

显著目标检测(Salient Object Detection, SOD)的目的是突出图像中的显著目标区域,通常作为图像分割、图像字幕等高级视觉任务的预处理步骤。一篇ECCV 2018的论文Reverse Attention for Salient Object Detection受到上述工作的启发,采用自上而下的reverse attention来学习更准确的残差细节。
在这里插入图片描述
反向注意模块对应整体结构中的R模块。从最深层生成的显著图开始(最开始为Global saliency),进行上采样得到当前预测。然后用1减去使用sigmoid函数后的显著图,得到反向注意权重 A i = 1 − S i g m o i d ( S i + 1 u p ) A_i=1-Sigmoid(S_{i+1}^{up}) Ai=1Sigmoid(Si+1up)。然后与所在层的卷积特征图的每一个通道做逐元素点积,得到输出的注意力特征, F z , c = A z ⋅ T z , c F_{z,c}=A_z \cdot T_{z,c} Fz,c=AzTz,c。其中,z表示特征图的空间位置,c表示特征通道的索引。

通过逐步的自上而下、自深到浅的反向注意的处理,得到最终的输出预测。
在这里插入图片描述

3. PraNet:用于息肉分割的并行Reverse Attention网络

PraNet是2020年发表在MICCAI的一篇文章。使模型精准地分辨息肉边缘的粘膜是息肉分割任务中的一个难点。PraNet中使用RA (Reverse Attention)模块挖掘对应的边缘信息。
在这里插入图片描述
从整体网络结构中可以看到,PraNet网络结构的设计与Reverse Attention for Salient Object Detection论文中网络结构的设计十分接近。首先计算反向注意力模块的权重 A i = 1 − S i g m o i d ( S i + 1 u p ) A_i=1-Sigmoid(S_{i+1}^{up}) Ai=1Sigmoid(Si+1up)。然后将高层输出特征{ f i , i = 3 , 4 , 5 f_i,i=3,4,5 fi,i=3,4,5}与 A i A_i Ai做逐元素的点积,来获得反向注意力特征 R i R_i Ri,即 R i = f i ⊙ A i R_i=f_i \odot A_i Ri=fiAi

4. OSFormer中的Reverse Edge Attention

了解Reverse Attention的提出及后续演进模型之后,回头再看OSFormer中对Reverse Attention的使用。从结构图中能够明显看出的是,REA模块的输入同样来自不同层级的特征图,不同点在于用于监督Reverse Attention模块卷积核参数更新的不再是Ground Truth标签,而是边缘标签和Edge loss边缘损失函数。原论文中提到,这里用于监督的边缘标签没有经过任何手工标记,而是通过侵蚀实例掩码标签来获得的。
在这里插入图片描述
结构图中仍然有以下几个问题没有清楚说明:

  • 输入REA模块的不同层级的特征图(T4、T3、C2)是否和之前的Reverse Attention一样经过了上采样?
  • REA模块的输出边缘特征图 F e F_e Fe最终输出到了哪里?是否和之前的Reverse Attention一样与不同层级的REA输出相加到了一起?
  • 通过侵蚀实例掩码标签来获得边缘标签是怎么实现的?
  • Edge loss是怎么进行计算的?原论文中3.5节提到, L e d g e = ∑ j = 1 J L d i c e ( j ) L_{edge}=\sum_{j=1}^{J}L_{dice}^{(j)} Ledge=j=1JLdice(j)。那么, L d i c e L_{dice} Ldice又是什么?是V-Net论文中提到的Dice loss吗?那Dice loss有什么特别之处呢?这与之前的Reverse Attention所用的损失函数有什么区别?

参考

<think>好的,我现在要帮助用户了解空间光谱交互注意力模块的相关概念和实现方法,特别是在深度学习框架如PyTorch或TensorFlow中的实现。首先,我需要明确用户的问题,他们可能是在处理涉及空间和光谱信息的任务,比如遥感图像处理或高光谱图像分类,需要结合这两种特征的注意力机制。 接下来,我需要回忆相关的注意力机制模型。用户提到的“空间光谱交互注意力模块”可能结合了空间注意力和光谱(通道)注意力,类似于CBAM或BAM这样的模块。但用户提到的交互可能需要更紧密的结合,比如在提取空间特征时考虑光谱信息,反之亦然。 然后,我需要查阅现有的文献或论文,寻找类似的模块。例如,引用中的BAM模块是串联空间和通道注意力,而CBAM是并联的。可能空间光谱交互需要同时处理两个维度的信息,并设计交互机制,比如交叉注意力或特征融合。 接下来,我需要考虑如何在PyTorch中实现这样的模块。通常,空间注意力可能使用卷积层生成注意力图,光谱(通道)注意力使用全连接层或1x1卷积。交互可能涉及将空间特征和光谱特征进行矩阵乘法或其他操作,以增强两者的关联。 还需要考虑输入数据的结构。例如,高光谱图像通常是三维的(高度,宽度,波段),所以模块需要处理这种三维数据,同时提取空间和光谱特征。可能需要将输入分解为空间和光谱两个分支,分别处理后再融合。 然后,我需要验证自己的思路是否正确。比如,是否在空间注意力计算时引入光谱信息,或者在通道注意力中加入空间上下文。这可以通过设计两个分支,并在每个分支中融合另一种信息来实现。 最后,我需要考虑如何编写代码示例。例如,在PyTorch中定义一个类,包含空间和光谱两个子模块,每个子模块处理对应的注意力,然后将两个注意力图进行结合,可能通过相加或相乘的方式,再应用到输入特征上。 过程中需要注意用户的引用需求,比如引用提供的文献中的方法,如BAM或FlowNet3D中的空间关系处理。同时,确保生成的代码符合PyTorch或TensorFlow的语法,正确使用卷积层、激活函数等组件。 可能遇到的疑问:如何有效地融合空间和光谱信息?是否需要在多个尺度上处理?是否需要考虑计算效率?根据引用中的HPLFlowNet,可能采用结构化信息提取和非结构化数据处理的方法,这可以借鉴到模块设计中,比如使用点卷积或图网络来处理空间光谱关系。 总结步骤:1. 定义模块结构,包括空间和光谱分支;2. 在每个分支中整合另一种信息;3. 设计交互机制,如注意力图的相乘或相加;4. 应用注意力到原始输入,完成特征增强;5. 编写代码实现,并测试其正确性。</think>### 空间光谱交互注意力模块 空间光谱交互注意力模块是一种结合空间维度(图像局部区域)和光谱维度(通道/波段特征)的注意力机制,常用于高光谱图像处理、遥感分析等任务。其核心思想是通过交互学习,动态增强关键区域和关键通道的特征响应。 --- #### **实现原理** 1. **空间注意力分支**:捕捉空间维度的重要性(如物体边缘、纹理区域)。 2. **光谱注意力分支**:捕捉光谱维度的重要性(如特定波段的特征)。 3. **交互机制**:通过特征融合或交叉计算,使两个分支的注意力图相互影响,例如: - 将光谱注意力权重作为空间分支的输入; - 通过矩阵乘法或拼接实现特征交互。 --- #### **PyTorch实现示例** ```python import torch import torch.nn as nn class SpatialSpectralInteraction(nn.Module): def __init__(self, in_channels): super().__init__() # 空间分支:使用卷积生成空间注意力图 self.spatial_conv = nn.Sequential( nn.Conv2d(in_channels, 1, kernel_size=3, padding=1), nn.Sigmoid() # 输出[0,1]权重 ) # 光谱分支:使用全连接生成通道注意力图 self.spectral_fc = nn.Sequential( nn.AdaptiveAvgPool2d(1), nn.Flatten(), nn.Linear(in_channels, in_channels // 4), nn.ReLU(), nn.Linear(in_channels // 4, in_channels), nn.Sigmoid() ) # 交互层:融合两个注意力图 self.interaction_conv = nn.Conv2d(2, 1, kernel_size=3, padding=1) def forward(self, x): # 原始输入特征图:[B, C, H, W] # 空间注意力分支 spatial_attn = self.spatial_conv(x) # [B, 1, H, W] # 光谱注意力分支 spectral_attn = self.spectral_fc(x).unsqueeze(-1).unsqueeze(-1) # [B, C, 1, 1] # 交互:拼接并生成最终注意力图 combined = torch.cat([spatial_attn, spectral_attn.expand_as(spatial_attn)], dim=1) final_attn = torch.sigmoid(self.interaction_conv(combined)) # 应用注意力 return x * final_attn ``` --- #### **关键设计点** 1. **轻量化设计**:通过通道压缩(如`in_channels // 4`)减少计算量[^3]。 2. **特征交互**:使用卷积或全连接层融合空间和光谱权重,例如`interaction_conv`。 3. **端到端训练**:模块可嵌入CNN中,通过反向传播自动优化注意力分布。 --- #### **应用场景** - **高光谱图像分类**:增强特定地物在空间和光谱上的特征[^2]。 - **遥感目标检测**:抑制复杂背景,突出目标区域[^1]。 - **医学图像分割**:结合空间结构信息和多通道特征。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值