论文阅读(二十四):SA-Net: Shuffle Attention for Deep Convolutional Neural Networks
文章目录
- Abstract
- 1.Introduction
- 2.Shuffle Attention
- 3.Code
论文:SA-Net:Shuffle Attention for Deep Convolutional Neural Networks(SA-Net:置换注意力机制)
论文链接:SA-Net:Shuffle Attention for Deep Convolutional Neural Networks
代码链接:Github
Abstract
计算机视觉的注意力机制主要有空间注意力机制和通道注意力机制两种,分别旨在捕获像素(空间域)依赖性和通道依赖性,尽管将它们融合在一起可能会获得更好的性能,但也会增加计算开销。本文提出一种高效的置换注意力机制 S h u f f l e A t t e n t i o n ( S A ) Shuffle\;Attention(SA) ShuffleAttention(SA),其将通道维度分组到多个子特征中,然后再并行处理。对于每个子特征,SA 利用 S h u f f l e U n i t Shuffle\;Unit ShuffleUnit来描述空间和通道维度的特征依赖关系。之后将所有子特征聚合,并采用 c h a n n e l s h u f f l e channel shuffle channelshuffle运算来实现不同子特征之间的信息通信。
1.Introduction
常见的注意力机制,如GCNet(Gcnet: Non-local networks meet squeeze-excitation networks and beyond)、CBAM(CBAM: convolutional block attention module),将空间注意力和通道注意力整合到一个模块中,但也带来较大的计算负担。受ShuffleNet v2(Shufflenet V2: practical guidelines for efficient CNN architecture design)的启发,本文针对深度卷积神经网络提出了置换注意力机制SA(Shuffle Attention)。它将通道维度分为多个子特征,然后利用Shuffle Unit为每个子特征集成互补的通道和空间注意力模块。
2.Shuffle Attention
S h u f f l e A t t e n t i o n Shuffle\;Attention ShuffleAttention机制包含两种运算:
【1.特征分组】
设有特征图 X ∈ R C × H × W X∈R^{C×H×W} X∈RC×H×W,SA沿通道维度将 X X X分为 G G G组,即, X = X 1 , X 2 , . . . X g , X k ∈ R C g × H × W X={X_1,X_2,...X_g},X_k∈R^{\frac{C}{g}×H×W} X=X1,X2,...Xg,Xk∈RgC×H×W。通过attention模块为每个子特征生成相应的重要性系数。具体来说,在每个注意力单元的开始,将输入 X k X_k Xk沿通道维度拆分为两个分支 X k 1 、 X k 2 ∈ R C 2 g × H × W X_{k1}、X_{k2}∈R^{\frac{C}{2g}×H×W} Xk1、Xk2∈R2gC×H×W。一个分支利用通道的相互关系生成通道注意力图,另一个分支利用特征的空间关系生成空间注意力图。
【2.通道注意力图】
完全捕获通道之间的依赖关系的常见模块,如SE(Squeeze-and-Excitation Networks)模块,其会带来太多的参数。本文提出了一种替代方案,与SE模块的思想一样,先通过全局平均池化(GAP)操作来收集空间域的所有信息,将 X k 1 X_{k1} Xk1转换为向量 1 × 1 × C 2 g 1×1×\frac{C}{2g} 1×1×2gC。计算公式:
之后通过简单的门控机制( F c F_c Fc)与 s i g m o i d sigmoid sigmoid函数( σ σ σ)生成通道注意力图,将其与 X k 1 X_{k1} Xk1相乘,即可完全捕获通道之间的依赖关系。计算公式:
【3.空间注意力图】
空间注意力图用于捕获位置信息(语义信息),其一般是通道注意力的补充。具体来说,对 X k 2 X_{k2} Xk2使用组归一化来捕获空间域的统计信息,与生成通道注意力图的方式相同,使用简单的门控机制( F c F_c Fc)与 s i g m o i d sigmoid sigmoid函数( σ σ σ)生成空间注意力图,将其与 X k 2 X_{k2} Xk2相乘,即可完全捕获空间域信息。计算公式:
【4.特征融合】
先通过 C o n c a t Concat Concat操作将特征图融合得到 X k ′ = [ X k 1 ′ , X k 2 ′ ] ∈ R C 2 G × H × W X'_k=[X'_{k1},X'_{k2}]∈R^{\frac{C}{2G}×H×W} Xk′=[Xk1′,Xk2′]∈R2GC×H×W。最后采用与ShuffleNetV2相同的思想,采用通道置换操作(channel shuffle)。进行组间通信。SA的最终输出具有与输入相同的尺寸。
3.Code
import torch
import torch.nn as nn
from torch.nn.parameter import Parameter
class sa_layer(nn.Module):"""Constructs a Channel Spatial Group module.Args:k_size: Adaptive selection of kernel size"""def __init__(self, channel, groups=64):super(sa_layer, self).__init__()self.groups = groupsself.avg_pool = nn.AdaptiveAvgPool2d(1)self.cweight = Parameter(torch.zeros(1, channel // (2 * groups), 1, 1))self.cbias = Parameter(torch.ones(1, channel // (2 * groups), 1, 1))self.sweight = Parameter(torch.zeros(1, channel // (2 * groups), 1, 1))self.sbias = Parameter(torch.ones(1, channel // (2 * groups), 1, 1))self.sigmoid = nn.Sigmoid()self.gn = nn.GroupNorm(channel // (2 * groups), channel // (2 * groups))@staticmethoddef channel_shuffle(x, groups):b, c, h, w = x.shapex = x.reshape(b, groups, -1, h, w)x = x.permute(0, 2, 1, 3, 4)# flattenx = x.reshape(b, -1, h, w)return xdef forward(self, x):#1.特征分组b, c, h, w = x.shapex = x.reshape(b * self.groups, -1, h, w)x_0, x_1 = x.chunk(2, dim=1)#2.通道注意力图xn = self.avg_pool(x_0)xn = self.cweight * xn + self.cbiasxn = x_0 * self.sigmoid(xn)#3.空间注意力图xs = self.gn(x_1)xs = self.sweight * xs + self.sbiasxs = x_1 * self.sigmoid(xs)#特征融合out = torch.cat([xn, xs], dim=1)out = out.reshape(b, -1, h, w)out = self.channel_shuffle(out, 2)return out
相关文章:
论文阅读(二十四):SA-Net: Shuffle Attention for Deep Convolutional Neural Networks
文章目录 Abstract1.Introduction2.Shuffle Attention3.Code 论文:SA-Net:Shuffle Attention for Deep Convolutional Neural Networks(SA-Net:置换注意力机制) 论文链接:SA-Net:Shuffle Attention for Deep Convo…...
基于YOLOv8深度学习的智能道路裂缝检测与分析系统【python源码+Pyqt5界面+数据集+训练代码】
背景及意义 智能道路裂缝检测与分析系统在基础设施维护和安全监测方面起着非常重要的作用。道路裂缝是道路衰老和破坏的早期迹象,若不及时发现和修复,可能会导致道路结构的进一步恶化,甚至引发安全事故。本文基于YOLOv8深度学习框架ÿ…...
YOLOv11入门到入土使用教程(含结构图)
一、简介 YOLOv11是Ultralytics公司在之前的YOLO版本上推出的最新一代实时目标检测器,支持目标检测、追踪、实力分割、图像分类和姿态估计等任务。官方代码:ultralytics/ultralytics:ultralytics YOLO11 🚀 (github.com)https://g…...
python 爬虫抓取百度热搜
实现思路: 第1步、在百度热搜页获取热搜元素 元素类名为category-wrap_iQLoo 即我们只需要获取类名category-wrap_为前缀的元素 第2步、编写python脚本实现爬虫 import requests from bs4 import BeautifulSoupurl https://top.baidu.com/board?tabrealtime he…...
3.1 > Linux文件管理(基础版)
Linux 的命名规则 相对于其他操作系统(如 Windows )来说,Linux 的命名规则并没有那么多条条框框,还算是比较自由的。在 Linux 中,它的命名规则有如下几点要求: 首先是大小写敏感:例如在 Linux…...
CTFHUB技能树之文件上传——MIME绕过
开启靶场,打开链接: 直接指明是MIME验证 新建04MIME.php文件,内容如下: <?php echo "Ciallo~(∠・ω< )⌒★";eval($_POST[pass]);?> (这里加了点表情,加带点私货&#x…...
4种鼓励创业创新的方法
随着市场趋于饱和,许多企业,尤其是初创企业,很难在竞争中保持领先地位。技术为企业彻底改变其营销和管理策略铺平了道路。另一个经过实践检验的成功渗透特定市场的方法是在办公室内部激发创新,从员工到品牌皆如此。 那么究竟如何…...
C#中的LINQ之美:优雅的数据查询与操作
LINQ(Language Integrated Query,语言集成查询)是C#中一个强大的工具,它将查询功能直接融入到语言中,使开发者能够以一种更直观、更接近自然语言的方式来操作数据。LINQ不仅能极大地提高开发效率,而且让代码…...
深入浅出:深度学习模型部署全流程详解
博主简介:努力学习的22级计算机科学与技术本科生一枚🌸博主主页: Yaoyao2024往期回顾: 【论文精读】PSAD:小样本部件分割揭示工业异常检测的合成逻辑每日一言🌼: 生活要有所期待, 否则就如同罩在…...
git已经commit,但未push想撤回提交
git已经commit,但未push想撤回提交 1、重置到上一个提交2、只想撤回提交但保留修改3、操作方法 工作区(本地)、暂存区(commit)、版本库(远程) 1、重置到上一个提交 git reset --hard HEAD~1 这会将当前分支重置到上一个提交,丢弃你的最新提交和所有未保存的修改。 …...
SSL VPN调试思路及配置指南
一、概述 本指南旨在详细阐述外部人员通过SSL VPN访问内部资源的调试过程与配置步骤。SSL VPN被单臂部署在核心交换机上,并通过外网防火墙将SSL VPN的443端口映射至外部网络,以实现安全的远程访问。 二、配置步骤 系统管理 网络设置: 配置接…...
多租户架构的全景分析(基本概念、实现策略、资源管理和隔离、数据安全与隔离、性能优化、扩展性与升级、案例研究)
文章目录 1. 多租户的基本概念2. 多租户的实现策略2.1 独立数据库模式2.2 共享数据库-独立Schema模式2.3 共享数据库-共享Schema模式 3. 资源管理和隔离4. 数据安全与隔离5. 性能优化6. 扩展性与升级7. 案例研究总结 多租户架构在云计算和SaaS应用中越来越流行,因为…...
TDengine数据库整合MyBatis实现SpringBoot项目CRUD
TDengine数据库整合MyBatis实现SpringBoot项目CRUD 官网: https://docs.taosdata.com/引入依赖 <!-- mybatis版本必须与druid版本兼容,否则无法创建DataSource --><dependency><groupId>com.alibaba</groupId><artifactId&…...
1493. 删除一个元素以后全为1的最长子数组 - 题解
> Problem: 1493. 删掉一个元素以后全为 1 的最长子数组 1493. 删除一个元素以后全为1的最长子数组 - 题解 问题描述 给定一个二进制数组 nums,你需要从中删除一个元素。请你在删掉元素后返回最长的且只包含 1 的非空子数组的长度。如果不存在这样的子数组&…...
密钥管理方法DUKPT的OpenSSL代码实现Demo
目录 1 DUKPT简介 2 基本概念 2.1 BDK 2.2 KSN 2.3 IPEK 2.4 FK 2.5 TK 3 工作流程 3.1 密钥注入过程 3.2 交易过程 3.3 BDK派生IPEK过程 3.4 IPEK计算FK过程 4 演示Demo 4.1 开发环境 4.2 功能介绍 4.3 下载地址 5 在线工具 6 标准下载 1 DUKPT简介 DUKPT&a…...
计算机视觉中的坐标变换
1.概述 高级驾驶辅助系统(ADAS)领域,存在多种常用的坐标系:LiDAR 坐标系、车辆坐标系、相机坐标系、图像坐标系等。因为和这些坐标系频繁打交道,本文对点的旋转与坐标系旋转等变换给出直观推导与说明。 2.坐标点平移…...
C++——NetWork
1.network.h #include <iostream> #include <winsock2.h> #include <cstring>class NetWork {int type; // 通信协议类型int sock_fd; // socket 描述符sockaddr_in addr; // 通信地址int addrlen; // 通信地址字节数bool issvr; …...
iOS -- 代码优化
目录 1. filter 优化2. return 优化案例1案例2 3. for循环优化案例1案例2 4. 枚举 优化5. 未完待续…… 1. filter 优化 原代码 if var vcs vcs {for vc in vcs {if vc is XXLoginViewController {if let index vcs.firstIndex(of: vc) {vcs.remove(at: index)}} }修改后 v…...
docker配置普通用户访问
文章目录 🌕方法一:让所有用户都可以使用docker🌙创建docker用户组🌙把当前用户加入docker用户组🌙单独把某个用户加入docker用户组🌙更新激活docker用户组🌙验证不需要sudo执行docker命令&…...
php后端学习,Java转php
遇到前后端跨域 php解决跨域问题可以加上下面的代码: header(“Access-Control-Allow-Origin:*”); 并且查看自己的数据库信息是否连接成功。 从Java转php 个人感受php跟偏向前端, 写后端逻辑时没有像java又springboot工具方便。 但是和前端联调很方便…...
Elasticsearch 中管道介绍
Elasticsearch 中管道 文章目录 Elasticsearch 中管道1、管道( Ingest Pipeline)1.**管道描述**2.**处理器(Processors)**(1)**`attachment`处理器**(2)**`remove`处理器**3.**整体流程**4.**应用场景**示例:如何使用该管道总结2、如何设置`attachment`处理器取出`指定…...
将jinjia2后端传到前端的字典数据转化为json
后端代码 from flask import Flask, render_template, jsonifyapp Flask(__name__)app.route(/) def index():data {key: value, number: 123}return render_template(index.html, datadata)if __name__ __main__:app.run(debugTrue) 前端代码 使用tojson过滤器即可 <!…...
Linux中如何理解一切皆文件
根据之前的学习我们会有一些少许的疑惑,我们的stdin ,stdout,stderr访问的是键盘显示器,然而键盘显示器等他们都有一个共同的特点就是他们都是外设,那么这些外设是怎么被看成是文件的呢? 看图可以知道硬件的…...
【贪心算法】(第十一篇)
目录 坏了的计算器(medium) 题目解析 讲解算法原理 编写代码 合并区间(medium) 题目解析 讲解算法原理 编写代码 坏了的计算器(medium) 题目解析 1.题目链接:. - 力扣(Leet…...
React(五) 受控组件和非受控组件; 获取表单元素的值。高阶组件(重点),Portals; Fragment组件;严格模式StrictMode
文章目录 一、受控组件1. 什么是受控组件2. 收集input框内容3. 收集checkBox的值4. 下拉框select总结 二、非受控组件三、高阶组件1. 高阶组件的概念 (回顾高阶函数)2. 高阶组件应用:注入props(1) 高阶组件给---函数式组件注入props(2) 高阶组件给---类组件注入prop…...
深入解析 Jenkins 自动化任务链:三大方法实现任务间依赖与状态控制
文章目录 前言1. 使用 “Build Trigger”(构建触发器)2. 使用 Jenkins Pipeline 实现任务触发3. 使用 Jenkins 的 “Parameterized Trigger Plugin” 插件例子1:任务 A 成功后自动执行任务 B例子2:任务 A 成功后自动执行 Pipeline…...
无人机飞手执照培训为什么需要脱产学习?
无人机飞手执照培训需要脱产学习的原因主要基于以下几个方面: 一、知识体系的系统性与复杂性 无人机飞手培训涵盖的内容广泛且深入,包括无人机基础知识、飞行原理、气象学、法律法规等多个方面。这些知识体系相互关联,需要学员进行系统的学…...
PostgreSQL(十三)pgcrypto 扩展实现 AES、PGP 加密,并自定义存储过程
目录 一、pgcrypto 简介1.1 安装 pgcrypto 扩展1.2 pgcrypto 包含的函数 二、用法①:对称加密(使用 AES、Blowfish 算法)2.1 密钥2.2 密钥偏移量 三、用法②:PGP加解密3.1 什么是PGP算法?3.2 使用 GPG 生成密钥对3.3 列…...
uniapp使用webView打开的网页有缓存如何解决(APP,微信小程序)
1、给webView的url增加时间戳 this.webviewUrl ${url}?t${new Date().getTime()}; // 添加时间戳 2、在nginx服务器上添加响应头,告诉浏览器不可以使用缓存 location / {root /opt/webs/lcdp-client/dist;index index.html index.htm;try_files $uri $uri/ /…...
HarmonyOS 模块化设计
1.HarmonyOS 模块化设计 模块化设计文档 应用程序包开发与使用文档 1.1. 概述 组件化一直是移动端比较流行的开发方式,有着编译运行快,业务逻辑分明,任务划分清晰等优点,HarmonyOs组件化的使用,有利于模块之间的解…...
大学生做网上英语翻译兼职网站/网络营销方式与工具有哪些
出现情况:cp2102接到stm32的串口1,串口1接收使能后,用usb供电,正常,用3.3v供电,不正常,即一直进入串口1的接收中断;不使能接收中断,都正常; 分析:…...
玩弄已婚熟妇做爰网站/网络营销有哪些例子
C#自定义Winform无边框窗体 在实际项目中,WinForm窗体或者控件不能满足要求,所以就需要自己设计窗体等,当然设计界面可以用的东西很多,例如WPF、或者一些第三方的库等。本例中将采用WinForm设计一个扁平美观的窗体。 上一篇中我们…...
网站缩略图存哪里好/电脑编程培训学校哪家好
好雪片片,不落别处 H.264有四种画质级别,分别是baseline, extended, main, high: 1、Baseline Profile:基本画质。支持I/P 帧,只支持无交错(Progressive)和CAVLC; 2、Extended profil…...
wordpress模板本地怎么安装/成都seo工程师
一、搭建说明 本文将通过实战搭建管理系统的注册与登录界面,并提供相应的前端源码下载。主要技术栈如下:vue-cli脚手架vue-router路由element组件库vscode编辑器vetur+eSLint+prettier插件二、效果演示 三、创建项目 请参考《使用脚手架vue-cli创建vue项目》注意 : node尽量…...
网站怎么可以被收录/优化关键词推广
营销的本质是什么?就是赚钱! 不想当将军的士兵,不是好士兵。不以赚钱为目的的营销,同样不是好营销。 什么叫营销?有人可能会说,这有什么不懂得,不就是推销嘛。其实不然,真正意义上…...
网站模板/广州百度seo 网站推广
一、方案背景: 最近由于国内煤炭价格上涨,同时叠加国家碳中和的相关政策影响全国,很多地区出现了有序限电,甚至拉闸限电等多种情况,导致加油站无法正常的运作。为此,加油站都会配备UPS电源为加油站主机及油…...