【TGRS 2026即插即用模块】PSAA并行自感知注意力,适合红外小目标检测、遥感图像处理、医学图像重建、遥感图像分割、目标分割、目标检测、图像增强等CV任务通用,涨点起飞!
2026/6/12 7:39:56 网站建设 项目流程

一、论文信息

PSAA模块通过并行提取局部和全局特征、动态融合及残差增强,在红外小目标检测中兼顾细节保留和语义理解,实现了性能和效率的平衡。

本文目录

一、论文信息

二、论文摘要概况

三、PSAA并行自感知注意力结构图

四、PSAA模块的作用

五、PSAA模块的原理

六、PSAA模块的优势

七、即插即用模块代码

论文题目:Context-Aware and Semantic-Guided Adaptive Filtering Network for InfraredSmall Target Detection

中文题目:基于上下文感知与语义引导的红外小目标检测自适应滤波网络

所属单位:重庆大学

二、论文摘要概况

红外小目标检测(ISTD)是从红外图像中识别微小目标的关键任务。尽管现有的混合卷积神经网络(CNN)-Transformer方法已实现优异的分割性能,但仍存在若干挑战:首先,自注意力机制对细微局部变化不敏感且计算成本高昂;其次,在特征融合阶段这些方法未能充分挖掘浅层特征所蕴含的关键信息,导致在目标与背景高度相似的场景中难以高效准确地区分二者。为解决这些问题,本文提出CSAFNet以提升目标与背景的区分能力。具体而言,我们引入了并行自感知注意力(PSAA),该机制利用物理先验知识捕捉全局上下文,并结合小波变换增强局部细节,实现局部与全局特征的有效融合;鉴于浅层特征对精确定位和精细分割的重要性,我们在特征融合阶段设计了跨语义自适应滤波模块(CAFM),深度挖掘浅层特征中的关键信息并提升目标表征的相对显著性;此外,我们还提出动态多尺度空间金字塔(DMSSP)模块以提高边缘精度并提升分割准确性。针对最常用的两大 ISTD 数据集 NUAA - SIRST 和 IRSTD -1K开展的大量实验表明,CSAFNet的表现优于其他最先进的方法。

图1. 所提出的CSAFNet架构概述。 PSAA 是编码器和解码器的核心组件; CFAM 被引入跳跃连接层以提升特征融合效果;在网络瓶颈层中, DMSSP 模块用于优化目标与背景信息的提取。

三、PSAA并行自感知注意力结构图

图2. 所提 PSAA 的示意图。该方案包含一个用于增强局部细节的 WDE 分支和一个用于建模全局特征的CAA分支。

四、PSAA模块的作用

1. 增强红外小目标特征感知能力
PSAA模块能够同时捕获红外小目标的局部细节信息和全局语义信息,使模型在复杂背景下更容易区分目标与背景,提高小目标的显著性和可检测性。

2. 提升目标定位精度
通过并行处理局部和全局特征,PSAA可以在保持全局上下文信息的同时,精细化刻画小目标边缘和结构,从而提升红外小目标的定位精度和边界完整性。

3. 减少背景干扰
PSAA能够通过特征权重调节和注意力机制抑制背景区域的干扰,使网络更加专注于潜在目标区域,降低误检率和漏检率。

五、PSAA模块的原理

1. 双分支结构设计
PSAA由两条并行分支组成:波let动态增强分支(WDE)用于捕捉局部高频细节特征;上下文感知增强分支(CAA)用于建模全局语义信息。两条分支分别处理输入特征后再进行融合,实现局部与全局信息的协同建模。

2. 局部特征增强
WDE分支通过小波变换提取局部高频信息,增强小目标的纹理特征,使模型能够保留目标的微小细节并增强边缘响应。

3. 全局特征增强
CAA分支利用图像全局上下文和SimAM神经元能量理论,评估每个神经元的重要性,从而捕获潜在目标区域的全局语义信息。

4. 特征融合与残差连接
两条分支输出通过Squeeze-and-Excitation模块和卷积操作进行加权融合,并加入残差连接,确保局部与全局信息充分交互,同时保持训练稳定性和特征一致性。

六、PSAA模块的优势

1. 局部与全局信息互补
PSAA通过WDE和CAA双分支结构同时关注局部纹理和全局语义,使特征表达更全面,提高小目标在复杂背景下的可区分性。

2. 高效的特征表达
模块利用注意力机制和残差连接增强特征表达能力,同时不显著增加计算复杂度,适合实时或高分辨率红外小目标检测任务。

3. 提升检测性能
通过局部细节增强和全局上下文整合,PSAA能够显著降低漏检和误检,改善复杂背景下红外小目标的检测精度。

4. 可扩展性强
该模块适用于其他需要同时捕获局部纹理与全局语义信息的计算机视觉任务,例如小目标语义分割、低对比度目标检测或微小目标增强任务。

表 I IRSTD-1K 和 NUAA-SIRST 与当前最先进方法的比较。性能最佳的方法以粗体标示。

图6. 使用不同方法对 NUAA - SIRST 和 IRSTD -1K数据集代表性图像检测结果的可视化对比。图中红色方框表示正确检测结果,绿色方框表示漏检结果,黄色方框表示误报结果。

七、即插即用模块代码

import torch import torch.nn as nn import torch.nn.functional as F from pytorch_wavelets import DWTForward class simam_imt(torch.nn.Module): def __init__(self, e_lambda=1e-4): super(simam_imt, self).__init__() self.activaton = nn.Sigmoid() self.e_lambda = e_lambda def __repr__(self): s = self.__class__.__name__ + '(' s += ('lambda=%f)' % self.e_lambda) return s @staticmethod def get_module_name(): return "simam" def forward(self, x): b, c, h, w = x.size() n = w * h - 1 x_minus_mu_square = (x - x.mean(dim=[2, 3], keepdim=True)).pow(2) y = x_minus_mu_square / (4 * (x_minus_mu_square.sum(dim=[2, 3], keepdim=True) / n + self.e_lambda)) + 0.5 return y class Down_wt(nn.Module): def __init__(self, in_ch): super(Down_wt, self).__init__() self.wt = DWTForward(J=1, mode='zero', wave='haar') self.conv_bn_relu = nn.Conv2d(in_ch, in_ch*2, kernel_size=1, stride=1) def forward(self, x):#1 32 256 256 size = x.shape[2:] yL, yH = self.wt(x) y_HL = yH[0][:, :, 0, ::] y_LH = yH[0][:, :, 1, ::] y_HH = yH[0][:, :, 2, ::] x =y_HL+ y_LH + y_HH#1 96 128 128 # 使用最邻近插值上采样 x = F.interpolate(x, size=size, mode='nearest')#1 96 256 256 x = self.conv_bn_relu(x) return x class WDE(nn.Module): def __init__(self, dim): super().__init__() self.dwconv3x3 = nn.Conv2d(dim, dim, kernel_size=3, padding=3 // 2, groups=dim) self.dwconv3x3_2 = nn.Conv2d(dim, dim, kernel_size=3, padding=1, groups=dim) self.conv_0 = Down_wt(in_ch=dim) self.act = nn.GELU() self.conv_1 = nn.Conv2d(dim*2, dim, 1, 1, 0) def forward(self, x):#1 32 256 256 v = self.dwconv3x3(x) attn = self.dwconv3x3_2(x) attn = self.conv_0(attn) attn = self.act(attn)#1 96 256 256 attn = self.conv_1(attn)#1 32 256 256 attn = torch.tanh(attn) res = attn.mul(v) return res class CAA(nn.Module): def __init__(self, dim=36, scale=8): super(CAA, self).__init__() self.down_scale = scale self.conv1_0 = nn.Conv2d(dim, dim * 2, 1, 1, 0) self.conv1_1 = nn.Conv2d(dim, dim, 1, 1, 0) self.conv1_2 = nn.Conv2d(dim, dim, 1, 1, 0) self.alpha = nn.Parameter(torch.ones((1, dim, 1, 1))) self.belt = nn.Parameter(torch.zeros((1, dim, 1, 1))) self.gelu = nn.GELU() self.WDE = WDE(dim) self.dwconv = nn.Conv2d(dim, dim, 3, 1, 1, groups=dim) self.simam_imt = simam_imt() self.ca = nn.Sequential( nn.AdaptiveAvgPool2d(1), nn.Conv2d(dim, dim // 4, kernel_size=1), nn.GELU(), nn.Conv2d(dim // 4, dim, kernel_size=1), nn.Sigmoid() ) def forward(self, f): _, _, h, w = f.shape y, x = self.conv1_0(f).chunk(2, dim=1) # 1 32 256 256 e_t = self.simam_imt(x) e_l = self.dwconv(F.adaptive_avg_pool2d(x, (h // self.down_scale, w // self.down_scale))) x_caa = F.interpolate(self.gelu(self.conv1_1(e_l * self.alpha)), size=(h, w), mode='nearest') + e_t * self.belt x_l = x * x_caa y_d = self.WDE(y) out = x_l + y_d out = self.ca(out) * out out = self.conv1_2(out) return out class PSAA(nn.Module): def __init__(self, in_dim, out_dim, scale): super(PSAA, self).__init__() self.LG_att = CAA(in_dim, scale) self.Conv3 = nn.Sequential( nn.Conv2d(in_channels=in_dim, out_channels=out_dim, kernel_size=3, stride=1, padding=1), nn.BatchNorm2d(out_dim), nn.ReLU(inplace=True) ) self.Conv1 = nn.Sequential( nn.Conv2d(in_dim, out_dim, kernel_size=1), nn.BatchNorm2d(out_dim), nn.ReLU(inplace=True) ) def forward(self, x): x_f = x + self.LG_att(x) out = self.Conv3(x_f) + self.Conv1(x_f) return out if __name__ == "__main__": input = torch.randn(2, 32, 128, 128) model = PSAA(32, 32, 8) print(model) print("CSDN:AI魔改博士") output = model(input) print('PSAA input_size:', input.size()) print('PSAA output_size:', output.size())

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询