欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 八卦 > 【Block总结】CAA捕获远程上下文信息,增强特征提取的能力|即插即用

【Block总结】CAA捕获远程上下文信息,增强特征提取的能力|即插即用

2025/2/6 20:43:39 来源:https://blog.csdn.net/hhhhhhhhhhwwwwwwwwww/article/details/145400685  浏览:    关键词:【Block总结】CAA捕获远程上下文信息,增强特征提取的能力|即插即用

论文信息

标题: Poly Kernel Inception Network for Remote Sensing Detection

作者: Xinhao Cai, Qiuxia Lai, Yuwei Wang, Wenguan Wang, Zeren Sun, Yazhou Yao

论文链接:https://arxiv.org/pdf/2403.06258

代码链接:https://github.com/NUST-Machine-Intelligence-Laboratory/PKINet
在这里插入图片描述

创新点

Poly Kernel Inception Network (PKINet) 的主要创新在于其设计的卷积结构,旨在解决遥感图像目标检测中的几个关键挑战:

  • 多尺度特征提取: PKINet采用无膨胀的多尺度卷积核,能够有效提取不同尺度的目标特征,避免了传统大核卷积带来的背景噪声问题。

  • 上下文锚定注意力机制: 引入了上下文锚定注意(CAA)模块,以捕获远程上下文信息,增强特征提取的能力。

  • 轻量化设计: 通过并行使用深度卷积和1×1卷积,PKINet在保持高性能的同时,显著降低了模型的复杂性和计算成本。

方法

PKINet的核心方法包括以下几个方面:

  1. 无膨胀多尺度卷积: 通过使用不同大小的卷积核,PKINet能够在不同的感受野中提取丰富的纹理特征,而不依赖于膨胀卷积。

  2. 上下文锚定注意力模块: CAA模块通过全局平均池化和一维卷积,捕获远程像素之间的关系,增强了中心特征的表达能力。

  3. 自适应特征融合: 通过通道维度的自适应融合,PKINet能够有效整合局部和全局上下文信息,从而提高目标检测的准确性。

上下文锚定注意力模块详解

上下文锚定注意力模块(Context Anchor Attention, CAA) 是在Poly Kernel Inception Network (PKINet)中引入的一个关键组件,旨在增强遥感图像目标检测的性能。CAA模块通过捕获远程上下文信息,帮助模型更好地理解和识别目标特征,尤其是在复杂背景和多尺度目标的情况下。
在这里插入图片描述

设计理念

  • 上下文信息建模: CAA模块的核心目标是通过建模输入特征图中的上下文信息,生成具有注意力系数的特征图,从而提升网络的特征表达能力。
  • 轻量化与高效性: 该模块采用轻量化的设计,旨在减少计算复杂度,同时保持高效的特征提取能力。

实现步骤

  1. 池化操作:

    • 对输入特征图进行7x7的平均池化(AvgPool2d),降低特征的空间分辨率,以获取更具全局感知能力的上下文信息。
  2. 1x1卷积层:

    • 在池化后,通过1x1卷积层对特征图进行线性变换,调整通道数并提升特征的非线性表达能力。
  3. 方向性卷积模块:

    • CAA模块采用两个方向的深度可分离卷积:
      • 水平卷积(h_conv): 使用1x11的卷积核聚合水平方向的上下文信息。
      • 垂直卷积(v_conv): 使用11x1的卷积核聚合垂直方向的上下文信息。
    • 这种分离的卷积方式有效减少了计算量,并有助于捕获不同方向的特征模式。
  4. 第二个1x1卷积层:

    • 将经过水平和垂直卷积后的特征进行再一次1x1卷积变换,以整合方向性特征并增强特征间的关联性。
  5. 激活函数:

    • 使用Sigmoid激活函数生成注意力系数特征图,范围在 [ 0 , 1 ] [0,1] [0,1]之间,表征每个通道和空间位置的权重。通过与原始输入特征图相乘,生成增强后的特征图。

上下文锚定注意力模块(CAA)通过有效建模上下文信息,显著增强了PKINet在遥感图像目标检测中的表现。其轻量化设计和高效的特征提取能力,使得CAA模块在处理复杂场景时展现出色的性能,成为PKINet的重要组成部分。

效果

在多个遥感目标检测基准数据集上进行的实验表明,PKINet在性能上优于传统方法,尤其是在处理目标尺度变化和复杂背景时表现突出。具体来说,PKINet在以下数据集上取得了显著的检测效果:

  • DOTA-v1.0
  • DOTA-v1.5
  • HRSC2016
  • DIOR-R

这些实验结果表明,PKINet不仅提高了检测精度,还在处理速度上也有良好的表现。

实验结果

实验中,PKINet在多个标准数据集上进行了广泛的评估,结果显示:

  • 检测精度: PKINet在各个数据集上均表现出色,尤其是在小目标和复杂背景下的检测能力显著提升。

  • 模型效率: 由于其轻量化设计,PKINet在计算资源的使用上更为高效,适合实际应用场景。

  • 对比分析: 与传统的目标检测模型相比,PKINet在多个指标上均有明显的优势,尤其是在处理多样化的上下文环境时。

总结

Poly Kernel Inception Network (PKINet) 通过创新的卷积结构和上下文注意力机制,成功应对了遥感图像目标检测中的多种挑战。其在特征提取和上下文信息捕获方面的优势,使得PKINet在多个基准数据集上取得了优异的性能,展示了其在实际应用中的潜力。未来的研究可以进一步探索PKINet在其他计算机视觉任务中的应用,以及如何进一步优化其结构以提升性能。

代码

from typing import Optional
import torch
import torch.nn as nn
from mmcv.cnn import ConvModule
from mmengine.model import BaseModuleclass GSiLU(BaseModule):"""Global Sigmoid-Gated Linear Unit, reproduced from paper <SIMPLE CNN FOR VISION>"""def __init__(self):super().__init__()self.adpool = nn.AdaptiveAvgPool2d(1)def forward(self, x):return x * torch.sigmoid(self.adpool(x))class CAA(BaseModule):"""Context Anchor Attention"""def __init__(self,channels: int,h_kernel_size: int = 11,v_kernel_size: int = 11,norm_cfg: Optional[dict] = dict(type='BN', momentum=0.03, eps=0.001),act_cfg: Optional[dict] = dict(type='SiLU'),init_cfg: Optional[dict] = None,):super().__init__(init_cfg)self.avg_pool = nn.AvgPool2d(7, 1, 3)self.conv1 = ConvModule(channels, channels, 1, 1, 0,norm_cfg=norm_cfg, act_cfg=act_cfg)self.h_conv = ConvModule(channels, channels, (1, h_kernel_size), 1,(0, h_kernel_size // 2), groups=channels,norm_cfg=None, act_cfg=None)self.v_conv = ConvModule(channels, channels, (v_kernel_size, 1), 1,(v_kernel_size // 2, 0), groups=channels,norm_cfg=None, act_cfg=None)self.conv2 = ConvModule(channels, channels, 1, 1, 0,norm_cfg=norm_cfg, act_cfg=act_cfg)self.act = nn.Sigmoid()def forward(self, x):attn_factor = self.act(self.conv2(self.v_conv(self.h_conv(self.conv1(self.avg_pool(x))))))return x*attn_factorif __name__ == "__main__":# 如果GPU可用,将模块移动到 GPUdevice = torch.device("cuda" if torch.cuda.is_available() else "cpu")# 输入张量 (batch_size, height, width,channels)x = torch.randn(1,32,40,40).to(device)# 初始化 HWD 模块dim=32block = CAA(32)print(block)block = block.to(device)# 前向传播output = block(x)print("输入:", x.shape)print("输出:", output.shape)

输出结果:

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com