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

2024-03-03 02:04

本文主要是介绍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

这篇关于YOLOv9有效提点|加入SGE、Ge、Global Context、GAM等几十种注意力机制(四)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/768114

相关文章

Spring使用@Retryable实现自动重试机制

《Spring使用@Retryable实现自动重试机制》在微服务架构中,服务之间的调用可能会因为一些暂时性的错误而失败,例如网络波动、数据库连接超时或第三方服务不可用等,在本文中,我们将介绍如何在Sp... 目录引言1. 什么是 @Retryable?2. 如何在 Spring 中使用 @Retryable

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

浅谈主机加固,六种有效的主机加固方法

在数字化时代,数据的价值不言而喻,但随之而来的安全威胁也日益严峻。从勒索病毒到内部泄露,企业的数据安全面临着前所未有的挑战。为了应对这些挑战,一种全新的主机加固解决方案应运而生。 MCK主机加固解决方案,采用先进的安全容器中间件技术,构建起一套内核级的纵深立体防护体系。这一体系突破了传统安全防护的局限,即使在管理员权限被恶意利用的情况下,也能确保服务器的安全稳定运行。 普适主机加固措施:

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

【Tools】大模型中的自注意力机制

摇来摇去摇碎点点的金黄 伸手牵来一片梦的霞光 南方的小巷推开多情的门窗 年轻和我们歌唱 摇来摇去摇着温柔的阳光 轻轻托起一件梦的衣裳 古老的都市每天都改变模样                      🎵 方芳《摇太阳》 自注意力机制(Self-Attention)是一种在Transformer等大模型中经常使用的注意力机制。该机制通过对输入序列中的每个元素计算与其他元素之间的相似性,

如何通俗理解注意力机制?

1、注意力机制(Attention Mechanism)是机器学习和深度学习中一种模拟人类注意力的方法,用于提高模型在处理大量信息时的效率和效果。通俗地理解,它就像是在一堆信息中找到最重要的部分,把注意力集中在这些关键点上,从而更好地完成任务。以下是几个简单的比喻来帮助理解注意力机制: 2、寻找重点:想象一下,你在阅读一篇文章的时候,有些段落特别重要,你会特别注意这些段落,反复阅读,而对其他部分

【Tools】大模型中的注意力机制

摇来摇去摇碎点点的金黄 伸手牵来一片梦的霞光 南方的小巷推开多情的门窗 年轻和我们歌唱 摇来摇去摇着温柔的阳光 轻轻托起一件梦的衣裳 古老的都市每天都改变模样                      🎵 方芳《摇太阳》 在大模型中,注意力机制是一种重要的技术,它被广泛应用于自然语言处理领域,特别是在机器翻译和语言模型中。 注意力机制的基本思想是通过计算输入序列中各个位置的权重,以确

FreeRTOS内部机制学习03(事件组内部机制)

文章目录 事件组使用的场景事件组的核心以及Set事件API做的事情事件组的特殊之处事件组为什么不关闭中断xEventGroupSetBitsFromISR内部是怎么做的? 事件组使用的场景 学校组织秋游,组长在等待: 张三:我到了 李四:我到了 王五:我到了 组长说:好,大家都到齐了,出发! 秋游回来第二天就要提交一篇心得报告,组长在焦急等待:张三、李四、王五谁先写好就交谁的

UVM:callback机制的意义和用法

1. 作用         Callback机制在UVM验证平台,最大用处就是为了提高验证平台的可重用性。在不创建复杂的OOP层次结构前提下,针对组件中的某些行为,在其之前后之后,内置一些函数,增加或者修改UVM组件的操作,增加新的功能,从而实现一个环境多个用例。此外还可以通过Callback机制构建异常的测试用例。 2. 使用步骤         (1)在UVM组件中内嵌callback函