即插即用显著位置注意力spab,涨点起飞

news2024/12/23 8:23:32

题目:Salient Positions based Attention Network for Image Classification

论文地址:https://arxiv.org/pdf/2106.04996

创新点

  • 提出了基于显著位置的注意力机制:论文提出了一种名为SPAblock的显著位置选择算法(SPS),通过在注意力计算中仅选择显著位置,减少了计算复杂度和内存需求,同时提取了对图像分类有用的上下文信息。这种方法有效减少了对非关键信息的处理,特别是在图像背景复杂的情况下能更好地避免噪声干扰。

  • 采用了通道维度的聚合:与传统的非局部模块相比,SPAblock在通道维度上对信息进行聚合,而不是空间维度。这种聚合方式在减少计算资源的同时,能够更有效地提取特征信息,提高图像分类的准确性。

  • 引入了适用于特征图的显著性度量:针对特征图的高维特性,论文设计了一种基于平方和的显著性度量方法,利用其近似高斯分布的特点,通过平方和来选择显著位置。这种方法适用于神经网络生成的高维特征图,而非传统的视觉图像。

  • 在低层网络中取得更好效果:实验表明,SPAblock在低层网络中表现更佳,尤其在CIFAR和Tiny-ImageNet等数据集上优于传统的非局部模块,并显著减少了内存使用。这种设计更适合于低层网络的特性,能够在低层网络上更好地进行上下文建模。

方法

整体结构

       这篇论文提出了SPAblock模型结构,其核心是基于显著位置的注意力机制(SPS算法),在输入特征中选择少量显著位置进行注意力计算,从而减少计算量和内存占用。模型首先生成查询和数值矩阵,通过SPS算法筛选显著位置,计算注意力矩阵后将数值矩阵的上下文信息聚合到输出特征中,并通过1×11 \times 1 卷积更新特征,最终与输入特征相加形成输出。该设计在图像分类任务中提升了精度,特别适合应用在网络的低层次。

  • 输入特征生成查询和数值矩阵:特征图首先经过两个二维卷积层,分别生成查询矩阵QQ 和数值矩阵VV。这样可以将输入特征图转化为适合注意力计算的形式。

  • 显著位置选择(Salient Positions Selection, SPS)算法:SPS算法根据查询矩阵的平方和选择出前kk 个显著位置。具体来说,SPS算法先计算查询矩阵各通道的平方和,并对每个通道进行求和,再根据该值选择显著位置。这一步骤减少了关注位置的数量,从而降低了计算复杂度。

  • 计算注意力矩阵:利用SPS选出的显著位置构建注意力矩阵AA,并将其进行softmax归一化。此过程相当于计算查询和键的相似度,但仅限于显著位置,节省了大量计算资源。

  • 特征聚合与更新:使用数值矩阵VV和注意力矩阵AA 进行矩阵乘法,将结果重新整形为与输入相同的尺寸。然后通过一个1×11 \times 1 卷积进行变换,并将结果与输入特征相加,以形成输出特征。

  • 逐层级应用的灵活性:SPAblock可以插入到ResNet等深度网络的不同层级,尤其是在低层级的效果尤为显著。这是因为低层特征图通常包含更多空间细节,而SPAblock能够有效地提取其中的显著信息。

即插即用模块作用

SPAblock 作为一个即插即用模块,主要适用于:

  • 图像分类:在分类任务中增强对重要特征的关注,忽略无关背景。

  • 目标检测:提高对目标区域的聚焦,减少背景噪声的影响。

  • 实时应用:在资源受限的环境中,如移动设备或嵌入式系统中,用于减少计算量和内存需求。

  • 深度网络的低层或中层:在特征图信息丰富的低层或中层加入SPAblock,可以更有效地提取关键细节。

消融实验结果

 该表比较了SPAblock在ResNet不同层级(从第1到第4层)加入时的性能。结果表明,在低层(尤其是第1层和第2层)加入SPAblock能显著提升分类精度,而在第4层的效果较弱。这说明SPAblock更适合用于低层次的网络结构,因为在低层特征图中显著区域的信息更为丰富,有助于提升模型性能。

该表比较了SPAblock在ResNet不同层级(从第1到第4层)加入时的性能。结果表明,在低层(尤其是第1层和第2层)加入SPAblock能显著提升分类精度,而在第4层的效果较弱。这说明SPAblock更适合用于低层次的网络结构,因为在低层特征图中显著区域的信息更为丰富,有助于提升模型性能。 

即插即用模块

import torch
from torch import nn




class SPABlock(nn.Module):
    def __init__(self, in_channels, k=784, adaptive = False, reduction=16, learning=False, mode='pow'):

        super(SPABlock, self).__init__()
        self.in_channels = in_channels
        self.reduction = reduction
        self.k = k
        self.adptive = adaptive
        self.reduction = reduction
        self.learing = learning
        if self.learing is True:
            self.k = nn.Parameter(torch.tensor(self.k))

        self.mode = mode
        self.device = 'cuda' if torch.cuda.is_available() else 'cpu'

    def forward(self, x, return_info=False):
        input_shape = x.shape
        if len(input_shape)==4:
            x = x.view(x.size(0), self.in_channels, -1)
            x = x.permute(0, 2, 1)
        batch_size,N = x.size(0),x.size(1)

        #(B, H*W,C)
        if self.mode == 'pow':
            x_pow = torch.pow(x,2)# (batchsize,H*W,channel)
            x_powsum = torch.sum(x_pow,dim=2)# (batchsize,H*W)

        if self.adptive is True:
            self.k = N//self.reduction
            if self.k == 0:
                self.k = 1

        outvalue, outindices = x_powsum.topk(k=self.k, dim=-1, largest=True, sorted=True)

        outindices = outindices.unsqueeze(2).expand(batch_size, self.k, x.size(2))
        out = x.gather(dim=1, index=outindices).to(self.device)

        if return_info is True:
            return out, outindices, outvalue
        else:
            return out

if __name__ == '__main__':
    block = SPABlock(in_channels=128)
    input = torch.rand(32, 784, 128)
    output = block(input)
    print(input.size())    print(output.size())

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2231749.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

R语言贝叶斯:INLA下的贝叶斯回归、生存分析、随机游走、广义可加模型、极端数据的贝叶斯分析

原文链接:R语言贝叶斯:INLA下的贝叶斯回归、生存分析、随机游走、广义可加模型、极端数据的贝叶斯分析https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247625527&idx8&snba4e50376befd94022519152609ee8d0&chksmfa8daad0cdfa23c6…

C++设计模式结构型模式———外观模式

文章目录 一、引言二、外观模式三、总结 一、引言 外观模式是一种结构型设计模式, 能为程序库、 框架或其他复杂类提供一个简单的接口。也就是说,该模式的目的用于隔离接口,换句话说,就是扮演中间层的角色,把本来结合…

物流公司出货单据模板下载软件 佳易王物流单管理系统操作使用教程

一、概述 【软件资源文件下载可以点文章最后信息卡片】 物流公司出货单据模板下载软件物流单管理系统操作使用教程 ‌软件功能‌: ‌记录管理‌:记录运费、垫付货款、代收货款、保险费等。‌打印模式‌:支持空白单、卷纸、印刷好的单子等多…

谷粒商城のsentinelzipkin

文章目录 前言一、Sentinel1、什么是Sentinel2、项目配置3、使用案例3.1、流控3.2、降级3.3、黑白名单设置 二、Zipkin1、什么是Zipkin2、项目配置3、整合案例 前言 本篇介绍Spring Cloud Ali的sentinel组件,用于对微服务的熔断降级,以及链路追踪zipkin的…

WPF+MVVM案例实战(十九)- 自定义字体图标按钮的封装与实现(EF类)

文章目录 1、案例效果1、按钮分类2、E类按钮功能实现与封装1.文件创建与代码实现2、样式引用与封装 3、F类按钮功能实现与封装1、文件创建与代码实现2、样式引用与封装 3、按钮案例演示1、页面实现与文件创建2、运行效果如下 4、源代码获取 1、案例效果 1、按钮分类 在WPF开发…

keepalived + nginx 实现网站高可用性(HA)

keepalive 一、keepalive简介二、实现步骤1. 环境准备2. 安装 Keepalived3. 配置 Keepalived 双机主备集群架构4. 配置 Nginx5. 启动Keepalived6. 测试高可用性7. 配置keepalived 双主热备集群架构 一、keepalive简介 目前互联网主流的实现WEB网站及数据库服务高可用软件包括&a…

破局智能制造:难点分析与对策

一、 智能制造过程中可能遇到难点: 1. --概念和技术繁多--: - 智能制造领域涉及众多概念和技术,如工业4.0、CPS、工业互联网等,让企业难以选择和应用。 2. --缺乏经验和成功案例--: - 企业在推进智能制造时缺乏经验,存在信息孤岛、自动化孤岛等问题,缺乏统一规划和系统推…

中汽测评观察 亲子出行健康为先,汽车健康用材成重要考量

在中国,亲子出行是驾车的主要场景之一。汽车不仅仅是一种便捷的交通工具,更是生活中的移动“第三空间”。在此背景下,汽车健康用材不仅是消费者关注的焦点问题,也成为汽车企业发力的重要方向。 对消费者而言,在家庭亲子…

阿里巴巴Seata分布式事务解决方案

Seata是什么 Seata是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。 当开发框架为spring boot或者SSM,都可以使用Seata进行开发。 分布式事务是什么 在大型架构中,一般会把一个应用系统&#x…

Cuebric:用AI重新定义3D创作的未来

一、简介 Cuebric 是一家成立于2022年夏天的好莱坞创新公司,致力于为电影、电视、游戏和时尚等行业提供先进的AI多模态SaaS平台。自2024年1月正式推出以来,Cuebric 已经在市场上获得了广泛的认可和积极的反馈。目前,该平台正处于1.0版本的beta测试阶段,已募集约50万美元的…

【Spring IoCDI】IoC容器,IoC注解,Bean的使用

【Spring核心思想:IoC】 spring是一个开源框架,支持广泛的应用场景,简而言之:Spring是包含了众多工具方法的IoC容器 【IoC】 IoC的意思是「控制反转」,也就是说Spring是一个“控制反转”的容器 通用程序的实现代码,类的创建顺序…

Android笔记(三十一):Deeplink失效问题

背景 通过deeplink启动应用之后,没关闭应用的情况下,再次使用deeplink会失效的问题,是系统bug导致的。此bug仅在某些设备(Nexus 5X)上重现,launchMode并且仅当应用程序最初通过深层链接启动并再次通过深层…

深入理解Transformer中的位置编码

1 位置编码的作用 由于注意力的作用机制,不论输入序列的顺序如何,输出结果都是一样的。 也就是丢失了位置信息。 但是对于语言模型, 我们都知道顺序是很重要的, 所以需要对输入序列额外注入位置信息。 2 位置编码方式 Transfor…

Ansible 部署应用

Ansible Ansible 是基于 Python 开发,集合了众多优秀运维工具的优点,实现了批量运行命令、部署程序、配置系统等功能的自动化运维管理工具。默认通过 SSH 协议进行远程命令执行或下发配置,无需部署任何客户端代理软件,从而使得自动…

根据问题现象、用户操作场景及日志打印去排查C++软件问题,必要时尝试去复现问题

目录 1、概述 2、通过现有信息无法定位问题时,则需要尝试去复现问题 3、非崩溃问题与崩溃问题的一般排查思路 3.1、非崩溃问题的排查思路 3.2、崩溃问题的排查思路 4、难以复现问题的可能原因总结 4.1、问题难以复现,可能和某种特殊的业务场景或操…

STL——string(2)

博客ID:LanFuRenC系列专栏:C语言重点部分 C语言注意点 C基础 Linux 数据结构 C注意点 今日好题 声明等级:黑色->蓝色->红色 欢迎新粉加入,会一直努力提供更优质的编程博客,希望大家三连支持一下啦 目录 1) …

Spark的集群环境部署

一、Standalone集群 1.1、架构 架构:普通分布式主从架构 主:Master:管理节点:管理从节点、接客、资源管理和任务 调度,等同于YARN中的ResourceManager 从:Worker:计算节点:负责利…

【大数据学习 | kafka】kafka的数据存储结构

以上是kafka的数据的存储方式。 这些数据可以在服务器集群上对应的文件夹中查看到。 [hexuanhadoop106 __consumer_offsets-0]$ ll 总用量 8 -rw-rw-r--. 1 hexuan hexuan 10485760 10月 28 22:21 00000000000000000000.index -rw-rw-r--. 1 hexuan hexuan 0 10月 28 …

【Leecode】Leecode刷题之路第40天之组合总和II

题目出处 40-组合总和II-题目出处 题目描述 个人解法 思路: todo代码示例:(Java) todo复杂度分析 todo官方解法 40-组合总和II-官方解法 方法1:回溯 思路: 代码示例:(Java&…

网络编程入门——网络原理初识

一、网络发展史 1.1 独立模式 即计算机之间相互独立,互不连通的。 1.2 网络互联 即将多台计算机连接在一起,完成数据共享。 数据共享本质是⽹络数据传输,即计算机之间通过⽹络来传输数据,也称为⽹络通信。 根据网络互联规模的不…