目标检测常用涨点方法:注意力机制小结(空间注意力、通道注意力、CBAM等)

1.通道注意力

  通道注意力(Channel Attention)是在通道维度上对输入数据进行学习,再对不同的通道分配相应的权重表示重要性,从而达到“分配注意力”的效果。SENet(Squeeze and Excitation networks) 是一个典型的使用通道注意力的网络结构,其中核心部分SE模块如下图所示。它使用了压缩和激励机制,在压缩阶段额外引出一个分支,该分支压缩全局空间信息学习到特征权重,此权重可以视作不同通道所分配的“注意力”,越重要的通道获得的权重越大,集中分配更多的资源训练学习。在激励阶段将这些特征权重和 主干分支特征进行元素相乘,提升对当前任务有用的特征图的通道,并抑制对当前任务用处不大的特征通道。
在这里插入图片描述
学习通道之间的相关性,自适应地重新校准通道地特征相应
SENet:
1.Squeeze:全局平均池化: C × H × W C \times H \times W C×H×W压缩为 C × 1 × 1 C \times 1 \times 1 C×1×1
2.Excitation: 两层全连接+sigmoid() 限制到 [0,1]
3.特征重标定:Exciation的结果作为权重乘到U上

在这里插入图片描述
code:

class ChannelAttention(nn.Module):def __init__(self, in_planes, ratio=16):super(ChannelAttention, self).__init__()self.avg_pool = nn.AdaptiveAvgPool2d(1)self.max_pool = nn.AdaptiveMaxPool2d(1)self.fc = nn.Sequential(nn.Linear(in_planes, in_planes // ratio),nn.ReLU(),nn.Linear(in_planes // ratio, in_planes))self.sigmoid = nn.Sigmoid()def forward(self, x):avg_out = self.fc(self.avg_pool(x).view(x.size(0), -1))max_out = self.fc(self.max_pool(x).view(x.size(0), -1))out = self.sigmoid(avg_out + max_out)return out

2.空间注意力(Spatial Attention)
在这里插入图片描述
  空间注意力对图片上不同的区域赋予不同的权重,致力于寻找图像中任务处理最关键的部分。空间注意力的实施主要有两个步骤,首先在特征不同的通道上进行平均池化或最大池化,对比不同通道之间的像素值,来获得该像素点不同通道上最重要的部分。第二个步骤是将生成后的特征描述作为神经网络中卷积层和激活层的输入,最终得到空间注意特征图。
code:

class SpatialAttention(nn.Module):def __init__(self, kernel_size=7):super(SpatialAttention, self).__init__()self.conv = nn.Conv2d(2, 1, kernel_size=kernel_size, padding=kernel_size//2)def forward(self, x):avg_out = torch.mean(x, dim=1, keepdim=True)max_out, _ = torch.max(x, dim=1, keepdim=True)out = torch.cat([avg_out, max_out], dim=1)out = self.conv(out)out = torch.sigmoid(out)return out

3.CBAM
在这里插入图片描述
  CBAM是一种用于增强卷积神经网络(CNN)性能的注意力机制模块。如上图所示,CBAM的主要目标是通过在CNN中引入绿色框所示的通道注意力和紫色框所示的空间注意力来提高模型的感知能力,从而在不增加网络复杂性的情况下改善性能。两个子模块的计算如下:

在这里插入图片描述

  其中,F为输出,G_max (∙)和G_avg (∙)表示最大池化和平均池化,mean(F)和max(F)表示在通道维度上采用平均函数和最大值函数。FRF是一个多层感知机。CBAM就是将通道注意力模块和空间注意力模块的输出特征逐元素相乘,得到最终的注意力增强特征。这个增强的特征将用作后续网络层的输入,以在保留关键信息的同时,抑制噪声和无关信息。

code:

class CBAM(nn.Module):def __init__(self, in_planes, ratio=16, kernel_size=7):super(CBAM, self).__init__()self.ca = ChannelAttention(in_planes, ratio)self.sa = SpatialAttention(kernel_size)def forward(self, x):out = x * self.ca(x)  # channel attentionout = out * self.sa(out)  # spatial attentionreturn out

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

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

相关文章

论基于架构的软件设计方法及应用(ABSD)

论基于架构的软件设计方法及应用(ABSD) 一、引言 随着信息技术的快速发展,软件系统的复杂性和规模性不断增加,传统的软件开发方法已难以满足现代软件项目的需求。基于架构的软件设计方法(Architecture-Based Softwar…

Swift宏的实现

上篇介绍了Swift宏的定义与生声明,本篇主要看看是Swift宏的具体实现。结合Swift中Codable协议,封装一个工具让类或者结构体自动实现Codable协议,并且添加一些协议中没有的功能。 关于Codable协议 Codable很好,但是有一些缺陷&…

编写Linux下共享库SDK

在Linux中,共享库(也称为动态链接库)是一种可以被多个程序共享的可执行代码和数据的集合。在编写共享库的SDK时,我们通常需要提供以下内容: 1. 头文件:包含了共享库提供的函数和数据结构的声明。这些头文件…

1688_item_search_shop接口技术详解

1688_item_search_shop接口技术详解 在B2B电商领域,当商家或消费者需要查找特定店铺的商品时,一个高效的店铺搜索接口显得尤为重要。1688平台作为中国领先的B2B电商平台,提供了item_search_shop接口,使得商家和消费者能够根据店铺…

一个c++的综合实例:log同步写入文件

1. 引言 功能 通过一个API函数把log写入到文件中,分4个log level 目录 ├── log ├── log.cpp ├── log.h ├── main.cpp └── Makefile 2.代码 文件:main.cpp #include "log.h"int main(int argc, char *argv[]) {Log::GetIns…

yaklang window安装 vscode运行得到“hello world”

资源来源:旅程伊始:Yak 语言环境安装与搭建环境 | Yak Program Language 安装yak语言非常简单,管理员权限打开命令行运行以下命令: powershell (new-object System.Net.WebClient).DownloadFile(https://yaklang.oss-cn-beijing…

1085 PAT单位排行(测试点5)

solution 测试点5:总分是在每个学生加权后再取整,所以用来存学生分数的变量要用浮点型学校排序: 若成绩不同,则按成绩降序若成绩相同,人数不同,则按成绩升序若成绩和人数都相同,则按单位名升序…

TS-字面量类型

字面量在代码中表示固定值。在TypeScript中,字面量包括字符串、数值、布尔值、长整型值、对象、数组、函数、正则表达式、null等,例如,以下都是字面量。 99.9 //数值字面量 true //布尔值字面量 "message" //字符…

理解GPT2:无监督学习的多任务语言模型

目录 一、背景与动机 二、卖点与创新 三、几个问题 四、具体是如何做的 1、更多、优质的数据,更大的模型 2、大数据量,大模型使得zero-shot成为可能 3、使用prompt做下游任务 五、一些资料 一、背景与动机 基于 Transformer 解码器的 GPT-1 证明…

NAS教程丨铁威马如何登录 SSH终端?

适用型号: 所有TNAS 型号 如您有特殊操作需要通过 SSH 终端登录 TNAS,请参照以下指引: (注意: 关于以下操作步骤中的"cd /"的指令,其作用是使当前 SSH/Telnet 连接的位置切换到根目录,以免造成对卷的占用.请不要遗漏它.) Windows…

数据分析的线上云端数据库搭建及Excel和Tableau连接

数据分析的线上云端数据库搭建及Excel和Tableau连接 SQL基础知识 线上SQL训练: SQlZOO: https://www.sqlzoo.net/wiki/SQL_Tutorial 牛客网SQL真题:https://www.nowcoder.com/ta/sql select,from,where, order by, limit, group by, having, substr(),…

【TensorFlow深度学习】图像旋转预测:一个无监督表征学习的实践案例

图像旋转预测:一个无监督表征学习的实践案例 理论背景方法概述实战代码结构导入必要的库定义数据增强构建模型训练流程主函数 结论 在机器学习领域,无监督表征学习正逐渐成为解锁大数据潜力的关键。其中,一种创新的方法——图像旋转预测&…

【SpringBoot】SpringBoot使用mail实现登录邮箱验证

📝个人主页:哈__ 期待您的关注 目录 一、前期准备 1 开启邮箱服务 2 SpringBoot导入依赖 3 创建application.yml配置文件 4 创建数据库文件 5 配置redis服务 二、验证邮件发送功能 三、注册功能实现邮箱验证 1 创建User实体类 2 创建UserPa…

HTTP 常见状态码

2xx: 代表请求已成功被服务器接收、理解、并接受。 3xx: 重定向,需要客户端采取进一步的操作才能完成请求 4xx: 客户端的请求错误 400 客户端错误403:服务器拒绝客户端的请求401:需要身份认证404:服务器找不到资源 5xx: 服务器在…

【INTEL(ALTERA)】Nios II手册缺少 alt_dcache_flush_no_writeback()

目录 说明 解决方法 说明 HAL函 alt_dcache_flush_no_writeback() 数是 该手册没有记录在 Nios II软件开发人员手册中。 该文档应记录在HAL中的"HAL API 函 数" API 参考 章节。 解决方法 请参阅以下函数描述: alt_dcache_flush_no_writeback&#…

DEBOPIE框架:打造最好的ChatGPT交易机器人

本文介绍了如何利用 DEBOPIE 框架并基于 ChatGPT 创建高效交易机器人,并强调了在使用 AI 辅助交易时需要注意的限制以及操作步骤。原文: Build the Best ChatGPT Trading Bots with my “DEBOPIE” Framework 如今有大量文章介绍如何通过 ChatGPT 帮助决定如何以及在…

linux高级编程(进程)(3)(exec族)

exec族: 用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支), 子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的 用户空间代码和数据完全被新程序替换&…

什么是jar包

jar包就是别人已经写好的一些类,然后将这些类进行打包,你可以将这些jar包引入你的项目中,然后就可以直接使用这些jar包中的类和属性以及方法。 JAR(Java ARchive)是将一系列文件合并到单个压缩文件里,就象…

仓库管理系统12--供应商设置

1、添加供应商窗体 2、布局控件UI <UserControl x:Class"West.StoreMgr.View.SupplierView"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc"http://…

为什么前端传了token,后端一直获取不到?一直报跨域错误?

这是我的前端代码 这是我的后端拦截器 那就需要了解一下 预检请求 对于非简单请求&#xff08;如PUT、DELETE或包含自定义HTTP头的请求&#xff09;&#xff0c;浏览器会先发送一个OPTIONS请求到目标服务器&#xff0c;询问是否允许该跨域请求。这个过程称为预检请求。 当opt…