mmdetection3增加12种注意力机制

在mmdetection/mmdet/models/layers/目录下增加attention_layers.py

import torch.nn as nn
from mmdet.registry import MODELS
#自定义注意力机制算法
from .attention.CBAM import CBAMBlock as _CBAMBlock
from .attention.BAM import BAMBlock as _BAMBlock
from .attention.SEAttention import SEAttention as _SEAttention
from .attention.ECAAttention import ECAAttention as _ECAAttention
from .attention.ShuffleAttention import ShuffleAttention as _ShuffleAttention
from .attention.SGE import SpatialGroupEnhance as _SpatialGroupEnhance
from .attention.A2Atttention import DoubleAttention as _DoubleAttention
from .attention.PolarizedSelfAttention import SequentialPolarizedSelfAttention as _SequentialPolarizedSelfAttention
from .attention.CoTAttention import CoTAttention as _CoTAttention
from .attention.TripletAttention import TripletAttention as _TripletAttention
from .attention.CoordAttention import CoordAtt as _CoordAtt
from .attention.ParNetAttention import ParNetAttention as _ParNetAttention@MODELS.register_module()
class CBAMBlock(nn.Module):def __init__(self, in_channels, **kwargs):super(CBAMBlock, self).__init__()print("======激活注意力机制模块【CBAMBlock】======")self.module = _CBAMBlock(channel = in_channels, **kwargs)def forward(self, x):return self.module(x)@MODELS.register_module()
class BAMBlock(nn.Module):def __init__(self, in_channels, **kwargs):super(BAMBlock, self).__init__()print("======激活注意力机制模块【BAMBlock】======")self.module = _BAMBlock(channel = in_channels, **kwargs)def forward(self, x):return self.module(x)@MODELS.register_module()
class SEAttention(nn.Module):def __init__(self, in_channels, **kwargs):super(SEAttention, self).__init__()print("======激活注意力机制模块【SEAttention】======")self.module = _SEAttention(channel = in_channels, **kwargs)def forward(self, x):return self.module(x)   @MODELS.register_module()
class ECAAttention(nn.Module):def __init__(self, in_channels, **kwargs):super(ECAAttention, self).__init__()print("======激活注意力机制模块【ECAAttention】======")self.module = _ECAAttention(**kwargs)def forward(self, x):return self.module(x)  @MODELS.register_module()
class ShuffleAttention(nn.Module):def __init__(self, in_channels, **kwargs):super(ShuffleAttention, self).__init__()print("======激活注意力机制模块【ShuffleAttention】======")self.module = _ShuffleAttention(channel = in_channels, **kwargs)def forward(self, x):return self.module(x)@MODELS.register_module()
class SpatialGroupEnhance(nn.Module):def __init__(self, in_channels, **kwargs):super(SpatialGroupEnhance, self).__init__()print("======激活注意力机制模块【SpatialGroupEnhance】======")self.module = _SpatialGroupEnhance(**kwargs)def forward(self, x):return self.module(x)   @MODELS.register_module()
class DoubleAttention(nn.Module):def __init__(self, in_channels, **kwargs):super(DoubleAttention, self).__init__()print("======激活注意力机制模块【DoubleAttention】======")self.module = _DoubleAttention(in_channels, 128, 128,True)def forward(self, x):return self.module(x)  @MODELS.register_module()
class SequentialPolarizedSelfAttention(nn.Module):def __init__(self, in_channels, **kwargs):super(SequentialPolarizedSelfAttention, self).__init__()print("======激活注意力机制模块【Polarized Self-Attention】======")self.module = _SequentialPolarizedSelfAttention(channel=in_channels)def forward(self, x):return self.module(x)   @MODELS.register_module()
class CoTAttention(nn.Module):def __init__(self, in_channels, **kwargs):super(CoTAttention, self).__init__()print("======激活注意力机制模块【CoTAttention】======")self.module = _CoTAttention(dim=in_channels, **kwargs)def forward(self, x):return self.module(x)  @MODELS.register_module()
class TripletAttention(nn.Module):def __init__(self, in_channels, **kwargs):super(TripletAttention, self).__init__()print("======激活注意力机制模块【TripletAttention】======")self.module = _TripletAttention()def forward(self, x):return self.module(x)      @MODELS.register_module()
class CoordAtt(nn.Module):def __init__(self, in_channels, **kwargs):super(CoordAtt, self).__init__()print("======激活注意力机制模块【CoordAtt】======")self.module = _CoordAtt(in_channels, in_channels, **kwargs)def forward(self, x):return self.module(x)    @MODELS.register_module()
class ParNetAttention(nn.Module):def __init__(self, in_channels, **kwargs):super(ParNetAttention, self).__init__()print("======激活注意力机制模块【ParNetAttention】======")self.module = _ParNetAttention(channel=in_channels)def forward(self, x):return self.module(x)  

与attention_layers.py同级目录下创建attention文件夹,在attention文件中放12种注意力机制算法文件。

下载地址:mmdetection3的12种注意力机制资源-CSDN文库icon-default.png?t=N7T8https://download.csdn.net/download/lanyan90/89513979

使用方法:

以faster-rcnn_r50为例,创建faster-rcnn_r50_fpn_1x_coco_attention.py

_base_ = 'configs/detection/faster_rcnn/faster-rcnn_r50_fpn_1x_coco.py'custom_imports = dict(imports=['mmdet.models.layers.attention_layers'], allow_failed_imports=False)model = dict(backbone=dict(plugins = [dict(position='after_conv3',#cfg = dict(type='CBAMBlock', reduction=16, kernel_size=7)#cfg = dict(type='BAMBlock', reduction=16, dia_val=1)#cfg = dict(type='SEAttention', reduction=8)#cfg = dict(type='ECAAttention', kernel_size=3)#cfg = dict(type='ShuffleAttention', G=8)#cfg = dict(type='SpatialGroupEnhance', groups=8)#cfg = dict(type='DoubleAttention')#cfg = dict(type='SequentialPolarizedSelfAttention')#cfg = dict(type='CoTAttention', kernel_size=3)#cfg = dict(type='TripletAttention')#cfg = dict(type='CoordAtt', reduction=32)#cfg = dict(type='ParNetAttention'))])
)

想使用哪种注意力机制,放开plugins中的注释即可。

以mask-rcnn_r50为例,创建mask-rcnn_r50_fpn_1x_coco_attention.py

_base_ = 'configs/segmentation/mask_rcnn/mask-rcnn_r50_fpn_1x_coco.py'
custom_imports = dict(imports=['mmdet.models.layers.attention_layers'], allow_failed_imports=False)model = dict(backbone=dict(plugins = [dict(position='after_conv3',#cfg = dict(type='CBAMBlock', reduction=16, kernel_size=7)#cfg = dict(type='BAMBlock', reduction=16, dia_val=1)#cfg = dict(type='SEAttention', reduction=8)#cfg = dict(type='ECAAttention', kernel_size=3)#cfg = dict(type='ShuffleAttention', G=8)#cfg = dict(type='SpatialGroupEnhance', groups=8)#cfg = dict(type='DoubleAttention')#cfg = dict(type='SequentialPolarizedSelfAttention')#cfg = dict(type='CoTAttention', kernel_size=3)#cfg = dict(type='TripletAttention')#cfg = dict(type='CoordAtt', reduction=32)#cfg = dict(type='ParNetAttention'))])
)

用法一样!

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

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

相关文章

使用表单系统快速搭建邀请和签到系统

在组织活动时,邀请和签到环节往往是活动成败的关键之一。传统的纸质邀请和签到方式不仅费时费力,还容易出现各种问题,例如名单遗漏、签到混乱等。而使用TDuckX“搭建邀请和签到系统”将彻底改变这一现状,为活动组织者提供了一种高…

STM32蓝牙HID实战:打造低功耗、高性能的客制化键盘

一、项目概述 本项目旨在使用STM32单片机打造一款功能强大的蓝牙客制化键盘,它拥有以下特点: 九键布局,小巧便携: 满足日常使用需求,方便携带。全键可编程: 所有按键和旋钮均可通过电脑软件自定义快捷键,实现个性化功…

如何用java语言+若依开源框架开发一套数字化产科系统 数字化产科管理平台源码

如何用java语言若依开源框架开发一套数字化产科系统 数字化产科管理平台源码 要使用Java语言和若依(RuoYi)开源框架来开发一个数字化产科系统,你需要遵循一系列步骤,从环境搭建到系统设计与开发,再到测试与部署。 以下…

2023年问界M9 EV 问界M9增程维修手册和电路图线路图资料更新

此次更新了2023年问界M9 EV及问界M9增程维修手册和电路图资料,覆盖市面上99%车型,包括维修手册、电路图、新车特征、车身钣金维修数据、全车拆装、扭力、发动机大修、发动机正时、保养、电路图、针脚定义、模块传感器、保险丝盒图解对照表位置等等&#…

Redis的八种数据类型介绍

Redis 是一个高性能的键值存储,它支持多种丰富的数据类型。每种数据类型都有其特定的用途和底层实现。下面我将介绍 Redis 支持的主要数据类型及其背后的数据结构。 本人这里还有几篇详细的Redis用法文章,可以用来进阶康康! 1. 字符串 (Stri…

ubuntu24.04LTS防火墙设置

Ubuntu24.04LTS开箱自带ufw,一定程度避免了开机下载ufw被攻击,excellent 转载aliyun教程 sudo ufw enbale可以启用并且开机自启(显示有效,未nmap实测) 教程3 转载自CSDN 完整格式如下: # 禁止IP连接端口 sudo ufw deny proto tc…

Cherno 游戏引擎笔记 (45~60)

有几个部分的笔记以图片形式呈现(如果没找到文本可以查看是否遗漏了图片笔记) My Github REPO(GitHub - JJJJJJJustin/Nut: The game_engine which learned from Cherno) 源码笔记,希望帮到你 :-} ---Shader Library(着色器库&…

南京观海微电子----AC/DC、DC/DC转换器知识

什么是AC? Alternating Current(交流)的首字母缩写。 AC是大小和极性(方向)随时间呈周期性变化的电流。 电流极性在1秒内的变化次数被称为频率,以Hz为单位表示。 什么是DC? Direct Current(直流…

visual studio远程调试

场景一(被远程调试的电脑) 确定系统位数 我这里是x64的 找到msvsmon.exe msvsmon.exe目录位置解释: “F:\App\VisualStudio\an\Common7\IDE\”是visual studio所在位置、 “Remote Debugger\”是固定位置、 “x64”是系统位数。 拼起来就是…

grid布局下的展开/收缩过渡效果【vue/已验证可正常运行】

代码来自GPT4o&#xff1a;国内官方直连GPT4o <template><div class"container"><button class"butns" click"toggleShowMore">{{ showAll ? 收回 : 显示更多 }}</button><transition-group name"slide-fade&…

数据库原理实验报告第二次-SQL Server SSMS工具创建和管理数据库及数据表.

题目 1、使用SSMS工具创建名为ecommerce的数据库&#xff0c;并查看或修改数据库属性 2、在数据库ecommerce中创建如下表&#xff1a; &#xff08;1&#xff09;商品类别表category 字段名 数据类型 允许NULL值 约束 字段说明 catno int 否 主键 商品类别编号 ca…

AI是在帮助开发者还是取代他们?

一&#xff1a;介绍 生成式人工智能&#xff08;AIGC&#xff09;在软件开发领域的应用确实为开发者带来了很多便利和效率提升。AI工具可以通过代码生成、错误检测、自动化测试等功能&#xff0c;帮助开发者更快速地开发和优化软件&#xff0c;减少重复性工作&#xff0c;提高…

哈喽GPT-4o,对GPT-4o 论文速写的思考与探索

作为一款强大的语言模型&#xff0c;ChatGPT 在论文写作上具备显著优势。它能够辅助学者或研究人员自动创建论文框架、摘要、文献综述及论文段落&#xff08;如引言、方法、结果、结论等&#xff09;。此外&#xff0c;ChatGPT 还能优化论文结构、润色、降低内容重复率&#xf…

比Proxmox VE更易用的免费虚拟化平台

之前虚拟化一直玩Proxmox VE&#xff0c;最近发现一个更易用的虚拟化软件CSYun&#xff0c;他与Proxmox VE类似&#xff0c;都是一个服务器虚拟化平台。它不像VMware ESXi那么复杂&#xff0c;对于个人使用者和中小企业是一个比较好的选择。 这个软件所在的网址为&#xff1a;…

【Python】已解决TypeError: init() got an unexpected keyword argument ‘threshold’

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决TypeError: init() got an unexpected keyword argument ‘threshold’ 一、分析问题背景 在Python编程中&#xff0c;遇到“TypeError: init() got an unexpected keyword …

Three.js机器人与星系动态场景(二):强化三维空间认识

在上篇博客中介绍了如何快速利用react搭建three.js平台&#xff0c;并实现3D模型的可视化。本文将在上一篇的基础上强化坐标系的概念。引入AxesHelper辅助工具及文本绘制工具&#xff0c;带你快速理解camer、坐标系、position、可视区域。 Three.js机器人与星系动态场景&#x…

色彩搭配的艺术:打造和谐视觉体验的秘诀

当设计作品呈现给用户时首先映入眼帘的是视觉表达&#xff0c;色彩无疑是最关键的元素之一。色彩不仅是视觉艺术的一部分&#xff0c;也承载着情感文化甚至个人品味的多重含义。在设计领域&#xff0c;色彩设计可以极大地影响作品的整体感受和传达效果。那么什么是色彩设计&…

python拉取gitlab项目以及拉取报错处理

问题解决 问题1、unable to access https://gitlab.dome.com/web-dome/dome.git/: SSL certificate problem: self signed certificate 解决&#xff1a;打开本地git bash输入下面代码 git config --global http.sslVerify false; 问题2、Authentication failed for https:…

ArmPiPro-网络配置

说明 因为ubuntu18.04有点旧&#xff0c;这里同时用上了netplan和nm(nmcli)这两个网络工具&#xff0c;如果是ubuntu22.04&#xff0c;网络管理全部用nmcli和nmtui即可。 eth0有线一般用来连接电脑&#xff0c;wlan0即是用来连接WiFi热点。 设置Pi4Lubuntu的Wifi模式&#xff…

ComboBox控件如果有两个相同的项,并且你选择了第二个,再次打开下拉列表时,它可能不会定位到你选择的上面第一个项问题

一、MFC的ComBox绑定项,有两个项名称相同,选择第二个绑定项,再次打开下拉框会定位到第 在MFC中&#xff0c;ComboBox控件默认会在选择项改变时发送CBN_SELCHANGE通知&#xff0c;但如果ComboBox中有两个相同的项&#xff0c;并且你选择了第二个&#xff0c;再次打开下拉列表时…