当前位置: 首页 > article >正文

【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 BaseModule


class 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_factor



if __name__ == "__main__":
    # 如果GPU可用,将模块移动到 GPU
    device = 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=32
    block = CAA(32)
    print(block)
    block = block.to(device)
    # 前向传播
    output = block(x)
    print("输入:", x.shape)
    print("输出:", output.shape)

输出结果:

在这里插入图片描述


http://www.kler.cn/a/526493.html

相关文章:

  • zookeeper-3.8.3-基于ACL的访问控制
  • (Java版本)基于JAVA的网络通讯系统设计与实现-毕业设计
  • 《多阶段渐进式图像修复》学习笔记
  • 批量卸载fnm中已经安装的所有版本
  • 基于特征工程与转换方法的LightGBM资产预测研究
  • 58.界面参数传递给Command C#例子 WPF例子
  • 哈希表实现
  • 缓冲区和c库的简单实现
  • 性能优化2-删除无效引用
  • kobject、kset和ktype的关系
  • 论文阅读(七):贝叶斯因果表型网络解释遗传变异和生物学知识
  • python | OpenCV小记(一):cv2.imread(f) 读取图像操作(待更新)
  • 春晚舞台上的智能革命:中美人形机器人技术对比与发展
  • 日志2025.1.30
  • 【深度分析】DeepSeek 遭暴力破解,攻击 IP 均来自美国,造成影响有多大?有哪些好的防御措施?
  • Spring AI 与企业级应用架构的结合
  • 举例说明python单利模式的必要性
  • 数论问题80
  • floodfill算法(6题)
  • Node.js——模块化(模块的基本概念、模块化的规范、包与NPM)
  • 傅里叶分析之掐死教程
  • Zookeeper入门部署(单点与集群)
  • 《Chart.js 饼图:深度解析与最佳实践指南》
  • 【新春特辑】2025年1月科技浪潮中的AI最新时事与科技趋势
  • autosar bsw 的关键模块
  • Nuitka打包python脚本