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

YOLOv9有效提点|加入SGE、Ge、Global Context、GAM等几十种注意力机制(四)

 


专栏介绍:YOLOv9改进系列 | 包含深度学习最新创新,主力高效涨点!!!


一、本文介绍

 本文只有代码及注意力模块简介,YOLOv9中的添加教程:可以看这篇文章。

YOLOv9有效提点|加入SE、CBAM、ECA、SimAM等几十种注意力机制(一)


SGE:《Spatial Group-wise Enhance: Improving Semantic Feature Learning in Convolutional Networks

        SGE是一种轻量级的神经网络模块,它可以调整卷积神经网络中每个子特征的重要性,从而提高图像识别任务的性能。SGE通过生成注意力因子来调整每个子特征的强度,有效抑制噪声。与流行的CNN主干网络集成时,SGE可以显著提高图像识别性能。。

import numpy as np
import torch
from torch import nn
from torch.nn import initclass SpatialGroupEnhance(nn.Module):def __init__(self, groups=8):super().__init__()self.groups=groupsself.avg_pool = nn.AdaptiveAvgPool2d(1)self.weight=nn.Parameter(torch.zeros(1,groups,1,1))self.bias=nn.Parameter(torch.zeros(1,groups,1,1))self.sig=nn.Sigmoid()self.init_weights()def init_weights(self):for m in self.modules():if isinstance(m, nn.Conv2d):init.kaiming_normal_(m.weight, mode='fan_out')if m.bias is not None:init.constant_(m.bias, 0)elif isinstance(m, nn.BatchNorm2d):init.constant_(m.weight, 1)init.constant_(m.bias, 0)elif isinstance(m, nn.Linear):init.normal_(m.weight, std=0.001)if m.bias is not None:init.constant_(m.bias, 0)def forward(self, x):b, c, h,w=x.shapex=x.view(b*self.groups,-1,h,w) #bs*g,dim//g,h,wxn=x*self.avg_pool(x) #bs*g,dim//g,h,wxn=xn.sum(dim=1,keepdim=True) #bs*g,1,h,wt=xn.view(b*self.groups,-1) #bs*g,h*wt=t-t.mean(dim=1,keepdim=True) #bs*g,h*wstd=t.std(dim=1,keepdim=True)+1e-5t=t/std #bs*g,h*wt=t.view(b,self.groups,h,w) #bs,g,h*wt=t*self.weight+self.bias #bs,g,h*wt=t.view(b*self.groups,1,h,w) #bs*g,1,h*wx=x*self.sig(t)x=x.view(b,c,h,w)return x 

Ge《Gather-Excite: Exploiting Feature Context in Convolutional Neural Networks》

        Ge通过引入两个操作符“收集”和“激发”,来改善卷积神经网络(CNN)对上下文的利用。这两个操作符可以有效地从大范围空间中聚合响应,并将信息重新分配给本地特征。这个方法简单且轻量级,可以轻松集成到现有的CNN架构中,而且只增加了很少的参数和计算复杂性。此外,作者还提出了一种参数化的收集-激发操作符对,进一步提高了性能,并将其与最近引入的挤压和激励网络进行了关联。。

 这个暂时没调试,代码地址:https://github.com/hujie-frank/GENet


《Global Context Networks》

        全局上下文建模注意力机制。论文发现非局部网络对全局上下文的建模对于不同查询位置是相同的。因此,作者创建了一个更简单的网络,只考虑查询无关的全局上下文,减少了计算量。作者还将非局部块的一个转换函数替换为两个瓶颈函数,进一步减少了参数数量。这个新网络叫做全局上下文网络(GCNet),它在各种识别任务的主要基准上表现得比非局部网络更好。。

暂没调试,代码地址:https://github.com/xvjiarui/GCNet


Global Attention Mechanism: Retain Information to Enhance Channel-Spatial Interactions

         保留信息以增强通道-空间交互注意力机制-GAM是一种全局注意力机制,通过减少信息损失和增强全局交互表示来提高深度神经网络的性能。作者引入了3D排列和多层感知器来进行通道注意力,同时引入卷积空间注意力子模块。在CIFAR-100和ImageNet-1K图像分类任务上的评估表明,该方法优于几种最近的注意力机制,包括ResNet和轻量级的MobileNet。。

import torch.nn as nn
import torchclass GAM_Attention(nn.Module):def __init__(self, in_channels, rate=4):super(GAM_Attention, self).__init__()self.channel_attention = nn.Sequential(nn.Linear(in_channels, int(in_channels / rate)),nn.ReLU(inplace=True),nn.Linear(int(in_channels / rate), in_channels))self.spatial_attention = nn.Sequential(nn.Conv2d(in_channels, int(in_channels / rate), kernel_size=7, padding=3),nn.BatchNorm2d(int(in_channels / rate)),nn.ReLU(inplace=True),nn.Conv2d(int(in_channels / rate), in_channels, kernel_size=7, padding=3),nn.BatchNorm2d(in_channels))def forward(self, x):b, c, h, w = x.shapex_permute = x.permute(0, 2, 3, 1).view(b, -1, c)x_att_permute = self.channel_attention(x_permute).view(b, h, w, c)x_channel_att = x_att_permute.permute(0, 3, 1, 2).sigmoid()x = x * x_channel_attx_spatial_att = self.spatial_attention(x).sigmoid()out = x * x_spatial_attreturn out

相关文章:

  • STM32单片机示例:ETH_DP83848_DHCP_NonOS_Poll_F407
  • 11:日志分析系统ELK|Elasticsearch|kibana
  • Ubuntu将c++编译成.so文件并测试
  • 【程序员养生延寿系列-万人关注的养生指南 4 】
  • 电子电气架构——AUTOSAR架构下EcuM唤醒源事件详解
  • Android在后台读取UVC摄像头的帧数据流并推送
  • 齐天大圣的生活
  • 虚拟化介绍
  • 在Pycharm中运行Django项目如何指定运行的端口
  • Java中的图数据库应用:Neo4j入门
  • 【MySQL】MySQL复合查询--多表查询自连接子查询 - 副本
  • 多益网络这种公司你还敢来吗?
  • selenium中webdriver常用的ChromeOptions参数
  • 从键盘输入5个整数,将这些整数插入到一个链表中,并按从小到大次序排列,最后输出这些整数。
  • Golang 并发机制 CSP模型
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • centos安装java运行环境jdk+tomcat
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • Redis的resp协议
  • Sass Day-01
  • Spring框架之我见(三)——IOC、AOP
  • 百度地图API标注+时间轴组件
  • 彻底搞懂浏览器Event-loop
  • 从零开始学习部署
  • 对超线程几个不同角度的解释
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 来,膜拜下android roadmap,强大的执行力
  • 理解在java “”i=i++;”所发生的事情
  • 我与Jetbrains的这些年
  • 小李飞刀:SQL题目刷起来!
  • 一起参Ember.js讨论、问答社区。
  • 中文输入法与React文本输入框的问题与解决方案
  • 2017年360最后一道编程题
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • ###项目技术发展史
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (arch)linux 转换文件编码格式
  • (C语言)二分查找 超详细
  • (八)Flask之app.route装饰器函数的参数
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (接口自动化)Python3操作MySQL数据库
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (转)nsfocus-绿盟科技笔试题目
  • (转)Oracle存储过程编写经验和优化措施
  • (转)VC++中ondraw在什么时候调用的
  • *1 计算机基础和操作系统基础及几大协议
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .NET delegate 委托 、 Event 事件,接口回调
  • .NET构架之我见